protected function component_class($name) { $name = trim($name); $name = strtolower($name); if (isset(self::$components_classes[$name])) { return self::$components_classes[$name]; } if (CMS::component_exists($name) || $name[0] == '_') { $lang = CMS::site_lang(); $lang = ucfirst($lang); if ($m = Core_Regexps::match_with_results('{^_(.+)$}', $name)) { $name = trim($m[1]); $module = 'CMS.Lang.' . ucfirst($name) . '.' . $lang; } else { $module = CMS::$component_module_prefix[$name] . ".Lang.{$lang}"; } $class = str_replace('.', '_', $module); try { @Core::load($module); } catch (Core_ModuleNotFoundException $e) { return false; } if (!class_exists($class)) { return false; } $object = new $class(); self::$components_classes[$name] = $object; return $object; } return false; }
private function load_from_component($_component, $_parms) { if (CMS::component_exists($_component)) { $_class = CMS::$component_names[$_component]; $_classref = Core_Types::reflection_for($_class); return $_classref->hasMethod('navigation_tree') ? $_classref->getMethod('navigation_tree')->invokeArgs(null, array($_parms, $this)) : false; } return false; }
public function route($request) { $uri = $request->urn; if (preg_match('{^' . CMS::admin_path() . 'vars(?:-([^/]+))?/(.*)$}', $uri, $m)) { $component = false; if (trim($m[1]) != '') { $component = trim($m[1]); if (!CMS::component_exists($component)) { return false; } self::$component = $component; } $path = trim($m[2]); $ctr = 'CMS.Controller.AdminVars'; if ($path == '') { return array('controller' => $ctr, 'action' => 'index', 'id' => 0, 'component' => $component); } if (preg_match('{^(\\d+)$}', $path, $m)) { return array('controller' => $ctr, 'action' => 'index', 'id' => $m[1], 'component' => $component); } if ($path == 'loaddump') { return array('controller' => $ctr, 'action' => 'loaddump'); } if ($path == 'dump') { return array('controller' => $ctr, 'action' => 'dump', 'component' => $component); } if (preg_match('{(dumpvar|add|del|parms|chparms|change|addfile|delfile|imagelist|attaches)/(\\d+)}', $path, $m)) { return array('controller' => $ctr, 'action' => $m[1], 'id' => $m[2], 'component' => $component); } return false; } return false; }
public function process($data) { foreach ($data as $title => $item) { if (is_string($item) && trim($item) == '' && ($m = Core_Regexps::match_with_results('{^\\%(.+)$}', trim($title)))) { $_component = trim($m[1]); $_parms = false; if ($m = Core_Regexps::match_with_results('{^([^\\s]+)\\s+(.+)$}', $_component)) { $_component = $m[1]; $_parms = trim($m[2]); } if (CMS::component_exists($_component)) { $_class = CMS::$component_names[$_component]; $_classref = Core_Types::reflection_for($_class); $links = $_classref->hasMethod('navigation_tree') ? $_classref->getMethod('navigation_tree')->invokeArgs(NULL, array($_parms)) : array(); foreach ($links as $k => $v) { if (is_string($v)) { $v = array('url' => $v); } $v["from-{$_component}"] = 1; $links[$k] = $v; } $this->process($links); } } else { $this->add($title, $item); } } }
protected function create_form($uri) { $form = Forms::Form('mainform')->action($uri); $validator = Validation::Validator(); $use_validator = false; foreach ($this->form_fields as $name => $parms) { if (isset($parms['if_component_exists'])) { if (!CMS::component_exists($parms['if_component_exists'])) { continue; } } if (isset($parms['embedded_admin']) && $this->embedded_admin) { if (!$parms['embedded_admin']) { continue; } } $type = isset($parms['type']) ? trim($parms['type']) : 'input'; $method = 'create_form_field_' . $type; if (method_exists($this, $method)) { $this->{$method}($form, $name, $parms); } else { if (isset(self::$field_types[$type])) { self::$field_types[$type]->form_field($form, $name, $parms); if ($dir = self::$field_types[$type]->is_upload($parms)) { $this->upload_fields[$name] = $dir; } } else { $form->input($name); } } if (isset($parms['match'])) { if ($parms['match'] == 'presence') { $validator->validate_presence_of($name, $parms['error_message']); } else { if ($parms['match'] == 'email') { $validator->validate_email_for($name, $parms['error_message']); } else { if ($parms['match'] == 'email presence') { $validator->validate_presence_of($name, $parms['error_message']); $validator->validate_email_for($name, $parms['error_message']); } else { $validator->validate_format_of($name, $parms['match'], $parms['error_message']); } } } $use_validator = true; } } if ($use_validator) { $form->validate_with($validator); } return $form; }
public function add_item($link, $level, $parent = null) { $access = isset($link->access) ? trim($link->access) : ''; if ($access != '' && !CMS::check_globals_or($access)) { return $this; } if (empty($link->url) && empty($link->id) && ($m = Core_Regexps::match_with_results('{^\\%(.+)$}', trim($link->title)))) { $_component = trim($m[1]); $_parms = false; if ($m = Core_Regexps::match_with_results('{^([^\\s]+)\\s+(.+)$}', $_component)) { $_component = $m[1]; $_parms = trim($m[2]); } if (CMS::component_exists($_component)) { $_class = CMS::$component_names[$_component]; $_classref = Core_Types::reflection_for($_class); $links = $_classref->hasMethod('navigation_tree') ? $_classref->getMethod('navigation_tree')->invokeArgs(NULL, array($_parms)) : array(); foreach ($links as $k => &$v) { $v["from-{$_component}"] = 1; } return $this->load_data($links, $level, $parent); } return $this; } return parent::add_item($link, $level, $parent); }
public function add($title, $item) { if (!Core_Types::is_iterable($item)) { $item = array('uri' => $item, 'url' => $item); } if (isset($item['title'])) { $title = $item['title']; } $title = CMS::lang($title); //Events::dispatch('cms.navigation.add', $ev = Events::Event(array('title' => $title, 'data' => $item, 'url' => $item['url']))); //$title = $ev['title']; //$item = $ev['data']; //$item['url'] = $ev['url']; $url = $item['url']; Events::call('cms.navigation.add', $title, $item, $url); $item['url'] = $url; $access = isset($item['access']) ? trim($item['access']) : ''; if ($access != '' && !CMS::check_globals_or($access)) { return $this; } if (isset($item['disabled'])) { if (CMS::check_yes($item['disabled'])) { return $this; } } $uri = ''; if (isset($item['uri'])) { $uri = $item['uri']; } if (isset($item['url'])) { $uri = $item['url']; } $id = isset($item['id']) ? $item['id'] : md5($title . $uri); if (isset($item['navigation_id'])) { $id = trim($item['navigation_id']); } $selected = false; $disabled = false; if (isset($item['match'])) { if (preg_match($item['match'], CMS_Navigation3::$uri)) { $selected = true; } } if (isset($item['flag'])) { if (CMS::$navigation->is_flag($item['flag'])) { $selected = true; } } if ($uri == CMS_Navigation3::$uri) { $selected = true; } $item['selected'] = $selected; $item['disabled'] = $disabled; $sub = isset($item['sub']) ? $item['sub'] : null; if (is_string($sub)) { $sub = trim($sub); $_component = $sub; $_parms = $uri; if ($m = Core_Regexps::match_with_results('{^([^\\s]+)\\s+(.+)$}', $sub)) { $_component = trim($m[1]); $_parms = trim($m[2]); } if (CMS::component_exists($_component)) { $_class = CMS::$component_names[$_component]; $_classref = Core_Types::reflection_for($_class); $sub = $_classref->hasMethod('navigation_tree') ? $_classref->getMethod('navigation_tree')->invokeArgs(NULL, array($_parms, $item)) : false; } } if (Core_Types::is_iterable($sub)) { $set = new CMS_Navigation3_LinkSet(); $set->level_num = $this->level_num + 1; $set->process($sub); $this->link($id, $uri, $title, $item, $set); } else { $this->link($id, $uri, $title, $item); } return $this; }
protected function form_field_exists($name, $parms, $action) { if (isset($parms['if_component_exists'])) { if (!CMS::component_exists($parms['if_component_exists'])) { return false; } } return true; }