* @copyright (c) 2015, conlite.org * @license http://www.gnu.de/documents/gpl.en.html GPL v3 (english version) * @license http://www.gnu.de/documents/gpl.de.html GPL v3 (deutsche Version) * @link http://www.conlite.org ConLite.org * * $Id$ */ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } class cApiClientCollection extends ItemCollection { /** * Constructor */ public function __construct() { global $cfg; parent::__construct($cfg['tab']['clients'], 'idclient'); $this->_setItemClass("cApiClient"); $this->_setJoinPartner("cApiClientLanguageCollection"); } /** * Returns all clients available in the system * * @return array Array with id and name entries */ public function getAvailableClients() { $aClients = array(); $this->select(); while ($oItem = $this->next()) { $aClients[$oItem->get('idclient')] = array('name' => $oItem->get('name')); } return ($aClients); } /** * Returns all clients available in the system * * @return array Array with id and name entries */ public function getAccessibleClients() { global $perm; $aClients = array(); $this->select(); while ($oItem = $this->next()) { if ($perm->have_perm_client("client[" . $oItem->get('idclient') . "]") || $perm->have_perm_client("admin[" . $oItem->get('idclient') . "]") || $perm->have_perm_client()) { $aClients[$oItem->get('idclient')] = array('name' => $oItem->get('name')); } } return ($aClients); } /** * Returns the clientname of the given clientid * * @param int $iIdClient * @return string Clientname if found, or empty string if not. */ public function getClientname($iIdClient) { $this->select("idclient='" . (int) $iIdClient . "'"); if ($oItem = $this->next()) { return $oItem->get('name'); } else { return i18n("No client"); } } /** * Returns if the given client has a language * * @param int $iIdClient * @return bool true if the client has a language */ public function hasLanguageAssigned($iIdClient) { global $cfg; $db = new DB_ConLite(); $sql = 'SELECT idlang FROM ' . $cfg['tab']['clients_lang'] . ' WHERE idclient = "' . (int) $iIdClient . '"'; $db->query($sql); if ($db->next_record()) { return true; } else { return false; } } } /** * Class cApiClient * @author Marco Jahn * @version 1.01 * @copyright four for business 2004 */ class cApiClient extends Item { public $idclient; /** * Property collection instance * @var PropertyCollection */ protected $_oPropertyCollection; /** * Constructor Function * @param mixed $mId Specifies the ID of item to load */ public function __construct($mId = false) { global $cfg; parent::__construct($cfg['tab']['clients'], 'idclient'); if ($mId !== false) { $this->loadByPrimaryKey($mId); } } /** * Static accessor to the singleton instance. * * @todo There is no need since caching is available at GenericDB level * @param int $iClient * @return cApiClient Reference to the singleton instance. */ public static function getInstance($iClient = false) { static $oCurrentInstance = array(); if (!$iClient) { // Use global $client $iClient = $GLOBALS['client']; } if (!isset($oCurrentInstance[$iClient])) { $oCurrentInstance[$iClient] = new cApiClient($iClient); } return $oCurrentInstance[$iClient]; } /** * Load dataset by primary key * * @param int $iIdKey * @return bool */ public function loadByPrimaryKey($iIdKey) { if (parent::loadByPrimaryKey($iIdKey) == true) { $this->idclient = $iIdKey; return true; } return false; } /** * Set client property * * @param mixed $mType Type of the data to store (arbitary data) * @param mixed $mName Entry name * @param mixed $mValue Value * @param mixed $mIdproperty */ public function setProperty($mType, $mName, $mValue, $mIdproperty = 0) { $oPropertyColl = $this->_getPropertiesCollectionInstance(); $oPropertyColl->setValue('clientsetting', $this->idclient, $mType, $mName, $mValue, $mIdproperty); } /** * Get client property * * @param mixed $mType Type of the data to get * @param mixed $mName Entry name * @return mixed Value */ public function getProperty($mType, $mName) { $oPropertyColl = $this->_getPropertiesCollectionInstance(); return $oPropertyColl->getValue('clientsetting', $this->idclient, $mType, $mName); } /** * Delete client property * * @param int $iIdProp Id of property * @return void */ public function deletePropertyById($iIdProp) { $oPropertyColl = $this->_getPropertiesCollectionInstance(); $oPropertyColl->delete($iIdProp); } /** * Get client properties by type * * @param mixed $mType Type of the data to get * @return array Assoziative array */ public function getPropertiesByType($mType) { $oPropertyColl = $this->_getPropertiesCollectionInstance(); return $oPropertyColl->getValuesByType('clientsetting', $this->idclient, $mType); } /** * Get all client properties * * @param mixed $mType Type of the data to get * @return array|false Assoziative array * @todo return value should be the same as getPropertiesByType(), e. g. an empty array instead false */ public function getProperties() { $oPropertyColl = $this->_getPropertiesCollectionInstance(); $oPropertyColl->select("itemid='" . $this->idclient . "' AND itemtype='clientsetting'", "", "type, name, value ASC"); if ($oPropertyColl->count() > 0) { $aArray = array(); while ($oItem = $oPropertyColl->next()) { $aArray[$oItem->get('idproperty')]['type'] = $oItem->get('type'); $aArray[$oItem->get('idproperty')]['name'] = $oItem->get('name'); $aArray[$oItem->get('idproperty')]['value'] = $oItem->get('value'); } return $aArray; } else { return false; } } /** * Check if client has at least one language * * @return bool */ public function hasLanguages() { $cApiClientLanguageCollection = new cApiClientLanguageCollection(); $cApiClientLanguageCollection->setWhere("idclient", $this->get("idclient")); $cApiClientLanguageCollection->query(); if ($cApiClientLanguageCollection->next()) { return true; } else { return false; } } /** * Lazy instantiation and return of properties object * * @return PropertyCollection */ protected function _getPropertiesCollectionInstance() { // Runtime on-demand allocation of the properties object if (!is_object($this->_oPropertyCollection)) { $this->_oPropertyCollection = new PropertyCollection(); $this->_oPropertyCollection->changeClient($this->idclient); } return $this->_oPropertyCollection; } } ?>