Example #1
0
 /**
  * start router distributing
  * 
  * @return void
  */
 public static function dispatch()
 {
     /* load custom router rules */
     self::$custom = Printemps_Config::read("router");
     $mode = APP_ENTRY_MODE;
     switch ($mode) {
         case 1:
             $request = $_SERVER['QUERY_STRING'];
             break;
         case 2:
         case 3:
             isset($_SERVER['PATH_INFO']) ? $request = $_SERVER['PATH_INFO'] : ($request = '');
             break;
     }
     $request = explode("/", $request);
     array_splice($request, 0, 1);
     //remove first element of request array
     if (isset($request[0]) && !empty($request[0])) {
         self::$requested['controller'] = isset(self::$custom['class'][$request[0]]) ? self::$custom['class'][$request[0]] : $request[0];
         if (isset($request[1]) && !empty($request[1])) {
             self::$requested['method'] = isset(self::$custom['method'][self::$requested['controller'] . ':' . $request[1]]) ? self::$custom['method'][self::$requested['controller'] . ':' . $request[1]] : $request[1];
             /** Write params */
             if (isset($request[2]) && $request[2] != '') {
                 for ($i = 2; $i < count($request) - 1; $i += 2) {
                     $name = $request[$i];
                     $value = isset($request[$i + 1]) ? $request[$i + 1] : "";
                     Printemps_Config::setGlobal($name, $value);
                 }
             }
         } else {
             self::$requested['method'] = "index";
         }
     } else {
         self::$requested['controller'] = "index";
         self::$requested['method'] = "index";
     }
     self::$requested['fullname'] = self::$requested['controller'] . 'Controller';
     /* check if controller doesn't exist */
     if (!class_exists(self::$requested['fullname'])) {
         Printemps_Exception::halt("Requested Controller : " . self::$requested['fullname'] . " doesn't exist.");
     }
     $called = new ReflectionClass(self::$requested['fullname']);
     //create a ReflectionClass
     $called = $called->newInstance();
     //Instance a ReflectionClass
     /* check if method doesn't exist */
     if (!method_exists($called, self::$requested['method'])) {
         Printemps_Exception::halt("Requested Method : " . self::$requested['method'] . "() doesn't exist.");
     }
     call_user_func(array($called, self::$requested['method']));
     //Call requested method
 }
Example #2
0
 /**
  * connect to a new mysql server
  *
  * @param  array $config config content
  * @param  bool $replace whether to replace current default connection
  * @return void
  */
 public function connect($config, $replace = true)
 {
     $this->config = $config;
     //save config file for further using
     if (!isset($config['method'])) {
         Printemps_Exception::halt("Database connect method has not been set.");
     }
     switch ($config['method']) {
         case "pdo":
             $strings = "mysql:host=" . $config['host'] . ";dbname=" . $config['name'];
             $user = $config['user'];
             $password = $config['password'];
             try {
                 $database = new PDO($strings, $user, $password);
             } catch (Exception $e) {
                 Printemps_Exception::halt("Failed connect to database through PDO Driver.");
             }
             $database->query("SET NAMES " . $config['encode']);
             $this->pushme($database, $replace);
             break;
         case "mysqli":
             $database = new mysqli($config['host'], $config['user'], $config['password'], $config['name'], $config['port']);
             $database->query("SET NAMES " . $config['encode']);
             $this->pushme($database, $replace);
             break;
         case "mysql":
             $database = mysql_connect($config['host'] . ':' . $config['port'], $config['user'], $config['password']);
             mysql_select_db($config['name'], $database);
             mysql_query("SET NAMES " . $config['encode'], $database);
             $this->pushme($database, $replace);
             break;
     }
 }
Example #3
0
 /**
  * compile template-file to executable-script
  * 
  * @param  string $filepath   
  * @param  string $controller 
  * @param  string $template   
  * @param  string $suffix     
  * @return mixed
  */
 public function compile($filepath, $controller, $template, $suffix)
 {
     /* try to read file */
     $file = @file_get_contents($filepath);
     if (!$file) {
         Printemps_Exception::notice("Can not read template file : " . $filepath . ".");
         return false;
     }
     /* begin compiling */
     $content = $file;
     $partten = array('/\\{(\\$.*?)\\}/', "/\\{include.*?path=['|\"](.*?)['|\"].*?suffix=['|\"'](.*?)['|\"]\\}/", "/\\{!if(.*?)\\}/", "/\\{!endif\\}/", "/\\{!else\\}/", "/\\{&repeat time=(.*?)\\}/", "/\\{&endrepeat\\}/", "/\\{&while condition=\\((.*?)\\) update=\\((.*?)\\)\\}/", "/\\{&endwhile\\}/", "/&&(.*?)&&/", "/\\{go=['|\"](.*?)['|\"]\\}/");
     $replacement = array("<?php echo \$1;?>", "<?php Printemps_View::getInstance()->display(\"\$1\", \"\$2\"); ?>", "<?php if (\$1): ?>", "<?php endif; ?>", "<?php else: ?>", "<?php for (\$i = 0; \$i < \$1; \$i++) { ?>", "<?php } ?>", "<?php while (\$1): \$2 ?>", "<?php endwhile; ?>", "<?php \$1 ?>", "<?php echo Printemps_Response::generate(\"\$1\"); ?>");
     $content = preg_replace($partten, $replacement, $content);
     $compiled = Printemps_Config::read("APP_CACHES") . $controller . '/' . $template . '.' . $suffix . '.php';
     if (!is_dir(Printemps_Config::read("APP_CACHES") . $controller)) {
         mkdir(Printemps_Config::read("APP_CACHES") . $controller, 755);
     }
     $newfile = @fopen($compiled, "w+", true);
     if (!$newfile) {
         Printemps_Exception::notice("Can not create / open template file : " . $compiled . ".");
         return false;
     }
     $writer = @fwrite($newfile, $content);
     if (!$writer) {
         Printemps_Exception::notice("Can not write template file : " . $compiled . ".");
         return false;
     }
     return $compiled;
     //return compiled file address
 }
Example #4
0
 function autoload_subfunc($class)
 {
     /** try to load Printemps key classes, these will have a prefix of `Printemps_` */
     if (preg_match("/^(Printemps_).*?/", $class)) {
         $class = str_replace("Printemps_", "", $class);
         $pathfile = APP_DEPENDENCE . 'printemps/' . $class . '.php';
     } else {
         if (preg_match("/.*?(Controller)\$/", $class)) {
             if (file_exists(APP_DEPENDENCE . 'controller/' . $class . '.php')) {
                 $pathfile = APP_DEPENDENCE . 'controller/' . $class . '.php';
             } else {
                 Printemps_Exception::halt("Can't find controller file {$class}.php - does it really exist?");
             }
         } else {
             if (preg_match("/.*?(Model)\$/", $class)) {
                 if (file_exists(APP_DEPENDENCE . 'model/' . $class . '.php')) {
                     $pathfile = APP_DEPENDENCE . 'model/' . $class . '.php';
                 } else {
                     Printemps_Exception::halt("Can't find model file {$class}.php - does it really exist?");
                 }
             } else {
                 if (file_exists(APP_DEPENDENCE . 'extension/' . $class . '.php')) {
                     $pathfile = APP_DEPENDENCE . 'extension/' . $class . '.php';
                 } else {
                     Printemps_Exception::halt("Can't find class file {$class}.php although we have tried our best.");
                 }
             }
         }
     }
     require_once $pathfile;
 }