Merge pull request #13078 from agh1/contactdetail-no-or2
[civicrm-core.git] / CRM / SMS / BAO / Provider.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17 class CRM_SMS_BAO_Provider extends CRM_SMS_DAO_Provider {
18
19 /**
20 * Class constructor.
21 */
22 public function __construct() {
23 parent::__construct();
24 }
25
26 /**
27 * @return null|string
28 */
29 public static function activeProviderCount() {
30 $activeProviders = CRM_Core_DAO::singleValueQuery('SELECT count(id) FROM civicrm_sms_provider WHERE is_active = 1 AND (domain_id = %1 OR domain_id IS NULL)',
31 [1 => [CRM_Core_Config::domainID(), 'Positive']]);
32 return $activeProviders;
33 }
34
35 /**
36 * Retrieves the list of providers from the database.
37 *
38 * $selectArr array of coloumns to fetch
39 * $getActive boolean to get active providers
40 *
41 * @param null $selectArr
42 * @param null $filter
43 * @param bool $getActive
44 * @param string $orderBy
45 *
46 * @return array
47 */
48 public static function getProviders($selectArr = NULL, $filter = NULL, $getActive = TRUE, $orderBy = 'id') {
49
50 $providers = [];
51 $temp = [];
52 $dao = new CRM_SMS_DAO_Provider();
53 if ($filter && !array_key_exists('is_active', $filter) && $getActive) {
54 $dao->is_active = 1;
55 }
56 if ($filter && is_array($filter)) {
57 foreach ($filter as $key => $value) {
58 $dao->$key = $value;
59 }
60 }
61 if ($selectArr && is_array($selectArr)) {
62 $select = implode(',', $selectArr);
63 $dao->selectAdd($select);
64 }
65 $dao->whereAdd("(domain_id = " . CRM_Core_Config::domainID() . " OR domain_id IS NULL)");
66 $dao->orderBy($orderBy);
67 $dao->find();
68 while ($dao->fetch()) {
69 CRM_Core_DAO::storeValues($dao, $temp);
70 $providers[$dao->id] = $temp;
71 }
72 return $providers;
73 }
74
75 /**
76 * Create or Update an SMS provider
77 * @param array $params
78 * @return array saved values
79 */
80 public static function create(&$params) {
81 $id = CRM_Utils_Array::value('id', $params);
82
83 if ($id) {
84 CRM_Utils_Hook::pre('edit', 'SmsProvider', $id, $params);
85 }
86 else {
87 CRM_Utils_Hook::pre('create', 'SmsProvider', NULL, $params);
88 }
89
90 $provider = new CRM_SMS_DAO_Provider();
91 if ($id) {
92 $provider->id = $id;
93 $provider->find(TRUE);
94 }
95 if ($id) {
96 $provider->domain_id = CRM_Utils_Array::value('domain_id', $params, $provider->domain_id);
97 }
98 else {
99 $provider->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID());
100 }
101 $provider->copyValues($params);
102 $result = $provider->save();
103 if ($id) {
104 CRM_Utils_Hook::post('edit', 'SmsProvider', $provider->id, $provider);
105 }
106 else {
107 CRM_Utils_Hook::post('create', 'SmsProvider', NULL, $provider);
108 }
109 return $result;
110 }
111
112 /**
113 * @param int $id
114 * @param $is_active
115 *
116 * @return bool
117 */
118 public static function setIsActive($id, $is_active) {
119 return CRM_Core_DAO::setFieldValue('CRM_SMS_DAO_Provider', $id, 'is_active', $is_active);
120 }
121
122 /**
123 * @param int $providerID
124 *
125 * @return null
126 * @throws CRM_Core_Exception
127 */
128 public static function del($providerID) {
129 if (!$providerID) {
130 throw new CRM_Core_Exception(ts('Invalid value passed to delete function.'));
131 }
132
133 $dao = new CRM_SMS_DAO_Provider();
134 $dao->id = $providerID;
135 $dao->whereAdd = "(domain_id = " . CRM_Core_Config::domainID() . "OR domain_id IS NULL)";
136 if (!$dao->find(TRUE)) {
137 return NULL;
138 }
139 $dao->delete();
140 }
141
142 /**
143 * @param int $providerID
144 * @param null $returnParam
145 * @param null $returnDefaultString
146 *
147 * @return mixed
148 */
149 public static function getProviderInfo($providerID, $returnParam = NULL, $returnDefaultString = NULL) {
150 static $providerInfo = [];
151
152 if (!array_key_exists($providerID, $providerInfo)) {
153 $providerInfo[$providerID] = [];
154
155 $dao = new CRM_SMS_DAO_Provider();
156 $dao->id = $providerID;
157 if ($dao->find(TRUE)) {
158 CRM_Core_DAO::storeValues($dao, $providerInfo[$providerID]);
159 $inputLines = explode("\n", $providerInfo[$providerID]['api_params']);
160 $inputVals = [];
161 foreach ($inputLines as $value) {
162 if ($value) {
163 list($key, $val) = explode("=", $value);
164 $inputVals[trim($key)] = trim($val);
165 }
166 }
167 $providerInfo[$providerID]['api_params'] = $inputVals;
168
169 // Replace the api_type ID with the string value
170 $apiTypes = CRM_Core_OptionGroup::values('sms_api_type');
171 $apiTypeId = $providerInfo[$providerID]['api_type'];
172 $providerInfo[$providerID]['api_type'] = CRM_Utils_Array::value($apiTypeId, $apiTypes, $apiTypeId);
173 }
174 }
175
176 if ($returnParam) {
177 return CRM_Utils_Array::value($returnParam, $providerInfo[$providerID], $returnDefaultString);
178 }
179 return $providerInfo[$providerID];
180 }
181
182 }