drupal-civicrm/sites/all/modules/civicrm/CRM/Mailing/PseudoConstant.php

301 lines
8 KiB
PHP
Raw Normal View History

2018-01-14 15:10:16 +02:00
<?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 holds all the Pseudo constants that are specific to Mass mailing. This avoids
* polluting the core class and isolates the mass mailer class.
*/
class CRM_Mailing_PseudoConstant extends CRM_Core_PseudoConstant {
/**
* Status options for A/B tests.
* @var array
*/
private static $abStatus;
/**
* Test criteria for A/B tests.
* @var array
*/
private static $abTestCriteria;
/**
* Winner criteria for A/B tests.
* @var array
*/
private static $abWinnerCriteria;
/**
* Mailing templates
* @var array
*/
private static $template;
/**
* Completed mailings
* @var array
*/
private static $completed;
/**
* Mailing components
* @var array
*/
private static $component;
/**
* Default component id's, indexed by component type
*/
private static $defaultComponent;
/**
* Mailing Types
* @var array
*/
private static $mailingTypes;
/**
* @return array
*/
public static function abStatus() {
if (!is_array(self::$abStatus)) {
self::$abStatus = array(
'Draft' => ts('Draft'),
'Testing' => ts('Testing'),
'Final' => ts('Final'),
);
}
return self::$abStatus;
}
/**
* @return array
*/
public static function abTestCriteria() {
if (!is_array(self::$abTestCriteria)) {
self::$abTestCriteria = array(
'subject' => ts('Test different "Subject" lines'),
'from' => ts('Test different "From" lines'),
'full_email' => ts('Test entirely different emails'),
);
}
return self::$abTestCriteria;
}
/**
* @return array
*/
public static function abWinnerCriteria() {
if (!is_array(self::$abWinnerCriteria)) {
self::$abWinnerCriteria = array(
'open' => ts('Open'),
'unique_click' => ts('Total Unique Clicks'),
'link_click' => ts('Total Clicks on a particular link'),
);
}
return self::$abWinnerCriteria;
}
/**
* @return array
*/
public static function mailingTypes() {
if (!is_array(self::$mailingTypes)) {
self::$mailingTypes = array(
'standalone' => ts('Standalone'),
'experiment' => ts('Experimental'),
'winner' => ts('Winner'),
);
}
return self::$mailingTypes;
}
/**
* Get all the mailing components of a particular type.
*
* @param $type
* The type of component needed.
*
* @return array
* array reference of all mailing components
*/
public static function &component($type = NULL) {
$name = $type ? $type : 'ALL';
if (!self::$component || !array_key_exists($name, self::$component)) {
if (!self::$component) {
self::$component = array();
}
if (!$type) {
self::$component[$name] = NULL;
CRM_Core_PseudoConstant::populate(self::$component[$name], 'CRM_Mailing_DAO_Component');
}
else {
// we need to add an additional filter for $type
self::$component[$name] = array();
$object = new CRM_Mailing_DAO_Component();
$object->component_type = $type;
$object->selectAdd();
$object->selectAdd("id, name");
$object->orderBy('component_type, is_default, name');
$object->is_active = 1;
$object->find();
while ($object->fetch()) {
self::$component[$name][$object->id] = $object->name;
}
}
}
return self::$component[$name];
}
/**
* Determine the default mailing component of a given type.
*
* @param $type
* The type of component needed.
* @param $undefined
* The value to use if no default is defined.
*
* @return int
* The ID of the default mailing component.
*/
public static function &defaultComponent($type, $undefined = NULL) {
if (!self::$defaultComponent) {
$queryDefaultComponents = "SELECT id, component_type
FROM civicrm_mailing_component
WHERE is_active = 1
AND is_default = 1
GROUP BY component_type, id";
$dao = CRM_Core_DAO::executeQuery($queryDefaultComponents);
self::$defaultComponent = array();
while ($dao->fetch()) {
self::$defaultComponent[$dao->component_type] = $dao->id;
}
}
$value = CRM_Utils_Array::value($type, self::$defaultComponent, $undefined);
return $value;
}
/**
* Get all the mailing templates.
*
*
* @return array
* array reference of all mailing templates if any
*/
public static function &template() {
if (!self::$template) {
CRM_Core_PseudoConstant::populate(self::$template, 'CRM_Mailing_DAO_Mailing', TRUE, 'name', 'is_template');
}
return self::$template;
}
/**
* Get all the completed mailing.
*
*
* @param null $mode
*
* @return array
* array reference of all mailing templates if any
*/
public static function &completed($mode = NULL) {
if (!self::$completed) {
$mailingACL = CRM_Mailing_BAO_Mailing::mailingACL();
$mailingACL .= $mode == 'sms' ? " AND sms_provider_id IS NOT NULL " : "";
CRM_Core_PseudoConstant::populate(self::$completed,
'CRM_Mailing_DAO_Mailing',
FALSE,
'name',
'is_completed',
$mailingACL
);
}
return self::$completed;
}
/**
* Labels for advanced search against mailing summary.
*
* @param $field
*
* @return unknown_type
*/
public static function &yesNoOptions($field) {
static $options;
if (!$options) {
$options = array(
'bounce' => array(
'N' => ts('Successful '),
'Y' => ts('Bounced '),
),
'delivered' => array(
'Y' => ts('Successful '),
'N' => ts('Bounced '),
),
'open' => array(
'Y' => ts('Opened '),
'N' => ts('Unopened/Hidden '),
),
'click' => array(
'Y' => ts('Clicked '),
'N' => ts('Not Clicked '),
),
'reply' => array(
'Y' => ts('Replied '),
'N' => ts('No Reply '),
),
);
}
return $options[$field];
}
/**
* Flush given pseudoconstant so it can be reread from db
* next time it's requested.
*
*
* @param bool|string $name pseudoconstant to be flushed
*/
public static function flush($name = 'template') {
if (isset(self::$$name)) {
self::$$name = NULL;
}
}
}