190 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  +--------------------------------------------------------------------+
 | |
|  | CiviCRM version 4.7                                                |
 | |
|  +--------------------------------------------------------------------+
 | |
|  | Copyright CiviCRM LLC (c) 2004-2017                                |
 | |
|  +--------------------------------------------------------------------+
 | |
|  | This file is a part of CiviCRM.                                    |
 | |
|  |                                                                    |
 | |
|  | CiviCRM is free software; you can copy, modify, and distribute it  |
 | |
|  | under the terms of the GNU Affero General Public License           |
 | |
|  | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
 | |
|  |                                                                    |
 | |
|  | CiviCRM is distributed in the hope that it will be useful, but     |
 | |
|  | WITHOUT ANY WARRANTY; without even the implied warranty of         |
 | |
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
 | |
|  | See the GNU Affero General Public License for more details.        |
 | |
|  |                                                                    |
 | |
|  | You should have received a copy of the GNU Affero General Public   |
 | |
|  | License and the CiviCRM Licensing Exception along                  |
 | |
|  | with this program; if not, contact CiviCRM LLC                     |
 | |
|  | at info[AT]civicrm[DOT]org. If you have questions about the        |
 | |
|  | GNU Affero General Public License or the licensing of CiviCRM,     |
 | |
|  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
 | |
|  +--------------------------------------------------------------------+
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * @package CRM
 | |
|  * @copyright CiviCRM LLC (c) 2004-2017
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * This class generates form components generic to all the contact types.
 | |
|  *
 | |
|  * It delegates the work to lower level subclasses and integrates the changes
 | |
|  * back in. It also uses a lot of functionality with the CRM API's, so any change
 | |
|  * made here could potentially affect the API etc. Be careful, be aware, use unit tests.
 | |
|  */
 | |
