<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.4 |
+ | CiviCRM version 4.5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
*/
public $_groupID;
+ public $_multiRecordDisplay;
+
+ public $_copyValueId;
/**
* pre processing work done here.
*
*/
function preProcess() {
$this->_cdType = CRM_Utils_Array::value('type', $_GET);
-
$this->assign('cdType', FALSE);
- if ($this->_cdType) {
- $this->assign('cdType', TRUE);
- return CRM_Custom_Form_CustomData::preProcess($this);
- }
+ $this->_multiRecordDisplay = CRM_Utils_Request::retrieve('multiRecordDisplay', 'String', $this);
+ if ($this->_cdType || $this->_multiRecordDisplay == 'single') {
+ if ($this->_cdType) {
+ $this->assign('cdType', TRUE);
+ }
+ // NOTE : group id is not stored in session from within CRM_Custom_Form_CustomData::preProcess func
+ // this is due to some condition inside it which restricts it from saving in session
+ // so doing this for multi record edit action
+ CRM_Custom_Form_CustomData::preProcess($this);
+ if ($this->_multiRecordDisplay) {
+ $this->_groupID = CRM_Utils_Request::retrieve('groupID', 'Positive', $this);
+ $this->_tableID = $this->_entityId;
+ $this->_contactType = CRM_Contact_BAO_Contact::getContactType($this->_tableID);
+ $mode = CRM_Utils_Request::retrieve('mode', 'String', $this);
+ $hasReachedMax = CRM_Core_BAO_CustomGroup::hasReachedMaxLimit($this->_groupID, $this->_tableID);
+ if ($hasReachedMax && $mode == 'add') {
+ CRM_Core_Error::statusBounce(ts('The maximum record limit is reached'));
+ }
+ $this->_copyValueId = CRM_Utils_Request::retrieve('copyValueId', 'Positive', $this);
+ $groupTitle = CRM_Core_BAO_CustomGroup::getTitle($this->_groupID);
+ $mode = CRM_Utils_Request::retrieve('mode', 'String', CRM_Core_DAO::$_nullObject, FALSE, NULL, 'GET');
+ $mode = ucfirst($mode);
+ CRM_Utils_System::setTitle(ts('%1 %2 Record', array(1 => $mode, 2 => $groupTitle)));
+
+ if (!empty($_POST['hidden_custom'])) {
+ $this->assign('postedInfo', TRUE);
+ }
+ }
+ return;
+ }
$this->_groupID = CRM_Utils_Request::retrieve('groupID', 'Positive', $this, TRUE);
$this->_tableID = CRM_Utils_Request::retrieve('tableId', 'Positive', $this, TRUE);
* @access public
*/
public function buildQuickForm() {
- if ($this->_cdType) {
+ if ($this->_cdType || $this->_multiRecordDisplay == 'single') {
+ // buttons display for multi-valued fields to perform independednt actions
+ if ($this->_multiRecordDisplay) {
+ $isMultiple = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup',
+ $this->_groupID,
+ 'is_multiple'
+ );
+ if ($isMultiple) {
+ $this->assign('multiRecordDisplay', $this->_multiRecordDisplay);
+ $saveButtonName = $this->_copyValueId ? 'Save a Copy': 'Save';
+ $this->addButtons(array(
+ array(
+ 'type' => 'upload',
+ 'name' => ts('%1', array(1 => $saveButtonName)),
+ 'isDefault' => TRUE,
+ ),
+ array(
+ 'type' => 'upload',
+ 'name' => ts('Save and New'),
+ 'subName' => 'new',
+ ),
+ array(
+ 'type' => 'cancel',
+ 'name' => ts('Cancel'),
+ ),
+ )
+ );
+ }
+ }
return CRM_Custom_Form_CustomData::buildQuickForm($this);
}
* @return array the default array reference
*/
function setDefaultValues() {
- if ($this->_cdType) {
- $customDefaultValue = CRM_Custom_Form_CustomData::setDefaultValues($this);
+ if ($this->_cdType || $this->_multiRecordDisplay == 'single') {
+ if ($this->_copyValueId) {
+ // cached tree is fetched
+ $groupTree = &CRM_Core_BAO_CustomGroup::getTree($this->_type,
+ $this,
+ $this->_entityId,
+ $this->_groupID
+ );
+ $valueIdDefaults = array();
+ $groupTreeValueId = CRM_Core_BAO_CustomGroup::formatGroupTree($groupTree, $this->_copyValueId, $this);
+ CRM_Core_BAO_CustomGroup::setDefaults($groupTreeValueId, $valueIdDefaults, FALSE, FALSE, $this->get('action'));
+ $tableId = $groupTreeValueId[$this->_groupID]['table_id'];
+ foreach ($valueIdDefaults as $valueIdElementName => $value) {
+ // build defaults for COPY action for new record saving
+ $valueIdElementNamePieces = explode('_', $valueIdElementName);
+ $valueIdElementNamePieces[2] = "-{$this->_groupCount}";
+ $elementName = implode('_', $valueIdElementNamePieces);
+ $customDefaultValue[$elementName] = $value;
+ }
+ }
+ else {
+ $customDefaultValue = CRM_Custom_Form_CustomData::setDefaultValues($this);
+ }
return $customDefaultValue;
}
public function postProcess() {
// Get the form values and groupTree
$params = $this->controller->exportValues($this->_name);
+
CRM_Core_BAO_CustomValueTable::postProcess($params,
$this->_groupTree[$this->_groupID]['fields'],
'civicrm_contact',
$this->_tableID,
$this->_entityType
);
-
+ $table = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $this->_groupID, 'table_name');
+ $cgcount = CRM_Core_BAO_CustomGroup::customGroupDataExistsForEntity($this->_tableID, $table, TRUE);
+ $cgcount += 1;
+ $buttonName = $this->controller->getButtonName();
+ if ($buttonName == $this->getButtonName('upload', 'new')) {
+ CRM_Core_Session::singleton()->pushUserContext(CRM_Utils_System::url('civicrm/contact/view/cd/edit', "reset=1&type={$this->_contactType}&groupID={$this->_groupID}&entityID={$this->_tableID}&cgcount={$cgcount}&multiRecordDisplay=single&mode=add"));
+ }
// reset the group contact cache for this group
CRM_Contact_BAO_GroupContactCache::remove();
}
-}
-
+}
\ No newline at end of file