124 lines
2.8 KiB
PHP
124 lines
2.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Class CRM_Cxn_CiviCxnStore
|
|
*/
|
|
class CRM_Cxn_CiviCxnStore implements Civi\Cxn\Rpc\CxnStore\CxnStoreInterface {
|
|
|
|
protected $cxns = array();
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function getAll() {
|
|
if (!$this->cxns) {
|
|
$this->cxns = array();
|
|
$dao = new CRM_Cxn_DAO_Cxn();
|
|
$dao->find();
|
|
while ($dao->fetch()) {
|
|
$cxn = $this->convertDaoToCxn($dao);
|
|
$this->cxns[$cxn['cxnId']] = $cxn;
|
|
}
|
|
}
|
|
return $this->cxns;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function getByCxnId($cxnId) {
|
|
if (isset($this->cxns[$cxnId])) {
|
|
return $this->cxns[$cxnId];
|
|
}
|
|
$dao = new CRM_Cxn_DAO_Cxn();
|
|
$dao->cxn_guid = $cxnId;
|
|
if ($dao->find(TRUE)) {
|
|
$this->cxns[$cxnId] = $this->convertDaoToCxn($dao);
|
|
return $this->cxns[$cxnId];
|
|
}
|
|
else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function getByAppId($appId) {
|
|
$dao = new CRM_Cxn_DAO_Cxn();
|
|
$dao->app_guid = $appId;
|
|
if ($dao->find(TRUE)) {
|
|
$this->cxns[$dao->cxn_guid] = $this->convertDaoToCxn($dao);
|
|
return $this->cxns[$dao->cxn_guid];
|
|
}
|
|
else {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function add($cxn) {
|
|
$dao = new CRM_Cxn_DAO_Cxn();
|
|
$dao->cxn_guid = $cxn['cxnId'];
|
|
$dao->find(TRUE);
|
|
$this->convertCxnToDao($cxn, $dao);
|
|
$dao->save();
|
|
|
|
$sql = '
|
|
UPDATE civicrm_cxn SET created_date = modified_date
|
|
WHERE created_date IS NULL
|
|
AND cxn_guid = %1
|
|
';
|
|
CRM_Core_DAO::executeQuery($sql, array(
|
|
1 => array($cxn['cxnId'], 'String'),
|
|
));
|
|
|
|
$this->cxns[$cxn['cxnId']] = $cxn;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function remove($cxnId) {
|
|
CRM_Core_DAO::executeQuery('DELETE FROM civicrm_cxn WHERE cxn_guid = %1', array(
|
|
1 => array($cxnId, 'String'),
|
|
));
|
|
unset($this->cxns[$cxnId]);
|
|
}
|
|
|
|
/**
|
|
* @param CRM_Cxn_DAO_Cxn $dao
|
|
* @return array
|
|
* Array-encoded connection details.
|
|
*/
|
|
protected function convertDaoToCxn($dao) {
|
|
$appMeta = json_decode($dao->app_meta, TRUE);
|
|
return array(
|
|
'cxnId' => $dao->cxn_guid,
|
|
'secret' => $dao->secret,
|
|
'appId' => $dao->app_guid,
|
|
'appUrl' => $appMeta['appUrl'],
|
|
'siteUrl' => CRM_Cxn_BAO_Cxn::getSiteCallbackUrl(),
|
|
'perm' => json_decode($dao->perm, TRUE),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param array $cxn
|
|
* Array-encoded connection details.
|
|
* @param CRM_Cxn_DAO_Cxn $dao
|
|
*/
|
|
protected function convertCxnToDao($cxn, $dao) {
|
|
$dao->cxn_guid = $cxn['cxnId'];
|
|
$dao->secret = $cxn['secret'];
|
|
$dao->app_guid = $cxn['appId'];
|
|
$dao->perm = json_encode($cxn['perm']);
|
|
|
|
// Note: we don't save siteUrl because it's more correct to regenerate on-demand.
|
|
// Note: we don't save appUrl, but other processes will update appMeta.
|
|
}
|
|
|
|
}
|