/** * Add select element for campaign * and assign needful info to templates. * * @param CRM_Core_Form $form * @param int $connectedCampaignId */ public static function addCampaign(&$form, $connectedCampaignId = NULL) { //some forms do set default and freeze. $appendDates = TRUE; if ($form->get('action') & CRM_Core_Action::VIEW) { $appendDates = FALSE; } $campaignDetails = self::getPermissionedCampaigns($connectedCampaignId, NULL, TRUE, TRUE, $appendDates); $fields = array('campaigns', 'hasAccessCampaign', 'isCampaignEnabled'); foreach ($fields as $fld) { ${$fld} = CRM_Utils_Array::value($fld, $campaignDetails); } //lets see do we have past campaigns. $hasPastCampaigns = FALSE; $allActiveCampaigns = CRM_Campaign_BAO_Campaign::getCampaigns(NULL, NULL, TRUE, FALSE); if (count($allActiveCampaigns) > count($campaigns)) { $hasPastCampaigns = TRUE; } $hasCampaigns = FALSE; if (!empty($campaigns)) { $hasCampaigns = TRUE; } if ($hasPastCampaigns) { $hasCampaigns = TRUE; $form->add('hidden', 'included_past_campaigns'); } $showAddCampaign = FALSE; $alreadyIncludedPastCampaigns = FALSE; if ($connectedCampaignId || $isCampaignEnabled && $hasAccessCampaign) { $showAddCampaign = TRUE; //lets add past campaigns as options to quick-form element. if ($hasPastCampaigns && $form->getElementValue('included_past_campaigns')) { $campaigns = $allActiveCampaigns; $alreadyIncludedPastCampaigns = TRUE; } $campaign =& $form->add('select', 'campaign_id', ts('Campaign'), array('' => ts('- select -')) + $campaigns, FALSE, array('class' => 'crm-select2')); //lets freeze when user does not has access or campaign is disabled. if (!$isCampaignEnabled || !$hasAccessCampaign) { $campaign->freeze(); } } $addCampaignURL = NULL; if (empty($campaigns) && $hasAccessCampaign && $isCampaignEnabled) { $addCampaignURL = CRM_Utils_System::url('civicrm/campaign/add', 'reset=1'); } $includePastCampaignURL = NULL; if ($hasPastCampaigns && $isCampaignEnabled && $hasAccessCampaign) { $includePastCampaignURL = CRM_Utils_System::url('civicrm/ajax/rest', 'className=CRM_Campaign_Page_AJAX&fnName=allActiveCampaigns', FALSE, NULL, FALSE); } //carry this info to templates. $infoFields = array('hasCampaigns', 'addCampaignURL', 'showAddCampaign', 'hasPastCampaigns', 'hasAccessCampaign', 'isCampaignEnabled', 'includePastCampaignURL', 'alreadyIncludedPastCampaigns'); foreach ($infoFields as $fld) { $campaignInfo[$fld] = ${$fld}; } $form->assign('campaignInfo', $campaignInfo); }