Merge pull request #14981 from eileenmcnaughton/load_extract
[civicrm-core.git] / api / v3 / Campaign.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 5 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2019 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28 /**
29 * This api exposes CiviCRM Campaign records.
30 *
31 * @note Campaign component must be enabled.
32 *
33 * @package CiviCRM_APIv3
34 */
35
36 /**
37 * Create/update Campaign.
38 *
39 * This API is used to create new campaign or update any of the existing
40 * In case of updating existing campaign, id of that particular campaign must
41 * be in $params array.
42 *
43 * @param array $params
44 *
45 * @return array
46 */
47 function civicrm_api3_campaign_create($params) {
48 return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Campaign');
49 }
50
51 /**
52 * Adjust Metadata for Create action.
53 *
54 * The metadata is used for setting defaults, documentation & validation.
55 *
56 * @param array $params
57 * Array of parameters determined by getfields.
58 */
59 function _civicrm_api3_campaign_create_spec(&$params) {
60 $params['title']['api.required'] = 1;
61 $params['is_active']['api.default'] = 1;
62 }
63
64 /**
65 * Returns array of campaigns matching a set of one or more properties.
66 *
67 * @param array $params
68 * Array per getfields
69 *
70 * @return array
71 * Array of matching campaigns
72 */
73 function civicrm_api3_campaign_get($params) {
74 return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'Campaign');
75 }
76
77 /**
78 * Delete an existing campaign.
79 *
80 * This method is used to delete any existing campaign.
81 * Id of the campaign to be deleted is required field in $params array
82 *
83 * @param array $params
84 * array containing id of the group to be deleted
85 *
86 * @return array
87 */
88 function civicrm_api3_campaign_delete($params) {
89 return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
90 }
91
92 /**
93 * Get campaign list parameters.
94 *
95 * @see _civicrm_api3_generic_getlist_params
96 *
97 * @param array $request
98 */
99 function _civicrm_api3_campaign_getlist_params(&$request) {
100 $fieldsToReturn = ['title', 'campaign_type_id', 'status_id', 'start_date', 'end_date'];
101 $request['params']['return'] = array_unique(array_merge($fieldsToReturn, $request['extra']));
102 if (empty($request['params']['id'])) {
103 $request['params']['options']['sort'] = 'start_date DESC, title';
104 $request['params'] += [
105 'is_active' => 1,
106 ];
107 }
108 }
109
110 /**
111 * Get campaign list output.
112 *
113 * @see _civicrm_api3_generic_getlist_output
114 *
115 * @param array $result
116 * @param array $request
117 *
118 * @return array
119 */
120 function _civicrm_api3_campaign_getlist_output($result, $request) {
121 $output = [];
122 if (!empty($result['values'])) {
123 $config = CRM_Core_Config::singleton();
124 foreach ($result['values'] as $row) {
125 $data = [
126 'id' => $row[$request['id_field']],
127 'label' => $row[$request['label_field']],
128 'description' => [
129 CRM_Core_PseudoConstant::getLabel('CRM_Campaign_BAO_Campaign', 'campaign_type_id', $row['campaign_type_id']),
130 ],
131 ];
132 if (!empty($row['status_id'])) {
133 $data['description'][0] .= ': ' . CRM_Core_PseudoConstant::getLabel('CRM_Campaign_BAO_Campaign', 'status_id', $row['status_id']);
134 }
135 $dateString = CRM_Utils_Date::customFormat($row['start_date'], $config->dateformatFull) . ' -';
136 if (!empty($row['end_date'])) {
137 // Remove redundant years
138 if (substr($row['start_date'], 0, 4) == substr($row['end_date'], 0, 4)) {
139 $dateString = preg_replace('/[, ]*' . substr($row['start_date'], 0, 4) . '/', '', $dateString);
140 }
141 $dateString .= ' ' . CRM_Utils_Date::customFormat($row['end_date'], $config->dateformatFull);
142 }
143 $data['description'][] = $dateString;
144 $output[] = $data;
145 }
146 }
147 return $output;
148 }