next()){ if(!self::is_loaded($row,$substate,$state_name,$row['parent_id'])){ continue;} if( ($row['login'] == 1 && !\SYSTEM\SECURITY\Security::isLoggedIn()) || ($row['login'] == 2 && \SYSTEM\SECURITY\Security::isLoggedIn())){ continue;} $row['url'] = \SYSTEM\PAGE\replace::replace($row['url'], $vars); $row['url'] = \SYSTEM\PAGE\replace::clean($row['url']); //clean url of empty variables //$row['url'] = preg_replace('/&.*?=(&|$)/', '&', $row['url']); $row['url'] = preg_replace('/[^=&]+=(&|$)/', '&', $row['url']); $row['url'] = preg_replace('/&&$/', '', $row['url']); $row['css'] = $row['js'] = array(); if(\class_exists($row['php_class']) && \method_exists($row['php_class'], 'css') && \is_callable($row['php_class'].'::css')){ $row['css'] = array_merge($row['css'], \call_user_func($row['php_class'].'::css'));} if(\class_exists($row['php_class']) && \method_exists($row['php_class'], 'js') && \is_callable($row['php_class'].'::js')){ $row['js'] = array_merge($row['js'], \call_user_func($row['php_class'].'::js'));} $row['php_class'] = ''; $skip = false; for($i=0;$iparse($substate); } private static function is_loaded($row,&$substate,$state_name,$parent_id = -1){ for($i=0;$icurrent = array(); $this->stack = array(); $this->string = $string; $this->length = strlen($this->string); // look at each character for ($this->position=0; $this->position < $this->length; $this->position++) { switch ($this->string[$this->position]) { case '(': $this->push(); // push current scope to the stack an begin a new scope array_push($this->stack, $this->current); $this->current = array(); break; case ')': $this->push(); // save current scope $t = $this->current; // get the last scope from stack $this->current = array_pop($this->stack); // add just saved scope to current scope $this->current[count($this->current)-1]['sub'] = $t; break; case '|': // make each word its own token $this->push(); break; default: // remember the offset to do a string capture later // could've also done $buffer .= $string[$position] // but that would just be wasting resources… if ($this->buffer_start === null) { $this->buffer_start = $this->position; } } } $this->push(); return $this->current; } protected function push() { if ($this->buffer_start !== null) { // extract string from buffer start to current position $buffer = substr($this->string, $this->buffer_start, $this->position - $this->buffer_start); // clean buffer $this->buffer_start = null; // throw token into current scope $this->current[] = array('name' => $buffer); } } }