diff --git a/app/core/Anvil.php b/app/core/Anvil.php index 5744247..cb7f7f9 100755 --- a/app/core/Anvil.php +++ b/app/core/Anvil.php @@ -34,6 +34,7 @@ class Anvil { ? $this->config->item('default_controller') : array_shift($uri_array); $start_token = $this->config->item('starting_token'); while($start_token-- > 0) { array_shift($uri_array); } + $this->request->uri_array = $uri_array; $cc_name = ''; if(!file_exists(APP_ROOT.'/controllers/'.$class_name.'_controller.php')) { $class_name = $this->config->item('default_controller'); diff --git a/app/core/Controller.php b/app/core/Controller.php index 9d4c774..16dd43d 100755 --- a/app/core/Controller.php +++ b/app/core/Controller.php @@ -27,6 +27,21 @@ class Controller { } } + public function load_helpers($helper=NULL) { + $this->load_helper($helper); + } + public function load_helper($helper=NULL) { + // All helpers end with '_helper' + if(is_array($helper)) { + foreach($helper as $k=>$m) { + $helper[$k]=$m."_helper"; + } + } else { + $helper.="_helper"; + } + $this->_load_files($helper, "helpers"); + } + public function load_models($model=NULL) { $this->load_model($model); } diff --git a/app/core/Request.php b/app/core/Request.php index d0f1f1a..ad0a604 100755 --- a/app/core/Request.php +++ b/app/core/Request.php @@ -11,6 +11,7 @@ class Request { public $server; public $uri_array; + public $original_uri_array; private $_anvil; @@ -19,6 +20,7 @@ class Request { public function __construct($a) { $this->_anvil = $a; $this->createFromGlobals(); + $this->clearFlashdata(); } public function createFromGlobals() { @@ -32,6 +34,7 @@ class Request { $this->files = $_FILES; $this->server = $_SERVER; $this->uri_array = $this->uriToArray(); + $this->original_uri_array = $this->uri_array; } /** Is this an HTTPS request? */ @@ -71,7 +74,11 @@ class Request { } public function process_data($index=NULL, $xss_clean=FALSE) { - $request_vars = (array)$this->json(); + if(count($_FILES) > 0) { + $request_vars = $_POST; + } else { + $request_vars = (array)$this->json(); + } if($index==NULL && !empty($request_vars)) { $post = array(); foreach(array_keys($request_vars) as $key) { @@ -115,6 +122,23 @@ class Request { $this->setCookie($key, '', time()-3600*24*365); } + public function setFlashdata($key, $val) { + return $this->setCookie('flashdata_'.$key, $val); + } + + public function getFlashdata($key) { + if(!isset($this->cookie['flashdata_'.$key])) { return false; } + return $this->cookie['flashdata_'.$key]; + } + + public function clearFlashdata() { + foreach($this->cookie as $k => $v) { + if(strpos($k, 'flashdata_') !== FALSE) { + $this->clearCookie($k); + } + } + } + /** * URI Parsing Functions */ diff --git a/app/core/Response.php b/app/core/Response.php index ebb956e..099b864 100644 --- a/app/core/Response.php +++ b/app/core/Response.php @@ -7,6 +7,16 @@ class Response { $this->_anvil = $a; } + public function badrequest($txt="Bad Request") { + header('HTTP/1.0 400 Bad Request'); + echo $txt; + } + + public function notfound($txt="Page Not Found") { + header('HTTP/1.0 404 Not Found'); + echo $txt; + } + public function redirect($url) { header('Location: '.$url); } diff --git a/app/libraries/sqlite_library.php b/app/libraries/sqlite_library.php index a3f4cdb..39bdb3a 100644 --- a/app/libraries/sqlite_library.php +++ b/app/libraries/sqlite_library.php @@ -1,96 +1,306 @@ open_db(); - } - } - - function open_db() { - $this->db_file_name = APP_ROOT.$this->config_db_name; - $this->handle = new SQLite3($this->db_file_name); - } + function __construct($no_open=FALSE) { + if($no_open===FALSE) { + $this->open_db(); + } + } - function query($query, $escape=TRUE) { - $do_query = ($escape===TRUE)?$this->handle->escapeString($query):$query; - $this->result = $this->handle->query($do_query); - return $this->result; - } + function open_db() { + $this->db_file_name = APP_ROOT.$this->config_db_name; + $this->handle = new SQLite3($this->db_file_name); + } - function select($colnames) { - $colnames=(is_array($colnames)?$colnames:array($colnames)); - $this->sel_cols = $colnames; - } + function lastId($table) { + $r = $this->handle->query('SELECT MAX(id) FROM '.$table); + $ret = $this->fetch_array($r); + $ret = array_shift($ret); + $ret = $ret['MAX(id)']; + if(empty($ret)) { return 0; } + return $ret; + } - function where(array $where_arr) { - $this->where_arr = $where_arr; - } + function query($query, $escape=TRUE) { + $do_query = ($escape===TRUE)?$this->handle->escapeString($query):$query; + $this->result = $this->handle->query($do_query); + return $this;//$this->result; + } - function get($tablename) { - // Build the 'SELECT' part of the query - $select_q= "SELECT "; - $num_sel_cols = count($this->sel_cols); - if($num_sel_cols == 0) { - $select_q.="* "; - } else { - foreach($this->sel_cols as $a_col) { - $select_q.=$a_col; - if(--$num_sel_cols > 0) - $select_q.=", "; - } - } - // Build the 'FROM' part of the query - $from_q = "FROM ".$tablename." "; - // Build the 'WHERE' part of the query - $where_q = ""; - $num_where_arr = count($this->where_arr); - if($num_where_arr > 0) { - $where_q = "WHERE "; - foreach($this->where_arr as $a_col => $a_where) { - $where_q.=$a_col." = '".$a_where."' "; - if(--$num_where_arr > 0) - $where_q.="AND "; - } - } - return $this->query($select_q.$from_q.$where_q); - } + function select($colnames) { + $colnames=(is_array($colnames)?$colnames:array($colnames)); + $this->sel_cols = $colnames; + return $this; + } - function fetch_array($res=NULL) { - $res=(isset($res)?$res:$this->result); - $i = 0; - while($resx = $res->fetchArray(SQLITE3_ASSOC)) { - $ret_arr[] = $resx; - } - return $ret_arr; - } + function like(array $like_arr) { + $this->like_arr = $like_arr; + return $this; + } - function insert($tablename, array $val_arr) { - $ins_q = "INSERT INTO ".$tablename; - $num_cols = count($val_arr); - if($num_cols <= 0) { return false; } + function likeOr(array $like_arr) { + $this->or_like_arr = $like_arr; + return $this; + } - $ins_col1 = "("; - $ins_col2 = " VALUES ("; - foreach($val_arr as $col_n => $val) { - $ins_col1 .= $col_n; - $ins_col2 .= "\"".$val."\""; - if(--$num_cols > 0) { - $ins_col1 .= ", "; - $ins_col2 .= ", "; - } - } - $ins_col1 .= ")"; - $ins_col2 .= ")"; - return $this->query($ins_q.$ins_col1.$ins_col2); - } + function where(array $where_arr) { + $this->where_arr = $where_arr; + return $this; + } + + function whereOr(array $where_arr) { + $this->or_where_arr = $where_arr; + return $this; + } + + function order($colname, $ord='DESC') { + $this->order_qry = ' ORDER BY '.$colname.' '.$ord; + return $this; + } + + function limit($num, $offset=0) { + $this->limit = $num; + $this->offset = $offset; + } + + function get($tablename) { + // Build the 'SELECT' part of the query + $select_q= 'SELECT '; + $num_sel_cols = count($this->sel_cols); + if($num_sel_cols == 0) { + $select_q.='* '; + } else { + foreach($this->sel_cols as $a_col) { + $select_q.=$a_col; + if(--$num_sel_cols > 0) + $select_q.=', '; + } + } + // Build the 'FROM' part of the query + $from_q = 'FROM '.$tablename.' '; + // Build the 'WHERE' part of the query + $where_q = ''; + $bind_arr = array(); + $num_where_arr = count($this->where_arr); + if($num_where_arr > 0) { + $where_q = 'WHERE '; + foreach($this->where_arr as $a_col => $a_where) { + if(is_array($a_where)) { + $num_where_subarr = count($a_where); + foreach($a_where as $a) { + $where_q.=$a_col.' = ? '; + $bind_arr[]=$a; + if(--$num_where_subarr > 0) { + $where_q.='AND '; + } + } + } else { + $where_q.=$a_col.' = ? '; + $bind_arr[]=$a_where; + if(--$num_where_arr > 0) { + $where_q.='AND '; + } + } + } + } + $num_where_arr = count($this->or_where_arr); + if($num_where_arr > 0) { + if(empty($where_q)) { + $where_q = 'WHERE '; + } else { + $where_q = 'OR '; + } + foreach($this->where_arr as $a_col => $a_where) { + if(is_array($a_where)) { + $num_where_subarr = count($a_where); + foreach($a_where as $a) { + $where_q.=$a_col.' = ? '; + $bind_arr[]=$a; + if(--$num_where_subarr > 0) { + $where_q.='OR '; + } + } + } else { + $where_q.=$a_col.' = ? '; + $bind_arr[]=$a_where; + if(--$num_where_arr > 0) { + $where_q.='OR '; + } + } + } + } + $num_where_arr = count($this->like_arr); + if($num_where_arr > 0) { + if(empty($where_q)) { + $where_q = 'WHERE '; + } else { + $where_q = 'AND '; + } + foreach($this->like_arr as $a_col => $a_like) { + if(is_array($a_like)) { + $num_like_subarr = count($a_like); + foreach($a_like as $a) { + $where_q.=$a_col.' LIKE ? '; + $bind_arr[]='%'.$a.'%'; + if(--$num_like_subarr > 0) { + $where_q.='AND '; + } + } + } else { + $where_q.=$a_col.' LIKE ? '; + $bind_arr[]='%'.$a_like.'%'; + if(--$num_like_arr > 0) { + $where_q.='AND '; + } + } + } + } + $num_where_arr = count($this->or_like_arr); + if($num_where_arr > 0) { + if(empty($where_q)) { + $where_q = 'WHERE '; + } else { + $where_q = 'OR '; + } + foreach($this->or_like_arr as $a_col => $a_like) { + if(is_array($a_like)) { + $num_like_subarr = count($a_like); + foreach($a_like as $a) { + $where_q.=$a_col.' LIKE ? '; + $bind_arr[]='%'.$a.'%'; + if(--$num_like_subarr > 0) { + $where_q.='OR '; + } + } + } else { + $where_q.=$a_col.' LIKE ? '; + $bind_arr[]='%'.$a_like.'%'; + if(--$num_like_arr > 0) { + $where_q.='OR '; + } + } + } + } + $st = $this->handle->prepare($select_q.$from_q.$where_q); + $t_cnt = 1; + foreach($bind_arr as $val) { + $st->bindParam($t_cnt, $val); + $t_cnt++; + } + $order_q = $this->order_qry; + $limit_q = ''; + if($this->limit > -1) { + $limit_q = ' LIMIT '.$this->limit.', '.$this->offset; + $this->limit = -1; + $this->offset = 0; + } + $this->where_arr = array(); + $this->order_qry = ''; + $this->last_query = $select_q.$from_q.$where_q.$order_q.$limit_q; + $this->result = $st->execute(); + return $this; + } + + function fetch_array($res=NULL) { + $res=(isset($res)?$res:$this->result); + $i = 0; + $ret_arr = array(); + while($resx = $res->fetchArray(SQLITE3_ASSOC)) { + $ret_arr[] = $resx; + } + return $ret_arr; + } + + function insert($tablename, array $val_arr) { + $ins_q = 'INSERT INTO '.$tablename; + $ins_col1 = '('; + $ins_col2 = ' VALUES ('; + $num_cols = count($val_arr); + if($num_cols <= 0) { return false; } + foreach($val_arr as $col_n => $val) { + $ins_col1 .= $col_n; + $ins_col2 .= ':'.$col_n; + if(--$num_cols > 0) { + $ins_col1 .= ", "; + $ins_col2 .= ", "; + } + } + $ins_col1 .= ")"; + $ins_col2 .= ")"; + $st = $this->handle->prepare($ins_q.$ins_col1.$ins_col2); + foreach($val_arr as $col_n => $val) { + $st->bindValue(':'.$col_n, $val); + } + $this->last_query = $ins_q.$ins_col1.$ins_col2; + $this->result = $st->execute(); + return $this; + } + + function update($tablename, array $val_arr) { + $upd_q = 'UPDATE '.$tablename; + // Build the 'SET' part of the query + $set_q = ' SET '; + $num_set_arr = count($val_arr); + $bind_set_arr = array(); + if($num_set_arr > 0) { + foreach($val_arr as $a_col => $a_set) { + if(is_array($a_set) && isset($a_set['val'])) { + if(isset($a_set['query']) && $a_set['query'] == 'raw') { + $set_q.=$a_col.' = '.$a_set['val']; + } else { + $set_q.=$a_col.' = ?'; + $bind_set_arr[]=$a_set['val']; + } + if(--$num_set_arr > 0) { + $set_q.='AND '; + } + } else { + $set_q.=$a_col.' = ?'; + $bind_set_arr[]=$a_set; + } + } + } + + // Build the 'WHERE' part of the query + $where_q = ''; + $num_where_arr = count($this->where_arr); + $bind_arr = array(); + if($num_where_arr > 0) { + $where_q = ' WHERE '; + foreach($this->where_arr as $a_col => $a_where) { + $where_q.=$a_col.' = ? '; + $bind_arr[]=$a_where; + if(--$num_where_arr > 0) { + $where_q.='AND '; + } + } + } + $st = $this->handle->prepare($upd_q.$set_q.$where_q); + $t_cnt = 1; + foreach($bind_set_arr as $val) { + $st->bindParam($t_cnt++, $val); + } + foreach($bind_arr as $val) { + $st->bindParam($t_cnt++, $val); + } + $this->last_query = $upd_q.$set_q.$where_q; + $this->result = $st->execute(); + return $this; + } }