/** * * @param Database_Query_Builder_Select $query */ public function apply_filters(&$query) { $profiler = Profiler::start('WebDB', get_class() . '::' . __METHOD__); foreach ($this->_filters as $filter) { // 'Raw' filters don't require translation if ($filter['raw'] === TRUE) { $col_name = $this->get_name() . '.' . $filter['column']; $query->where($col_name, $filter['operator'], $filter['value']); continue; } $column = $this->_columns[$filter['column']]; $filter['column'] = $this->join_for($column, $query); // LIKE or NOT LIKE if ($filter['operator'] == 'like' or $filter['operator'] == 'not like') { $filter['value'] = '%' . $filter['value'] . '%'; $filter['column'] = DB::expr('CONVERT(' . $filter['column'] . ', CHAR)'); } // IS EMPTY if ($filter['operator'] == 'empty') { $query->where($filter['column'], 'IS', NULL); $query->or_where($filter['column'], '=', ''); $filter['column'] = ''; } // IS NOT EMPTY if ($filter['operator'] == 'not empty') { $query->where($filter['column'], 'IS NOT', NULL); $query->and_where($filter['column'], '!=', ''); $filter['column'] = ''; } if (!empty($filter['column'])) { $query->where($filter['column'], $filter['operator'], $filter['value']); } } // end foreach filter Profiler::stop($profiler); }
/** * Get an array of permissions for the current user. * * @return array */ public function get_permissions() { $default_permissions = array(array('database_name' => '*', 'table_name' => '*', 'column_names' => '*', 'where_clause' => NULL, 'permission' => '*', 'identifier' => '*')); $config = Kohana::$config->load('webdb'); // See if WebDB permissions are being used. if (!isset($config->permissions) or empty($config->permissions['table'])) { return $default_permissions; } // Fully-qualify the database name. $db_name = ''; if (!empty($config->permissions['database'])) { $db_name = $config->permissions['database'] . '.'; } // For individual permissions tables per database, see if the // permissions table exists in the current database. if (empty($db_name) and !empty($config->permissions['table'])) { if ($current_db = $this->get_database()) { if (!in_array($config->permissions['table'], $current_db->list_tables())) { return $default_permissions; } } } // Finally, fetch the permissions rows. $query = new Database_Query_Builder_Select(); $query->from($db_name . $config->permissions['table']); $query->where('identifier', 'IN', array(Auth::instance()->get_user(), '*')); $rows = $query->execute($this->_db)->as_array(); return $rows; }
/** * Get a single row as an associative array. * * @param integer $id The ID of the row to get. * @return array */ public function get_row($id) { $query = new Database_Query_Builder_Select(); $query->from($this->get_name()); $query->limit(1); $pk_column = $this->get_pk_column(); $pk_name = !$pk_column ? 'id' : $pk_column->get_name(); $query->where($pk_name, '=', $id); $row = $query->execute($this->_db)->current(); return $row; }
/** * Get an array of permissions for the current user. * * @return array */ public function get_permissions() { $default_permissions = array(array('database_name' => '*', 'table_name' => '*', 'column_names' => '*', 'where_clause' => NULL, 'permission' => '*', 'identifier' => '*')); $config = Kohana::config('webdb'); if (!isset($config->permissions) || empty($config->permissions['table'])) { return $default_permissions; } $query = new Database_Query_Builder_Select(); $query->from($config['database'] . '.' . $config['table']); $query->where('identifier', 'IN', array(Auth::instance()->get_user(), '*')); $rows = $query->execute($this->_db)->as_array(); return $rows; }