Example #1
0
 /**
  * process element
  *
  * @param $implement
  * @param string $rawContent
  * @return array|mixed
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  */
 public function process($implement, $rawContent = '')
 {
     $classData = $this->classConfig->getClassData($implement['id']);
     $implements = [];
     foreach ($this->getModelsToProcess() as $model) {
         $implements[$model->filterContent($classData['id'])] = ['id' => $model->filterContent($classData['id']), 'class' => $model->filterContent($classData['class']), 'alias' => $model->filterContent($classData['alias'])];
     }
     return $implements;
 }
Example #2
0
 /**
  * parse member
  *
  * @param array $member
  * @return array
  */
 public function parse(array $member)
 {
     $data = [];
     $constant = $this->classConfig->getBoolValue($member, 'constant');
     if ($constant) {
         $type = 'const';
     } else {
         $type = isset($member['type']) ? $member['type'] : 'protected';
     }
     $data['id'] = $this->filterContent($member['id']);
     $data['type'] = $type;
     $data['construct'] = $this->classConfig->getBoolValue($member, 'construct');
     $data['constant'] = $constant;
     $data['parent'] = $this->classConfig->getBoolValue($member, 'parent');
     $data['show'] = $this->classConfig->getBoolValue($member, 'show');
     $data['skip'] = $this->classConfig->getBoolValue($member, 'skip');
     $data['doc'] = isset($member['doc']) ? $this->filterContent($member['doc']) : '';
     if (isset($member['var'])) {
         $classData = $this->classConfig->getClassData($member['var']);
         $data['var'] = ['class' => $this->filterContent($classData['class']), 'alias' => $this->filterContent($classData['alias'])];
     }
     $data['default'] = isset($member['default']) ? $this->filterContent($member['default']) : '';
     $data['core'] = $this->classConfig->getBoolValue($member, 'core');
     return $data;
 }
