/** * Сделать апдейт таймлайна прямого общения * * @param string $name */ public function directUpdate($name) { /** * Если пользователь имеет возможность работать с рабочим пространством */ if ($this->acl->isAllowed($this->user['role'], ACL_RESOURCE_WORKSPACE, ACL_ACTION_WORK)) { $S =& $this->view->smarty; /** * Если данные не пришли, либо не верны */ if (!(($direct = $this->input->post('direct')) !== FALSE && isset($direct['text']) && !empty($direct['text']))) { trigger500(); } /** * Получаем и аутентифицируемся в модели */ $M = TwitterModel::getInstance(); $M->login($this->user['login']); $M->password($this->user['password']); /** * Запрос на добавление */ $result = $M->directNew($name, $direct['text']); /** * Если код ответа на запрос более либо равен 300, то считаем это за ошибку */ if ($M->isError()) { trigger500(); } } else { trigger404(); } }
/** * 实例化一个模型 * @param type $classname_path * @param type $hmvc_module_floder * @return type WoniuModel */ public static function instance($classname_path = null, $hmvc_module_floder = NULL) { if (!empty($hmvc_module_floder)) { WoniuRouter::switchHmvcConfig($hmvc_module_floder); } //这里调用控制器instance是为了触发自动加载,从而避免了插件模式下,直接instance模型,自动加载失效的问题 WoniuController::instance(); if (empty($classname_path)) { $renew = is_bool($classname_path) && $classname_path === true; WoniuLoader::classAutoloadRegister(); return empty(self::$instance) || $renew ? self::$instance = new self() : self::$instance; } $system = WoniuLoader::$system; $classname_path = str_replace('.', DIRECTORY_SEPARATOR, $classname_path); $classname = basename($classname_path); $model_folders = $system['model_folder']; if (!is_array($model_folders)) { $model_folders = array($model_folders); } $count = count($model_folders); //在plugin模式下,路由器不再使用,那么自动注册不会被执行,自动加载功能会失效,所以在这里再尝试加载一次, //如此一来就能满足两种模式 WoniuLoader::classAutoloadRegister(); foreach ($model_folders as $key => $model_folder) { $filepath = $model_folder . DIRECTORY_SEPARATOR . $classname_path . $system['model_file_subfix']; $alias_name = $classname; if (in_array($alias_name, array_keys(WoniuModelLoader::$model_files))) { return WoniuModelLoader::$model_files[$alias_name]; } if (file_exists($filepath)) { if (!class_exists($classname, FALSE)) { WoniuLoader::includeOnce($filepath); } if (class_exists($classname, FALSE)) { return WoniuModelLoader::$model_files[$alias_name] = new $classname(); } else { if ($key == $count - 1) { trigger404('Model Class:' . $classname . ' not found.'); } } } else { if ($key == $count - 1) { trigger404($filepath . ' not found.'); } } } }
private static function getQueryStr() { $system = systemInfo(); //命令行运行检查 if (MpInput::isCli()) { global $argv; $pathinfo_query = isset($argv[1]) ? $argv[1] : ''; } else { $pathinfo = @parse_url($_SERVER['REQUEST_URI']); // print_r($pathinfo); if (empty($pathinfo)) { if ($system['debug']) { trigger404('request parse error:' . $_SERVER['REQUEST_URI']); } else { trigger404(); } } //pathinfo模式下有?,那么$pathinfo['query']也是非空的,这个时候查询字符串是PATH_INFO和query $query_str = empty($pathinfo['query']) ? '' : $pathinfo['query']; //print_r($query_str); $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : ''); //$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (isset($_SERVER['REDIRECT_PATH_INFO']) ? $_SERVER['REDIRECT_PATH_INFO'] : ''); $pathinfo_query = empty($path_info) ? $query_str : $path_info . '&' . $query_str; } if ($pathinfo_query) { $pathinfo_query = trim($pathinfo_query, '/&'); } //add by sham //add by sham //urldecode 解码所有的参数名,解决get表单会编码参数名称的问题 $pq = $_pq = array(); $_pq = explode('&', $pathinfo_query); foreach ($_pq as $value) { $p = explode('=', $value); if (isset($p[0])) { $p[0] = urldecode($p[0]); } $pq[] = implode('=', $p); } $pathinfo_query = implode('&', $pq); return $pathinfo_query; }
/** * Подключить контроллер, проверить доступность метода, и вызвать * * @param string $controller Контроллер * @param string $method Метод * @param array $arguments Аргументы * @return mixed Возвращённое методом контроллера значение */ private function callControllerMethod($controller, $method, $arguments = array(), $trigger = self::TRIGGER_ERROR) { /** * Получение имени контроллера и метода * Заменяются псевдоразделители '_' на '/' и первая буква каждой части делается заглавной */ $temp = explode('_', $controller); foreach ($temp as &$value) { $value = ucwords(strtolower($value)); } $controller = implode('_', $temp); /** * Проверка объявлен ли класс с таким именем * Если нет, выдаётся ошибка если надо */ if (!class_exists($controller)) { /** * Проверка существует ли файл с контроллером и его подключение */ if (file_exists($temp = CONTROLLERS_PATH . str_replace('_', '/', $controller) . EXT)) { require_once $temp; } else { switch ($trigger) { case self::TRIGGER_404: trigger404(); break; case self::TRIGGER_ERROR: trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Controller <b>%s</b> was not found'), $controller), E_USER_ERROR); default: case self::TRIGGER_NONE: break; } } } /** * Получение ссылки на объект контроллера */ $C = call_user_func(array($controller, 'getInstance'), $controller); /** * Проверка возможно ли вызвать метод котроллера * Если нет, выдаётся ошибка если надо */ if (!is_callable(array($C, $method))) { switch ($trigger) { case self::TRIGGER_404: trigger404(); break; case self::TRIGGER_ERROR: trigger_error(sprintf(Open_Text::getInstance()->dget('errors', 'Method <b>%s</b> of controller <b>%s</b> cannot be called'), $method, $controller), E_USER_ERROR); default: case self::TRIGGER_NONE: break; } } /** * Вызов метода */ return call_user_func_array(array($C, $method), $arguments); }
public static function instance($classname_path = null, $hmvc_module_floder = NULL) { if (!empty($hmvc_module_floder)) { MpRouter::switchHmvcConfig($hmvc_module_floder); } WoniuController::instance(); if (empty($classname_path)) { $renew = is_bool($classname_path) && $classname_path === true; MpLoader::classAutoloadRegister(); return empty(self::$instance) || $renew ? self::$instance = new self() : self::$instance; } $system = systemInfo(); $classname_path = str_replace('.', DIRECTORY_SEPARATOR, $classname_path); $classname = basename($classname_path); $model_folders = $system['model_folder']; if (!is_array($model_folders)) { $model_folders = array($model_folders); } $count = count($model_folders); MpLoader::classAutoloadRegister(); foreach ($model_folders as $key => $model_folder) { $filepath = $model_folder . DIRECTORY_SEPARATOR . $classname_path . $system['model_file_subfix']; $alias_name = $classname; if (in_array($alias_name, array_keys(WoniuModelLoader::$model_files))) { return WoniuModelLoader::$model_files[$alias_name]; } if (file_exists($filepath)) { if (!class_exists($classname, FALSE)) { MpLoader::includeOnce($filepath); } if (class_exists($classname, FALSE)) { return WoniuModelLoader::$model_files[$alias_name] = new $classname(); } else { if ($key == $count - 1) { trigger404('Model Class:' . $classname . ' not found.'); } } } else { if ($key == $count - 1) { trigger404($filepath . ' not found.'); } } } }