* @package common * @version $Id$ * @link http://www.zentao.net */ class commonModel extends model { /** * Start the session. * * @access public * @return void */ public function startSession() { session_name($this->config->sessionVar); if(isset($_GET[$this->config->sessionVar])) session_id($_GET[$this->config->sessionVar]); session_start(); } /** * Set the header info. * * @access public * @return void */ public function sendHeader() { header("Content-Type: text/html; Language={$this->config->encoding}"); header("Cache-control: private"); } /** * Set the commpany. * * First, search company by the http host. If not found, search by the default domain. Last, use the first as the default. * After get the company, save it to session. * @access public * @return void */ public function setCompany() { $httpHost = $this->server->http_host; if(strpos($httpHost, ":")) { $httpHost = explode(":", $httpHost); $httpHost = $httpHost[0]; } if($this->session->company and $this->session->company->pms == $httpHost) { $this->app->company = $this->session->company; } else { $company = $this->loadModel('company')->getByDomain(); if(!$company and isset($this->config->default->domain)) $company = $this->company->getByDomain($this->config->default->domain); if(!$company) $company = $this->company->getFirst(); if(!$company) $this->app->error(sprintf($this->lang->error->companyNotFound, $httpHost), __FILE__, __LINE__, $exit = true); $this->session->set('company', $company); $this->app->company = $company; } } /** * Set the user info. * * @access public * @return void */ public function setUser() { if($this->session->user) { $this->app->user = $this->session->user; } elseif($this->app->company->guest) { $user = new stdClass(); $user->id = 0; $user->account = 'guest'; $user->realname = 'guest'; $user->rights = $this->loadModel('user')->authorize('guest'); $this->session->set('user', $user); $this->app->user = $this->session->user; } } /** * Juage a method of one module is open or not? * * @param string $module * @param string $method * @access public * @return bool */ public function isOpenMethod($module, $method) { if($module == 'user' and strpos('login|logout|deny', $method) !== false) return true; if($module == 'api' and $method == 'getsessionid') return true; if($module == 'misc' and $method == 'about') return true; if($module == 'help' and $method == 'field') return true; return false; } /** * Deny access. * * @access public * @return void */ public function deny($module, $method) { $vars = "module=$module&method=$method"; if(isset($this->server->http_referer)) { $referer = helper::safe64Encode($this->server->http_referer); $vars .= "&referer=$referer"; } $denyLink = helper::createLink('user', 'deny', $vars); /* Fix the bug of IE: use js locate, can't get the referer. */ if(strpos($this->server->http_user_agent, 'MSIE') !== false) { echo ""; echo ""; } else { echo js::locate($denyLink); } exit; } /** * Get the run info. * * @param mixed $startTime the start time of this execution * @access public * @return array the run info array. */ public function getRunInfo($startTime) { $info['timeUsed'] = round(getTime() - $startTime, 4) * 1000; $info['memory'] = round(memory_get_peak_usage() / 1024, 1); $info['querys'] = count(dao::$querys); return $info; } /** * Print top bar. * * @static * @access public * @return void */ public static function printTopBar() { global $lang, $app; printf($lang->todayIs, date(DT_DATE3)); if(isset($app->user)) echo $app->user->realname . ' '; if(isset($app->user) and $app->user->account != 'guest') { echo html::a(helper::createLink('my', 'index'), $lang->myControl); echo html::a(helper::createLink('user', 'logout'), $lang->logout); } else { echo html::a(helper::createLink('user', 'login'), $lang->login); } echo html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about'"); echo $lang->agileTraining; echo $lang->donate; } /** * Print the main menu. * * @param string $moduleName * @static * @access public * @return void */ public static function printMainmenu($moduleName) { global $app, $lang; echo "\n"; } /** * Print the module menu. * * @param string $moduleName * @static * @access public * @return void */ public static function printModuleMenu($moduleName) { global $lang, $app; if(!isset($lang->$moduleName->menu)) {echo ""; return;} /* Get the sub menus of the module, and get current module and method. */ $submenus = $lang->$moduleName->menu; $currentModule = $app->getModuleName(); $currentMethod = $app->getMethodName(); /* The beginning of the menu. */ echo "\n"; } /** * Print the bread menu. * * @param string $moduleName * @param string $position * @static * @access public * @return void */ public static function printBreadMenu($moduleName, $position) { global $lang; $mainMenu = $moduleName; if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName; echo html::a(helper::createLink('my', 'index'), $lang->ZenTaoPMS) . $lang->arrow; if($moduleName != 'index') { list($menuLabel, $module, $method) = explode('|', $lang->menu->$mainMenu); echo html::a(helper::createLink($module, $method), $menuLabel); } else { echo $lang->index->common; } if(empty($position)) return; echo $lang->arrow; foreach($position as $key => $link) { echo $link; if(isset($position[$key + 1])) echo $lang->arrow; } } /** * Diff two string. (see phpt) * * @param string $text1 * @param string $text2 * @static * @access public * @return string */ public static function diff($text1, $text2) { $text1 = str_replace(' ', '', trim($text1)); $text2 = str_replace(' ', '', trim($text2)); $w = explode("\n", $text1); $o = explode("\n", $text2); $w1 = array_diff_assoc($w,$o); $o1 = array_diff_assoc($o,$w); $w2 = array(); $o2 = array(); foreach($w1 as $idx => $val) $w2[sprintf("%03d<",$idx)] = sprintf("%03d- ", $idx+1) . "" . trim($val) . ""; foreach($o1 as $idx => $val) $o2[sprintf("%03d>",$idx)] = sprintf("%03d+ ", $idx+1) . "" . trim($val) . ""; $diff = array_merge($w2, $o2); ksort($diff); return implode("\n", $diff); } }