Merge pull request #15884 from kainuk/issue-lab-1365
[civicrm-core.git] / CRM / SMS / BAO / Provider.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
bc77d7c0 4 | Copyright CiviCRM LLC. All rights reserved. |
6a488035 5 | |
bc77d7c0
TO
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 |
6a488035 9 +--------------------------------------------------------------------+
d25dd0ee 10 */
6a488035
TO
11
12/**
13 *
14 * @package CRM
ca5cec67 15 * @copyright CiviCRM LLC https://civicrm.org/licensing
6a488035
TO
16 */
17class CRM_SMS_BAO_Provider extends CRM_SMS_DAO_Provider {
18
fd0e0077 19 /**
fe482240 20 * Class constructor.
fd0e0077 21 */
00be9182 22 public function __construct() {
6a488035
TO
23 parent::__construct();
24 }
25
fd0e0077
EM
26 /**
27 * @return null|string
28 */
00be9182 29 public static function activeProviderCount() {
39fab6d7 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)',
be2fb01f 31 [1 => [CRM_Core_Config::domainID(), 'Positive']]);
6a488035
TO
32 return $activeProviders;
33 }
34
d424ffde 35 /**
fe482240 36 * Retrieves the list of providers from the database.
f813f78e 37 *
6a488035
TO
38 * $selectArr array of coloumns to fetch
39 * $getActive boolean to get active providers
d424ffde 40 *
fd0e0077
EM
41 * @param null $selectArr
42 * @param null $filter
43 * @param bool $getActive
44 * @param string $orderBy
45 *
46 * @return array
47 */
00be9182 48 public static function getProviders($selectArr = NULL, $filter = NULL, $getActive = TRUE, $orderBy = 'id') {
6a488035 49
be2fb01f
CW
50 $providers = [];
51 $temp = [];
353ffa53 52 $dao = new CRM_SMS_DAO_Provider();
6a488035
TO
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 }
eca6c81c 65 $dao->whereAdd("(domain_id = " . CRM_Core_Config::domainID() . " OR domain_id IS NULL)");
6a488035
TO
66 $dao->orderBy($orderBy);
67 $dao->find();
68 while ($dao->fetch()) {
69 CRM_Core_DAO::storeValues($dao, $temp);
6eee0915 70 $providers[$dao->id] = $temp;
6a488035
TO
71 }
72 return $providers;
73 }
74
fd0e0077 75 /**
fddb9113
SL
76 * Create or Update an SMS provider
77 * @param array $params
fddb9113 78 * @return array saved values
fd0e0077 79 */
59248c40
SL
80 public static function create(&$params) {
81 $id = CRM_Utils_Array::value('id', $params);
6a488035 82
fddb9113
SL
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
6f192908 90 $provider = new CRM_SMS_DAO_Provider();
fddb9113
SL
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);
6a488035 108 }
fddb9113 109 return $result;
6a488035
TO
110 }
111
fd0e0077 112 /**
100fef9d 113 * @param int $id
fd0e0077
EM
114 * @param $is_active
115 *
116 * @return bool
117 */
00be9182 118 public static function setIsActive($id, $is_active) {
6a488035
TO
119 return CRM_Core_DAO::setFieldValue('CRM_SMS_DAO_Provider', $id, 'is_active', $is_active);
120 }
121
fd0e0077 122 /**
100fef9d 123 * @param int $providerID
fd0e0077
EM
124 *
125 * @return null
4a0e3fe7 126 * @throws CRM_Core_Exception
fd0e0077 127 */
00be9182 128 public static function del($providerID) {
6a488035 129 if (!$providerID) {
4a0e3fe7 130 throw new CRM_Core_Exception(ts('Invalid value passed to delete function.'));
6a488035
TO
131 }
132
133 $dao = new CRM_SMS_DAO_Provider();
134 $dao->id = $providerID;
3655bea4 135 $dao->whereAdd = "(domain_id = " . CRM_Core_Config::domainID() . "OR domain_id IS NULL)";
6a488035
TO
136 if (!$dao->find(TRUE)) {
137 return NULL;
138 }
139 $dao->delete();
140 }
141
fd0e0077 142 /**
100fef9d 143 * @param int $providerID
fd0e0077
EM
144 * @param null $returnParam
145 * @param null $returnDefaultString
146 *
147 * @return mixed
148 */
6a488035 149 public static function getProviderInfo($providerID, $returnParam = NULL, $returnDefaultString = NULL) {
be2fb01f 150 static $providerInfo = [];
6a488035
TO
151
152 if (!array_key_exists($providerID, $providerInfo)) {
be2fb01f 153 $providerInfo[$providerID] = [];
6a488035
TO
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']);
be2fb01f 160 $inputVals = [];
6a488035
TO
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;
503fc58c 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);
6a488035
TO
173 }
174 }
175
176 if ($returnParam) {
177 return CRM_Utils_Array::value($returnParam, $providerInfo[$providerID], $returnDefaultString);
178 }
179 return $providerInfo[$providerID];
180 }
96025800 181
6a488035 182}