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 : |
<?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'); } } }