| class CRM_Contact_Form_RelatedContact extends CRM_Core_Form {
 | |
| 
 | |
|   /**
 | |
|    * The contact type of the form.
 | |
|    *
 | |
|    * @var string
 | |
|    */
 | |
|   protected $_contactType;
 | |
| 
 | |
|   /**
 | |
|    * The contact id, used when editing the form
 | |
|    *
 | |
|    * @var int
 | |
|    */
 | |
|   public $_contactId;
 | |
| 
 | |
|   /**
 | |
|    * Explicitly declare the form context.
 | |
|    */
 | |
|   public function getDefaultContext() {
 | |
|     return 'create';
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Build all the data structures needed to build the form.
 | |
|    */
 | |
|   public function preProcess() {
 | |
|     // reset action from the session
 | |
|     $this->_action = CRM_Utils_Request::retrieve('action', 'String',
 | |
|       $this, FALSE, 'update'
 | |
|     );
 | |
|     $this->_contactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this, TRUE);
 | |
| 
 | |
|     $rcid = CRM_Utils_Request::retrieve('rcid', 'Positive', $this);
 | |
|     $rcid = $rcid ? "&id={$rcid}" : '';
 | |
|     $session = CRM_Core_Session::singleton();
 | |
|     $session->pushUserContext(CRM_Utils_System::url('civicrm/user', "reset=1{$rcid}"));
 | |
| 
 | |
|     if ($this->_contactId) {
 | |
|       $contact = new CRM_Contact_DAO_Contact();
 | |
|       $contact->id = $this->_contactId;
 | |
|       if (!$contact->find(TRUE)) {
 | |
|         CRM_Core_Error::statusBounce(ts('contact does not exist: %1', array(1 => $this->_contactId)));
 | |
|       }
 | |
|       $this->_contactType = $contact->contact_type;
 | |
| 
 | |
|       // check for permissions
 | |
|       if (!CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::EDIT)) {
 | |
|         CRM_Core_Error::statusBounce(ts('You do not have the necessary permission to edit this contact.'));
 | |
|       }
 | |
| 
 | |
|       list($displayName, $contactImage) = CRM_Contact_BAO_Contact::getDisplayAndImage($this->_contactId);
 | |
|       CRM_Utils_System::setTitle($displayName, $contactImage . ' ' . $displayName);
 | |
|     }
 | |
|     else {
 | |
|       CRM_Core_Error::statusBounce(ts('Could not get a contact_id and/or contact_type'));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Set default values for the form.
 | |
|    *
 | |
|    * Note that in edit/view mode the default values are retrieved from the
 | |
|    * database
 | |
|    */
 | |
|   public function setDefaultValues() {
 | |
|     return $this->_defaults;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Build the form object.
 | |
|    */
 | |
|   public function buildQuickForm() {
 | |
|     $params = array();
 | |
|     $params['id'] = $params['contact_id'] = $this->_contactId;
 | |
|     $contact = CRM_Contact_BAO_Contact::retrieve($params, $this->_defaults);
 | |
| 
 | |
|     $countryID = '';
 | |
|     $stateID = '';
 | |
|     if (!empty($this->_defaults['address'][1])) {
 | |
|       $countryID = CRM_Utils_Array::value('country_id',
 | |
|         $this->_defaults['address'][1]
 | |
|       );
 | |
|       $stateID = CRM_Utils_Array::value('state_province_id',
 | |
|         $this->_defaults['address'][1]
 | |
|       );
 | |
|     }
 | |
|     CRM_Contact_BAO_Contact_Utils::buildOnBehalfForm($this,
 | |
|       $this->_contactType,
 | |
|       $countryID,
 | |
|       $stateID,
 | |
|       ts('Contact Information')
 | |
|     );
 | |
| 
 | |
|     $this->addButtons(array(
 | |
|       array(
 | |
|         'type' => 'next',
 | |
|         'name' => ts('Save'),
 | |
|         'isDefault' => TRUE,
 | |
|       ),
 | |
|       array(
 | |
|         'type' => 'cancel',
 | |
|         'name' => ts('Cancel'),
 | |
|       ),
 | |
|     ));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Form submission of new/edit contact is processed.
 | |
|    */
 | |
|   public function postProcess() {
 | |
|     // store the submitted values in an array
 | |
|     $params = $this->controller->exportValues($this->_name);
 | |
| 
 | |
|     $locType = CRM_Core_BAO_LocationType::getDefault();
 | |
|     foreach (array(
 | |
|                'phone',
 | |
|                'email',
 | |
|                'address',
 | |
|              ) as $locFld) {
 | |
|       if (!empty($this->_defaults[$locFld]) && $this->_defaults[$locFld][1]['location_type_id']) {
 | |
|         $params[$locFld][1]['is_primary'] = $this->_defaults[$locFld][1]['is_primary'];
 | |
|         $params[$locFld][1]['location_type_id'] = $this->_defaults[$locFld][1]['location_type_id'];
 | |
|       }
 | |
|       else {
 | |
|         $params[$locFld][1]['is_primary'] = 1;
 | |
|         $params[$locFld][1]['location_type_id'] = $locType->id;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     $params['contact_type'] = $this->_contactType;
 | |
|     //CRM-14904
 | |
|     if (isset($this->_defaults['contact_sub_type'])) {
 | |
|       $params['contact_sub_type'] = $this->_defaults['contact_sub_type'];
 | |
|     }
 | |
|     $params['contact_id'] = $this->_contactId;
 | |
| 
 | |
|     $contact = CRM_Contact_BAO_Contact::create($params, TRUE);
 | |
| 
 | |
|     // set status message.
 | |
|     if ($this->_contactId) {
 | |
|       $message = ts('%1 has been updated.', array(1 => $contact->display_name));
 | |
|     }
 | |
|     else {
 | |
|       $message = ts('%1 has been created.', array(1 => $contact->display_name));
 | |
|     }
 | |
|     CRM_Core_Session::setStatus($message, ts('Contact Saved'), 'success');
 | |
|   }
 | |
| 
 | |
| }
 |