/** * Setting up new campaign in CiviCRM if this is necessary. * * @param $externalIdentifier * @param $campaign * * @return array * @throws CiviCRM_API3_Exception */ public function setCampaign($externalIdentifier, $campaign) { if (!$this->isValidCampaign($campaign)) { if ($externalIdentifier > 0) { $this->urlSpeakout = CRM_Core_BAO_Setting::getItem('Speakcivi API Preferences', 'url_speakout'); $externalCampaign = (object) json_decode(@file_get_contents("https://" . $this->urlSpeakout . "/{$externalIdentifier}.json")); if (is_object($externalCampaign) && property_exists($externalCampaign, 'name') && $externalCampaign->name != '' && property_exists($externalCampaign, 'id') && $externalCampaign->id > 0) { $this->defaultCampaignTypeId = CRM_Core_OptionGroup::getValue('campaign_type', 'Petitions', 'name', 'String', 'value'); $this->from = CRM_Core_BAO_Setting::getItem('Speakcivi API Preferences', 'from'); $locale = $this->determineLanguage($externalCampaign->internal_name); $utmCampaign = $externalCampaign->slug != '' ? $externalCampaign->slug : 'speakout_' . $externalCampaign->id; $params = array('sequential' => 1, 'title' => $externalCampaign->name, 'external_identifier' => $externalCampaign->id, 'campaign_type_id' => $this->defaultCampaignTypeId, 'start_date' => date('Y-m-d H:i:s'), $this->fieldLanguage => $this->determineLanguage($externalCampaign->internal_name), $this->fieldSenderMail => $this->from, $this->fieldUrlCampaign => "https://" . $this->urlSpeakout . "/" . $utmCampaign, $this->fieldUtmCampaign => $utmCampaign, $this->fieldTwitterShareText => $externalCampaign->twitter_share_text, $this->fieldSubjectNew => CRM_Speakcivi_Tools_Dictionary::getSubjectConfirm($locale), $this->fieldSubjectCurrent => CRM_Speakcivi_Tools_Dictionary::getSubjectImpact($locale)); $result = civicrm_api3('Campaign', 'create', $params); if ($result['count'] == 1) { $this->setCustomFieldBySQL($result['id'], $this->fieldMessageNew, CRM_Speakcivi_Tools_Dictionary::getMessageNew($locale)); $this->setCustomFieldBySQL($result['id'], $this->fieldMessageCurrent, CRM_Speakcivi_Tools_Dictionary::getMessageCurrent($locale)); return $result['values'][0]; } } } return array(); } else { return $campaign; } }