Пример #1
0
 /**
  * Returns repository class for model class of current node
  *
  * @param \Includes\Decorator\DataStructure\Graph\Classes $node Current node
  *
  * @return string
  */
 protected function getRepositoryClass(\Includes\Decorator\DataStructure\Graph\Classes $node)
 {
     $repositoryClass = null;
     if (!($node->isLowLevelNode() || $node->isTopLevelNode() || !$node->isDecorator())) {
         $children = $node->getChildren();
         $repositoryClass = isset($children[0]) ? $this->getRepositoryClass($children[0]) : $this->getDefaultRepositoryClass('');
     } else {
         $repositoryClass = \Includes\Utils\Converter::getPureClassName($node->getClass());
         $repositoryClass = \Includes\Utils\Converter::prepareClassName(str_replace('\\Model\\', '\\Model\\Repo\\', $repositoryClass), false);
         if (!\XLite\Core\Operator::isClassExists($repositoryClass)) {
             $repositoryClass = $this->getDefaultRepositoryClass($repositoryClass);
         }
     }
     return $repositoryClass;
 }
Пример #2
0
 /**
  * Get decorators and regular children; order the first group
  *
  * @param \Includes\Decorator\DataStructure\Graph\Classes $node Current node
  *
  * @return array
  */
 protected static function divideChildrenIntoGroups(\Includes\Decorator\DataStructure\Graph\Classes $node)
 {
     // First element - list of decorators, second one - regular children.
     // Both of them may be empty
     $result = array(array(), array());
     foreach ($node->getChildren() as $child) {
         // One in the pair: (<decorators>, ...) or (..., <regular>)
         $result[$child->isDecorator() ? 0 : 1][] = $child;
     }
     // Get module name by class name.
     // Calculate module priority in modules graph.
     // Use that priority to sort decorators.
     // So, classes of dependent modules will be placed above
     // their dependencies in decorator chain
     usort($result[0], array('static', 'compareClassWeight'));
     return $result;
 }
Пример #3
0
 /**
  * Get decorators and regular children; order the first group
  *
  * @param \Includes\Decorator\DataStructure\Graph\Classes $node Current node
  *
  * @return array
  */
 protected static function divideChildrenIntoGroups(\Includes\Decorator\DataStructure\Graph\Classes $node)
 {
     // First element - list of decorators, second one - regular children.
     // Both of them may be empty
     $result = array(array(), array());
     foreach ($node->getChildren() as $child) {
         // One in the pair: (<decorators>, ...) or (..., <regular>)
         $result[$child->isDecorator() ? 0 : 1][] = $child;
     }
     list($nodeids, $edges) = static::getTopology($result[0]);
     $ids = array_flip($nodeids);
     $nodeids = static::sortTopological($nodeids, $edges);
     $tmp = $result[0];
     $result[0] = array();
     foreach ($nodeids as $className) {
         $result[0][] = $tmp[$ids[$className]];
         unset($tmp[$ids[$className]]);
     }
     if ($tmp) {
         $result[0] = array_merge($result[0], $tmp);
     }
     return $result;
 }