diff options
Diffstat (limited to 'framework/Web/Services/TPageService.php')
-rw-r--r-- | framework/Web/Services/TPageService.php | 355 |
1 files changed, 1 insertions, 354 deletions
diff --git a/framework/Web/Services/TPageService.php b/framework/Web/Services/TPageService.php index f0dd8c1a..ac64afcf 100644 --- a/framework/Web/Services/TPageService.php +++ b/framework/Web/Services/TPageService.php @@ -534,357 +534,4 @@ class TPageService extends TService { return $this->getRequest()->constructUrl($this->getID(),$pagePath,$getParams,$encodeAmpersand,$encodeGetItems); } -} - - -/** - * TPageConfiguration class - * - * TPageConfiguration represents the configuration for a page. - * The page is specified by a dot-connected path. - * Configurations along this path are merged together to be provided for the page. - * - * @author Qiang Xue <qiang.xue@gmail.com> - * @package System.Web.Services - * @since 3.0 - */ -class TPageConfiguration extends TComponent -{ - /** - * @var array list of application configurations - */ - private $_appConfigs=array(); - /** - * @var array list of page initial property values - */ - private $_properties=array(); - /** - * @var TAuthorizationRuleCollection list of authorization rules - */ - private $_rules=array(); - /** - * @var array list of included configurations - */ - private $_includes=array(); - /** - * @var string the currently request page in the format of Path.To.PageName - */ - private $_pagePath=''; - - /** - * Constructor. - * @param string the currently request page in the format of Path.To.PageName - */ - public function __construct($pagePath) - { - $this->_pagePath=$pagePath; - } - - /** - * @return array list of external configuration files. Each element is like $filePath=>$condition - */ - public function getExternalConfigurations() - { - return $this->_includes; - } - - /** - * Returns list of page initial property values. - * Each array element represents a single property with the key - * being the property name and the value the initial property value. - * @return array list of page initial property values - */ - public function getProperties() - { - return $this->_properties; - } - - /** - * Returns list of authorization rules. - * The authorization rules are aggregated (bottom-up) from configuration files - * along the path to the specified page. - * @return TAuthorizationRuleCollection collection of authorization rules - */ - public function getRules() - { - return $this->_rules; - } - - /** - * @return array list of application configurations specified along page path - */ - public function getApplicationConfigurations() - { - return $this->_appConfigs; - } - - /** - * Loads configuration for a page specified in a path format. - * @param string root path for pages - */ - public function loadFromFiles($basePath) - { - $paths=explode('.',$this->_pagePath); - $page=array_pop($paths); - $path=$basePath; - $configPagePath=''; - $fileName = Prado::getApplication()->getConfigurationType()==TApplication::CONFIG_TYPE_PHP - ? TPageService::CONFIG_FILE_PHP - : TPageService::CONFIG_FILE_XML; - foreach($paths as $p) - { - $this->loadFromFile($path.DIRECTORY_SEPARATOR.$fileName,$configPagePath); - $path.=DIRECTORY_SEPARATOR.$p; - if($configPagePath==='') - $configPagePath=$p; - else - $configPagePath.='.'.$p; - } - $this->loadFromFile($path.DIRECTORY_SEPARATOR.$fileName,$configPagePath); - $this->_rules=new TAuthorizationRuleCollection($this->_rules); - } - - /** - * Loads a specific config file. - * @param string config file name - * @param string the page path that the config file is associated with. The page path doesn't include the page name. - */ - public function loadFromFile($fname,$configPagePath) - { - Prado::trace("Loading page configuration file $fname",'System.Web.Services.TPageService'); - if(empty($fname) || !is_file($fname)) - return; - - if(Prado::getApplication()->getConfigurationType()==TApplication::CONFIG_TYPE_PHP) - { - $fcontent = include $fname; - $this->loadFromPhp($fcontent,dirname($fname),$configPagePath); - } - else - { - $dom=new TXmlDocument; - if($dom->loadFromFile($fname)) - $this->loadFromXml($dom,dirname($fname),$configPagePath); - else - throw new TConfigurationException('pageserviceconf_file_invalid',$fname); - } - } - - public function loadFromPhp($config,$configPath,$configPagePath) - { - $this->loadApplicationConfigurationFromPhp($config,$configPath); - $this->loadPageConfigurationFromPhp($config,$configPath,$configPagePath); - } - - /** - * Loads a page configuration. - * The configuration includes information for both application - * and page service. - * @param TXmlElement config xml element - * @param string the directory containing this configuration - * @param string the page path that the config XML is associated with. The page path doesn't include the page name. - */ - public function loadFromXml($dom,$configPath,$configPagePath) - { - $this->loadApplicationConfigurationFromXml($dom,$configPath); - $this->loadPageConfigurationFromXml($dom,$configPath,$configPagePath); - } - - public function loadApplicationConfigurationFromPhp($config,$configPath) - { - $appConfig=new TApplicationConfiguration; - $appConfig->loadFromPhp($config,$configPath); - $this->_appConfigs[]=$appConfig; - } - - /** - * Loads the configuration specific for application part - * @param TXmlElement config xml element - * @param string base path corresponding to this xml element - */ - public function loadApplicationConfigurationFromXml($dom,$configPath) - { - $appConfig=new TApplicationConfiguration; - $appConfig->loadFromXml($dom,$configPath); - $this->_appConfigs[]=$appConfig; - } - - public function loadPageConfigurationFromPhp($config, $configPath, $configPagePath) - { - // authorization - if(isset($config['authorization']) && is_array($config['authorization'])) - { - $rules = array(); - foreach($config['authorization'] as $authorization) - { - $patterns=isset($authorization['pages'])?$authorization['pages']:''; - $ruleApplies=false; - if(empty($patterns) || trim($patterns)==='*') // null or empty string - $ruleApplies=true; - else - { - foreach(explode(',',$patterns) as $pattern) - { - if(($pattern=trim($pattern))!=='') - { - // we know $configPagePath and $this->_pagePath - if($configPagePath!=='') // prepend the pattern with ConfigPagePath - $pattern=$configPagePath.'.'.$pattern; - if(strcasecmp($pattern,$this->_pagePath)===0) - { - $ruleApplies=true; - break; - } - if($pattern[strlen($pattern)-1]==='*') // try wildcard matching - { - if(strncasecmp($this->_pagePath,$pattern,strlen($pattern)-1)===0) - { - $ruleApplies=true; - break; - } - } - } - } - } - if($ruleApplies) - { - $action = isset($authorization['action'])?$authorization['action']:''; - $users = isset($authorization['users'])?$authorization['users']:''; - $roles = isset($authorization['roles'])?$authorization['roles']:''; - $verb = isset($authorization['verb'])?$authorization['verb']:''; - $ips = isset($authorization['ips'])?$authorization['ips']:''; - $rules[]=new TAuthorizationRule($action,$users,$roles,$verb,$ips); - } - } - $this->_rules=array_merge($rules,$this->_rules); - } - // pages - if(isset($config['pages']) && is_array($config['pages'])) - { - if(isset($config['pages']['properties'])) - { - $this->_properties = array_merge($this->_properties, $config['pages']['properties']); - unset($config['pages']['properties']); - } - foreach($config['pages'] as $id => $page) - { - $properties = array(); - if(isset($page['properties'])) - { - $properties=$page['properties']; - unset($page['properties']); - } - $matching=false; - $id=($configPagePath==='')?$id:$configPagePath.'.'.$id; - if(strcasecmp($id,$this->_pagePath)===0) - $matching=true; - else if($id[strlen($id)-1]==='*') // try wildcard matching - $matching=strncasecmp($this->_pagePath,$id,strlen($id)-1)===0; - if($matching) - $this->_properties=array_merge($this->_properties,$properties); - } - } - - // external configurations - if(isset($config['includes']) && is_array($config['includes'])) - { - foreach($config['includes'] as $include) - { - $when = isset($include['when'])?true:false; - if(!isset($include['file'])) - throw new TConfigurationException('pageserviceconf_includefile_required'); - $filePath = $include['file']; - if(isset($this->_includes[$filePath])) - $this->_includes[$filePath]=array($configPagePath,'('.$this->_includes[$filePath][1].') || ('.$when.')'); - else - $this->_includes[$filePath]=array($configPagePath,$when); - } - } - } - - /** - * Loads the configuration specific for page service. - * @param TXmlElement config xml element - * @param string base path corresponding to this xml element - * @param string the page path that the config XML is associated with. The page path doesn't include the page name. - */ - public function loadPageConfigurationFromXml($dom,$configPath,$configPagePath) - { - // authorization - if(($authorizationNode=$dom->getElementByTagName('authorization'))!==null) - { - $rules=array(); - foreach($authorizationNode->getElements() as $node) - { - $patterns=$node->getAttribute('pages'); - $ruleApplies=false; - if(empty($patterns) || trim($patterns)==='*') // null or empty string - $ruleApplies=true; - else - { - foreach(explode(',',$patterns) as $pattern) - { - if(($pattern=trim($pattern))!=='') - { - // we know $configPagePath and $this->_pagePath - if($configPagePath!=='') // prepend the pattern with ConfigPagePath - $pattern=$configPagePath.'.'.$pattern; - if(strcasecmp($pattern,$this->_pagePath)===0) - { - $ruleApplies=true; - break; - } - if($pattern[strlen($pattern)-1]==='*') // try wildcard matching - { - if(strncasecmp($this->_pagePath,$pattern,strlen($pattern)-1)===0) - { - $ruleApplies=true; - break; - } - } - } - } - } - if($ruleApplies) - $rules[]=new TAuthorizationRule($node->getTagName(),$node->getAttribute('users'),$node->getAttribute('roles'),$node->getAttribute('verb'),$node->getAttribute('ips')); - } - $this->_rules=array_merge($rules,$this->_rules); - } - - // pages - if(($pagesNode=$dom->getElementByTagName('pages'))!==null) - { - $this->_properties=array_merge($this->_properties,$pagesNode->getAttributes()->toArray()); - // at the page folder - foreach($pagesNode->getElementsByTagName('page') as $node) - { - $properties=$node->getAttributes(); - $id=$properties->remove('id'); - if(empty($id)) - throw new TConfigurationException('pageserviceconf_page_invalid',$configPath); - $matching=false; - $id=($configPagePath==='')?$id:$configPagePath.'.'.$id; - if(strcasecmp($id,$this->_pagePath)===0) - $matching=true; - else if($id[strlen($id)-1]==='*') // try wildcard matching - $matching=strncasecmp($this->_pagePath,$id,strlen($id)-1)===0; - if($matching) - $this->_properties=array_merge($this->_properties,$properties->toArray()); - } - } - - // external configurations - foreach($dom->getElementsByTagName('include') as $node) - { - if(($when=$node->getAttribute('when'))===null) - $when=true; - if(($filePath=$node->getAttribute('file'))===null) - throw new TConfigurationException('pageserviceconf_includefile_required'); - if(isset($this->_includes[$filePath])) - $this->_includes[$filePath]=array($configPagePath,'('.$this->_includes[$filePath][1].') || ('.$when.')'); - else - $this->_includes[$filePath]=array($configPagePath,$when); - } - } -} - +}
\ No newline at end of file |