_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, FALSE, NULL, 'REQUEST' ); $this->assign('contributionPageID', $this->_id); // get the requested action $this->_action = CRM_Utils_Request::retrieve('action', 'String', // default to 'browse' $this, FALSE, 'browse' ); // setting title and 3rd level breadcrumb for html page if contrib page exists if ($this->_id) { $title = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionPage', $this->_id, 'title'); if ($this->_action == CRM_Core_Action::UPDATE) { $this->_single = TRUE; } } // CRM-16776 - show edit/copy/create buttons on Profiles Tab if user has required permission. if (CRM_Core_Permission::check('administer CiviCRM')) { $this->assign('perm', TRUE); } // set up tabs CRM_Contribute_Form_ContributionPage_TabHeader::build($this); if ($this->_action == CRM_Core_Action::UPDATE) { CRM_Utils_System::setTitle(ts('Configure Page - %1', array(1 => $title))); } elseif ($this->_action == CRM_Core_Action::VIEW) { CRM_Utils_System::setTitle(ts('Preview Page - %1', array(1 => $title))); } elseif ($this->_action == CRM_Core_Action::DELETE) { CRM_Utils_System::setTitle(ts('Delete Page - %1', array(1 => $title))); } //cache values. $this->_values = $this->get('values'); if (!is_array($this->_values)) { $this->_values = array(); if (isset($this->_id) && $this->_id) { $params = array('id' => $this->_id); CRM_Core_DAO::commonRetrieve('CRM_Contribute_DAO_ContributionPage', $params, $this->_values); } $this->set('values', $this->_values); } // Preload libraries required by the "Profiles" tab $schemas = array('IndividualModel', 'OrganizationModel', 'ContributionModel'); if (in_array('CiviMember', CRM_Core_Config::singleton()->enableComponents)) { $schemas[] = 'MembershipModel'; } CRM_UF_Page_ProfileEditor::registerProfileScripts(); CRM_UF_Page_ProfileEditor::registerSchemas($schemas); } /** * Build the form object. * * @return void */ public function buildQuickForm() { $this->applyFilter('__ALL__', 'trim'); $session = CRM_Core_Session::singleton(); $this->_cancelURL = CRM_Utils_Array::value('cancelURL', $_POST); if (!$this->_cancelURL) { $this->_cancelURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'); } if ($this->_cancelURL) { $this->addElement('hidden', 'cancelURL', $this->_cancelURL); } if ($this->_single) { $buttons = array( array( 'type' => 'next', 'name' => ts('Save'), 'spacing' => '         ', 'isDefault' => TRUE, ), array( 'type' => 'upload', 'name' => ts('Save and Done'), 'spacing' => '         ', 'subName' => 'done', ), ); if (!$this->_last) { $buttons[] = array( 'type' => 'submit', 'name' => ts('Save and Next'), 'spacing' => '                 ', 'subName' => 'savenext', ); } $buttons[] = array( 'type' => 'cancel', 'name' => ts('Cancel'), ); $this->addButtons($buttons); } else { $buttons = array(); if (!$this->_first) { $buttons[] = array( 'type' => 'back', 'name' => ts('Previous'), 'spacing' => '     ', ); } $buttons[] = array( 'type' => 'next', 'name' => ts('Continue'), 'spacing' => '         ', 'isDefault' => TRUE, ); $buttons[] = array( 'type' => 'cancel', 'name' => ts('Cancel'), ); $this->addButtons($buttons); } $session->replaceUserContext($this->_cancelURL); // views are implemented as frozen form if ($this->_action & CRM_Core_Action::VIEW) { $this->freeze(); $this->addElement('button', 'done', ts('Done'), array('onclick' => "location.href='civicrm/admin/custom/group?reset=1&action=browse'")); } // don't show option for contribution amounts section if membership price set // this flag is sent to template $membershipBlock = new CRM_Member_DAO_MembershipBlock(); $membershipBlock->entity_table = 'civicrm_contribution_page'; $membershipBlock->entity_id = $this->_id; $membershipBlock->is_active = 1; $hasMembershipBlk = FALSE; if ($membershipBlock->find(TRUE) && ($setID = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $this->_id, NULL, 1)) ) { $extends = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'extends'); if ($extends && $extends == CRM_Core_Component::getComponentID('CiviMember')) { $hasMembershipBlk = TRUE; } } // set value in DOM that membership price set exists CRM_Core_Resources::singleton()->addSetting(array('memberPriceset' => $hasMembershipBlk)); } /** * Set default values for the form. Note that in edit/view mode * the default values are retrieved from the database * * * @return array * defaults */ public function setDefaultValues() { //some child classes calling setdefaults directly w/o preprocess. $this->_values = $this->get('values'); if (!is_array($this->_values)) { $this->_values = array(); if (isset($this->_id) && $this->_id) { $params = array('id' => $this->_id); CRM_Core_DAO::commonRetrieve('CRM_Contribute_DAO_ContributionPage', $params, $this->_values); } $this->set('values', $this->_values); } $defaults = $this->_values; $config = CRM_Core_Config::singleton(); if (isset($this->_id)) { //set defaults for pledgeBlock values. $pledgeBlockParams = array( 'entity_id' => $this->_id, 'entity_table' => ts('civicrm_contribution_page'), ); $pledgeBlockDefaults = array(); CRM_Pledge_BAO_PledgeBlock::retrieve($pledgeBlockParams, $pledgeBlockDefaults); if ($this->_pledgeBlockID = CRM_Utils_Array::value('id', $pledgeBlockDefaults)) { $defaults['is_pledge_active'] = TRUE; } $pledgeBlock = array( 'is_pledge_interval', 'max_reminders', 'initial_reminder_day', 'additional_reminder_day', ); foreach ($pledgeBlock as $key) { $defaults[$key] = CRM_Utils_Array::value($key, $pledgeBlockDefaults); } if (!empty($pledgeBlockDefaults['pledge_frequency_unit'])) { $defaults['pledge_frequency_unit'] = array_fill_keys(explode(CRM_Core_DAO::VALUE_SEPARATOR, $pledgeBlockDefaults['pledge_frequency_unit'] ), '1'); } // fix the display of the monetary value, CRM-4038 if (isset($defaults['goal_amount'])) { $defaults['goal_amount'] = CRM_Utils_Money::format($defaults['goal_amount'], NULL, '%a'); } // get price set of type contributions //this is the value for stored in db if price set extends contribution $usedFor = 2; $this->_priceSetID = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $this->_id, $usedFor, 1); if ($this->_priceSetID) { $defaults['price_set_id'] = $this->_priceSetID; } if (!empty($defaults['end_date'])) { list($defaults['end_date'], $defaults['end_date_time']) = CRM_Utils_Date::setDateDefaults($defaults['end_date']); } if (!empty($defaults['start_date'])) { list($defaults['start_date'], $defaults['start_date_time']) = CRM_Utils_Date::setDateDefaults($defaults['start_date']); } } else { $defaults['is_active'] = 1; // set current date as start date list($defaults['start_date'], $defaults['start_date_time']) = CRM_Utils_Date::setDateDefaults(); } if (!isset($defaults['for_organization'])) { $defaults['for_organization'] = ts('I am contributing on behalf of an organization.'); } if (!empty($defaults['recur_frequency_unit'])) { $defaults['recur_frequency_unit'] = array_fill_keys(explode(CRM_Core_DAO::VALUE_SEPARATOR, $defaults['recur_frequency_unit'] ), '1'); } else { # CRM 10860 $defaults['recur_frequency_unit'] = array('month' => 1); } if (!empty($defaults['is_for_organization'])) { $defaults['is_organization'] = 1; } else { $defaults['is_for_organization'] = 1; } // confirm page starts out enabled if (!isset($defaults['is_confirm_enabled'])) { $defaults['is_confirm_enabled'] = 1; } return $defaults; } /** * Process the form. * * @return void */ public function postProcess() { $pageId = $this->get('id'); //page is newly created. if ($pageId && !$this->_id) { $session = CRM_Core_Session::singleton(); $session->pushUserContext(CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1')); } } public function endPostProcess() { // make submit buttons keep the current working tab opened, or save and next tab if ($this->_action & CRM_Core_Action::UPDATE) { $className = CRM_Utils_String::getClassName($this->_name); //retrieve list of pages from StateMachine and find next page //this is quite painful because StateMachine is full of protected variables //so we have to retrieve all pages, find current page, and then retrieve next $stateMachine = new CRM_Contribute_StateMachine_ContributionPage($this); $states = $stateMachine->getStates(); $statesList = array_keys($states); $currKey = array_search($className, $statesList); $nextPage = (array_key_exists($currKey + 1, $statesList)) ? $statesList[$currKey + 1] : ''; //unfortunately, some classes don't map to subpage names, so we alter the exceptions switch ($className) { case 'Contribute': $attributes = $this->getVar('_attributes'); $subPage = strtolower(basename(CRM_Utils_Array::value('action', $attributes))); $subPageName = ucfirst($subPage); if ($subPage == 'friend') { $nextPage = 'custom'; } else { $nextPage = 'settings'; } break; case 'MembershipBlock': $subPage = 'membership'; $subPageName = 'MembershipBlock'; $nextPage = 'thankyou'; break; default: $subPage = strtolower($className); $subPageName = $className; $nextPage = strtolower($nextPage); if ($subPage == 'amount') { $nextPage = 'membership'; } elseif ($subPage == 'thankyou') { $nextPage = 'friend'; } break; } CRM_Core_Session::setStatus(ts("'%1' information has been saved.", array(1 => $subPageName) ), ts('Saved'), 'success'); $this->postProcessHook(); if ($this->controller->getButtonName('submit') == "_qf_{$className}_next") { CRM_Utils_System::redirect(CRM_Utils_System::url("civicrm/admin/contribute/{$subPage}", "action=update&reset=1&id={$this->_id}" )); } elseif ($this->controller->getButtonName('submit') == "_qf_{$className}_submit_savenext") { if ($nextPage) { CRM_Utils_System::redirect(CRM_Utils_System::url("civicrm/admin/contribute/{$nextPage}", "action=update&reset=1&id={$this->_id}" )); } else { CRM_Utils_System::redirect(CRM_Utils_System::url("civicrm/admin/contribute", "reset=1" )); } } else { CRM_Utils_System::redirect(CRM_Utils_System::url("civicrm/admin/contribute", 'reset=1')); } } } /** * Use the form name to create the tpl file name. * * @return string */ /** * @return string */ public function getTemplateFileName() { if ($this->controller->getPrint() || $this->getVar('_id') <= 0 || ($this->_action & CRM_Core_Action::DELETE) || (CRM_Utils_String::getClassName($this->_name) == 'AddProduct') ) { return parent::getTemplateFileName(); } else { // hack lets suppress the form rendering for now self::$_template->assign('isForm', FALSE); return 'CRM/Contribute/Form/ContributionPage/Tab.tpl'; } } }