Example #3
0
 /**
  * merge all elements of the class
  *
  * @param $string
  * @return string
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function mergeElements($string)
 {
     $this->uses = [];
     $content = '';
     $tab = $this->getPadding();
     $eol = $this->getEol();
     //add annotations
     if ($this->module->getSettings()->getAnnotation() && count($this->annotations)) {
         $content .= '/**' . $this->getEol() . implode($this->getEol(), $this->annotations) . $this->getEol() . ' */' . $this->getEol();
     }
     if ($this->config['abstract']) {
         $classLine = 'abstract ';
     } else {
         $classLine = '';
     }
     $classLine .= 'class ' . $this->className;
     if ($this->extends) {
         $classLine .= ' extends ' . $this->getClassName($this->extends);
         if (!$this->getQualified()) {
             $this->uses[$this->extends['class']] = $this->extends;
         }
     }
     if ($this->implements) {
         $interfaces = [];
         foreach ($this->implements as $classData) {
             $interfaces[] = $this->getClassName($classData);
             if (!$this->getQualified()) {
                 $this->uses[$classData['class']] = $classData;
             }
         }
         $classLine .= ' implements ' . implode(', ', $interfaces);
     }
     $classLine .= $this->getEol() . '{' . $this->getEol();
     //add class definition
     $content .= $classLine;
     //separate members
     $constants = [];
     $members = [];
     $forConstruct = [];
     $hasConstruct = false;
     foreach ($this->members as $member) {
         if ($member['constant']) {
             $constants[] = $member;
             continue;
         }
         if ($member['show']) {
             $members[] = $member;
         }
         if ($member['construct']) {
             $forConstruct[] = $member;
             if (!$member['parent']) {
                 $hasConstruct = true;
             }
         }
     }
     //add constants
     foreach ($constants as $constant) {
         $content .= $this->formatMember($constant);
     }
     //add members
     foreach ($members as $member) {
         $content .= $this->formatMember($member);
     }
     if (count($this->constructs)) {
         $hasConstruct = true;
     }
     //generate constructor
     if ($hasConstruct) {
         $lines = [];
         $lines[] = '/**';
         $lines[] = ' * constructor';
         $lines[] = ' * ';
         foreach ($forConstruct as $param) {
             $className = $this->getClassName($param['var']);
             if (!$this->getQualified()) {
                 $this->uses[$param['var']['class']] = $param['var'];
             }
             $lines[] = ' * @param ' . $className . ($className ? ' ' : '') . '$' . $param['id'];
         }
         $lines[] = ' */';
         $lines[] = 'public function __construct(';
         foreach ($forConstruct as $index => $param) {
             $className = $this->getClassName($param['var']);
             if (!$this->getQualified()) {
                 $this->uses[$param['var']['class']] = $param['var'];
             }
             $lines[] = $tab . $className . ($className ? ' ' : '') . '$' . $param['id'] . ($param['default'] ? ' = ' . $param['default'] : '') . ($index < count($forConstruct) - 1 ? ',' : '');
         }
         $lines[] = ')';
         $lines[] = '{';
         $constructAssign = [];
         foreach ($forConstruct as $param) {
             if (!$param['parent'] && !$param['skip']) {
                 $underscore = $this->getUnderscoreValue($param);
                 $constructAssign[] = $tab . '$this->' . $underscore . $param['id'] . ' = ' . '$' . $param['id'] . ';';
             }
         }
         $constructAssign = $this->beautifyConstructAssigns($constructAssign);
         foreach ($constructAssign as $line) {
             $lines[] = $line;
         }
         if ($this->extends) {
             $parentLine = $tab . 'parent::__construct(';
             $parentParams = [];
             foreach ($forConstruct as $param) {
                 if ($param['parent']) {
                     $parentParams[] = '$' . $param['id'];
                 }
             }
             if ($this->parentConstructExtraParams) {
                 $parentParams[] = $this->parentConstructExtraParams;
             }
             $parentLine .= implode(', ', $parentParams) . ');';
             $lines[] = $parentLine;
         }
         foreach ($this->constructs as $construct) {
             $parts = explode(self::CONSTRUCT_SEPARATOR, $construct);
             foreach ($parts as $part) {
                 $lines[] = $tab . $part;
             }
         }
         $lines[] = '}' . $eol;
         $content .= $this->getScopeModel()->filterContent($tab . implode($eol . $tab, $lines) . $eol);
     }
     //add class body
     $content .= $string;
     //filter {{class}} directives
     if (preg_match_all(self::CLASS_PATTERN, $content, $constructions, PREG_SET_ORDER)) {
         foreach ($constructions as $construction) {
             if (isset($construction[1])) {
                 $classData = $this->classConfig->getClassData($construction[1]);
                 $classAndUse = $this->getUsesAndClassName($classData);
                 if ($classAndUse['use']) {
                     $this->uses[$classAndUse['use']['class']] = $classAndUse['use'];
                 }
                 $replaceVal = $classAndUse['class'];
                 $content = str_replace($construction[0], $replaceVal, $content);
             }
         }
     }
     //process uses
     $useLines = [];
     $uses = '';
     if (!$this->getQualified()) {
         foreach ($this->uses as $use) {
             if (!in_array($use['class'], $this->baseTypes)) {
                 $useLines[] = 'use ' . ltrim($use['class'], '\\') . ($use['alias'] ? ' as ' . $use['alias'] : '') . ';';
             }
         }
         if (count($useLines)) {
             asort($useLines);
             $useLines = array_unique($useLines);
             $uses = implode($this->getEol(), $useLines) . $this->getEol() . $this->getEol();
         }
     }
     return $uses . $content;
 }
Example #4
0
 /**
  * process element
  *
  * @param $implement
  * @param string $rawContent
  * @return array|mixed
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  */
 public function process($implement, $rawContent = '')
 {
     $classData = $this->classConfig->getClassData($implement['id']);
     return [$this->getModel()->filterContent($classData['id']) => ['id' => $this->getModel()->filterContent($classData['id']), 'class' => $this->getModel()->filterContent($classData['class']), 'alias' => $this->getModel()->filterContent($classData['alias'])]];
 }