* @package api * @version $Id$ * @link http://www.zentao.net */ class api extends control { /** * Return session to the client. * * @access public * @return void */ public function getSessionID() { $this->session->set('rand', mt_rand(0, 10000)); $this->view->sessionName = session_name(); $this->view->sessionID = session_id(); $this->view->rand = $this->session->rand; $this->display(); } /** * Execute a module's model's method, return the result. * * @param string $moduleName * @param string $methodName * @param string $params param1=value1,param2=value2, don't use & to join them. * @access public * @return string */ public function getModel($moduleName, $methodName, $params = '') { parse_str(str_replace(',', '&', $params), $params); $module = $this->loadModel($moduleName); $result = call_user_func_array(array(&$module, $methodName), $params); if(dao::isError()) die(json_encode(dao::getError())); $output['status'] = $result ? 'success' : 'fail'; $output['data'] = json_encode($result); $output['md5'] = md5($output['data']); $this->output = json_encode($output); die($this->output); } /** * The interface of api. * * @param int $filePath * @param int $action * @access public * @return void */ public function view($filePath, $action) { if($filePath) { $host = common::getSysURL() . $this->config->webRoot; $filePath = helper::safe64Decode($filePath); if($action == 'extendModel') { $method = $this->api->getMethod($filePath, 'Model'); } elseif($action == 'extendControl') { $method = $this->api->getMethod($filePath); } if(!empty($_POST)) { $param = ''; if($action == 'extendModel') { foreach($_POST as $key => $value) $param .= ',' . $key . '=' . $value; $param = ltrim($param, ','); $url = rtrim($host, '/') . inlink('getModel', "moduleName={$method->className}&methodName={$method->methodName}¶ms=$param", 'json'); $url .= $this->config->requestType == "PATH_INFO" ? '?' : '&'; $url .= $this->config->sessionVar . '=' . session_id(); } else { foreach($_POST as $key => $value) $param .= '&' . $key . '=' . $value; $param = ltrim($param, '&'); $url = rtrim($host, '/') . $this->createLink($method->className, $method->methodName, $param, 'json'); $url .= $this->config->requestType == "PATH_INFO" ? '?' : '&'; $url .= $this->config->sessionVar . '=' . session_id(); } /* Unlock session. After new request, restart session. */ session_write_close(); $content = file_get_contents($url); session_start(); $result = json_decode($content); $status = $result->status; $data = json_decode($result->data); $data = '