00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class Mage_Api_Model_Config extends Varien_Simplexml_Config
00035 {
00036 const CACHE_TAG = 'config_api';
00037
00038
00039
00040
00041
00042
00043 public function __construct($sourceData=null)
00044 {
00045 $this->setCacheId('config_api');
00046 $this->setCacheTags(array(self::CACHE_TAG));
00047
00048 parent::__construct($sourceData);
00049 $this->_construct();
00050 }
00051
00052
00053
00054
00055
00056
00057 protected function _construct()
00058 {
00059 if (Mage::app()->useCache('config_api')) {
00060 if ($this->loadCache()) {
00061 return $this;
00062 }
00063 }
00064
00065 $config = Mage::getConfig()->loadModulesConfiguration('api.xml');
00066 $this->setXml($config->getNode('api'));
00067
00068 if (Mage::app()->useCache('config_api')) {
00069 $this->saveCache();
00070 }
00071 return $this;
00072 }
00073
00074
00075
00076
00077
00078
00079 public function getAdapters()
00080 {
00081 $adapters = array();
00082 foreach ($this->getNode('adapters')->children() as $adapterName => $adapter) {
00083
00084 if (isset($adapter->use)) {
00085 $adapter = $this->getNode('adapters/' . (string) $adapter->use);
00086 }
00087 $adapters[$adapterName] = $adapter;
00088 }
00089 return $adapters;
00090 }
00091
00092
00093
00094
00095
00096
00097 public function getActiveAdapters()
00098 {
00099 $adapters = array();
00100 foreach ($this->getAdapters() as $adapterName => $adapter) {
00101 if (!isset($adapter->active) || $adapter->active == '0') {
00102 continue;
00103 }
00104
00105 if (isset($adapter->required) && isset($adapter->required->extensions)) {
00106 foreach ($adapter->required->extensions->children() as $extension=>$data) {
00107 if (!extension_loaded($extension)) {
00108 continue;
00109 }
00110 }
00111 }
00112
00113 $adapters[$adapterName] = $adapter;
00114 }
00115
00116 return $adapters;
00117 }
00118
00119
00120
00121
00122
00123
00124 public function getHandlers()
00125 {
00126 return $this->getNode('handlers')->children();
00127 }
00128
00129
00130
00131
00132
00133
00134 public function getResources()
00135 {
00136 return $this->getNode('resources')->children();
00137 }
00138
00139
00140
00141
00142
00143
00144 public function getResourcesAlias()
00145 {
00146 return $this->getNode('resources_alias')->children();
00147 }
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 public function loadAclResources(Mage_Api_Model_Acl $acl, $resource=null, $parentName=null)
00159 {
00160 $resourceName = null;
00161 if (is_null($resource)) {
00162 $resource = $this->getNode('acl/resources');
00163 } else {
00164 $resourceName = (is_null($parentName) ? '' : $parentName.'/').$resource->getName();
00165 $acl->add(Mage::getModel('api/acl_resource', $resourceName), $parentName);
00166 }
00167
00168 $children = $resource->children();
00169
00170 if (empty($children)) {
00171 return $this;
00172 }
00173
00174 foreach ($children as $res) {
00175 if ($res->getName() != 'title' && $res->getName() != 'sort_order') {
00176 $this->loadAclResources($acl, $res, $resourceName);
00177 }
00178 }
00179 return $this;
00180 }
00181
00182
00183
00184
00185
00186
00187
00188 public function getAclAssert($name='')
00189 {
00190 $asserts = $this->getNode('acl/asserts');
00191 if (''===$name) {
00192 return $asserts;
00193 }
00194
00195 if (isset($asserts->$name)) {
00196 return $asserts->$name;
00197 }
00198
00199 return false;
00200 }
00201
00202
00203
00204
00205
00206
00207
00208 public function getAclPrivilegeSet($name='')
00209 {
00210 $sets = $this->getNode('acl/privilegeSets');
00211 if (''===$name) {
00212 return $sets;
00213 }
00214
00215 if (isset($sets->$name)) {
00216 return $sets->$name;
00217 }
00218
00219 return false;
00220 }
00221
00222 public function getFaults($resourceName=null)
00223 {
00224 if (is_null($resourceName)
00225 || !isset($this->getResources()->$resourceName)
00226 || !isset($this->getResources()->$resourceName->faults)) {
00227 $faultsNode = $this->getNode('faults');
00228 } else {
00229 $faultsNode = $this->getResources()->$resourceName->faults;
00230 }
00231
00232
00233 $translateModule = 'api';
00234 if (isset($faultsNode['module'])) {
00235 $translateModule = (string) $faultsNode['module'];
00236 }
00237
00238 $faults = array();
00239 foreach ($faultsNode->children() as $faultName => $fault) {
00240 $faults[$faultName] = array(
00241 'code' => (string) $fault->code,
00242 'message' => Mage::helper($translateModule)->__((string)$fault->message)
00243 );
00244 }
00245
00246 return $faults;
00247 }
00248
00249
00250
00251
00252
00253
00254 public function getCache()
00255 {
00256 return Mage::app()->getCache();
00257 }
00258
00259 protected function _loadCache($id)
00260 {
00261 return Mage::app()->loadCache($id);
00262 }
00263
00264 protected function _saveCache($data, $id, $tags=array(), $lifetime=false)
00265 {
00266 return Mage::app()->saveCache($data, $id, $tags, $lifetime);
00267 }
00268
00269 protected function _removeCache($id)
00270 {
00271 return Mage::app()->removeCache($id);
00272 }
00273 }