public function GetTaskData(Task $task) { $data = new \phalanx\base\Dictionary(); $output_list = $task::OutputList(); $output_list[] = 'input'; foreach ($output_list as $key) { $class = new \ReflectionClass(get_class($task)); if ($class->HasProperty($key) && $class->GetProperty($key)->IsPublic()) { $data->Set($key, $task->{$key}); } else { if ($class->HasMethod($key) && $class->GetMethod($key)->IsPublic()) { $data->Set($key, $task->{$key}()); } } } return $data; }
/** * Get info and details about the methods of a module. * * @param $module string with the module name. * @returns array with information on the methods. */ private function GetDetailsOfModuleMethods($module) { $methods = array(); if (class_exists($module)) { $rc = new ReflectionClass($module); $classMethods = $rc->getMethods(); foreach ($classMethods as $val) { $methodName = $val->name; $rm = $rc->GetMethod($methodName); $methods[$methodName]['name'] = $rm->getName(); $methods[$methodName]['doccomment'] = $rm->getDocComment(); $methods[$methodName]['startline'] = $rm->getStartLine(); $methods[$methodName]['endline'] = $rm->getEndLine(); $methods[$methodName]['isPublic'] = $rm->isPublic(); $methods[$methodName]['isProtected'] = $rm->isProtected(); $methods[$methodName]['isPrivate'] = $rm->isPrivate(); $methods[$methodName]['isStatic'] = $rm->isStatic(); } } ksort($methods, SORT_LOCALE_STRING); return $methods; }
/** * A utility method to load a controller. This method loads the controller * and fetches the contents of the controller into the Controller::$contents * variable if the get_contents parameter is set to true on call. If a controller * doesn't exist in the module path, a ModelController is loaded to help * manipulate the contents of the model. If no model exists in that location, * it is asumed to be a package and a package controller is loaded. * * @param $path The path for the model to be loaded. * @param $get_contents A flag which determines whether the contents of the * controller should be displayed. * @return Controller */ public static function load($path, $get_contents = true) { global $redirectedPackage; global $packageSchema; $controller_path = ""; $controller_name = ""; $redirected = false; $redirect_path = ""; $package_name = ""; $package_main = ""; //Go through the whole path and build the folder location of the system for ($i = 0; $i < count($path); $i++) { $p = $path[$i]; $baseClassName = $package_name . Application::camelize("{$controller_path}/{$p}", "/"); if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/{$baseClassName}Controller.php")) { $controller_class_name = $baseClassName . "Controller"; $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_MODULE; add_include_path("app/modules/{$controller_path}/"); break; } else { if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/{$p}.php")) { $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_MODULE; break; } else { if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/{$baseClassName}Model.php")) { $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_MODEL; break; } else { if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/model.xml")) { $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_MODEL; break; } else { if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/report.xml")) { $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_REPORT; break; } else { if (file_exists(SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/package_redirect.php")) { include SOFTWARE_HOME . "app/modules/{$controller_path}/{$p}/package_redirect.php"; $redirected = true; $previousControllerPath = $controller_path . "/{$p}"; $controller_path = ""; $redirectedPackage = $package_path; $packageSchema = $package_schema; } else { if ($redirected === true && file_exists(SOFTWARE_HOME . "{$redirect_path}/{$controller_path}/{$p}/report.xml")) { $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_REPORT; break; } else { if ($redirected === true && file_exists(SOFTWARE_HOME . "{$redirect_path}/{$controller_path}/{$p}/{$baseClassName}Controller.php")) { $controller_class_name = $baseClassName . "Controller"; $controller_name = $p; $controller_path .= "/{$p}"; $controller_type = Controller::TYPE_MODULE; $package_main .= $p; add_include_path("{$redirect_path}/{$controller_path}/"); break; } else { $controller_path .= "/{$p}"; if ($redirected) { $package_main .= "{$p}."; } } } } } } } } } } // Check the type of controller and load it. switch ($controller_type) { case Controller::TYPE_MODULE: // Load a module controller which would be a subclass of this // class if ($controller_class_name == "") { require_once SOFTWARE_HOME . "app/modules{$controller_path}/{$controller_name}.php"; $controller = new $controller_name(); } else { $controller_name = $controller_class_name; $controller = new $controller_class_name(); $controller->redirected = $redirected; $controller->redirectPath = $redirect_path; $controller->redirectedPackage = $package_path; $controller->mainRedirectedPackage = $package_main; $controller->redirectedPackageName = $package_name; } break; case Controller::TYPE_MODEL: // Load the ModelController wrapper around an existing model class. $model = substr(str_replace("/", ".", $controller_path), 1); $controller_name = "ModelController"; $controller = new ModelController($model, $package_path); break; case Controller::TYPE_REPORT: $controller = new XmlDefinedReportController($redirect_path . $controller_path . "/report.xml", $redirected); $controller_name = "XmlDefinedReportController"; break; default: // Load a package controller for this folder if (is_dir("app/modules{$controller_path}")) { $controller = new PackageController($path); $controller_name = "PackageController"; $get_contents = true; $force_output = true; } else { if ($redirected === true && is_dir(SOFTWARE_HOME . "{$redirect_path}/{$controller_path}")) { $controller = new PackageController($path); $controller_name = "PackageController"; $get_contents = true; $force_output = true; } else { $controller = new ErrorController(); $controller_name = "ErrorController"; } } } // If the get contents flag has been set return all the contents of this // controller. $controller->path = $previousControllerPath . $controller_path; if ($get_contents) { if ($i == count($path) - 1 || $force_output) { $ret = $controller->getContents(); } else { if (method_exists($controller, $path[$i + 1])) { $controller_class = new ReflectionClass($controller_name); $method = $controller_class->GetMethod($path[$i + 1]); $ret = $method->invoke($controller, array_slice($path, $i + 2)); } else { $ret = "<h2>Error</h2> Method does not exist. [" . $path[$i + 1] . "]"; } } if (is_array($ret)) { $t = new TemplateEngine(); $t->assign('controller_path', $controller_path); $t->assign($ret["data"]); $controller->content = $t->fetch(isset($ret["template"]) ? $ret["template"] : $path[$i + 1] . ".tpl"); } else { if (is_string($ret)) { $controller->content = $ret; } } } return $controller; }
public function WillFire() { // Make sure the client is only performing an allowed action. $actions = array(self::ACTION_FETCH, self::ACTION_DELETE, self::ACTION_VALIDATE, self::ACTION_INSERT, self::ACTION_UPDATE); if (!in_array($this->input->action, $actions)) { $this->_Error(-1, 'Action not supported'); return; } // Make sure the Model exists and can be validated. $classes = get_declared_classes(); foreach ($classes as $class) { $mirror = new \ReflectionClass($class); if ($mirror->ImplementsInterface('\\phalanx\\data\\ValidatingModel')) { $validator_name = $mirror->GetMethod('ValidatorName')->Invoke(NULL); if ($validator_name == $this->input->model) { if (is_array($this->input->data)) { $this->model = $mirror->NewInstance(NULL); $this->model->SetFrom($this->input->data); } else { $this->model = $mirror->NewInstance($this->input->data); } break; } } } if (!$this->model) { $this->_Error(-2, 'The model could not be created'); return; } // Make sure the validator exists. $this->validator = $this->model->GetValidator(); if (!$this->validator || !$this->validator instanceof ModelValidator) { $this->_Error(-3, 'The validator could not be created'); return; } }