예제 #1
0
파일: init.php 프로젝트: niceboy120/crude
 /**
  * Load database configuration.
  *
  * @return  bool  returns true on success or sets error messages and returns false.
  */
 public static function database()
 {
     // load database config
     if (!\Config::load('db', true)) {
         Error::set(CRUDE_ERROR, 'Fuel database configuration file not found.');
         Error::set(CRUDE_SOLUTION, 'Check that the database configuration file <code>APPPATH' . DS . 'config' . DS . 'db.php</code> exists and is properly formatted. See ' . \Html::anchor('http://fuelphp.com/docs/classes/database/introduction.html', 'Fuel documentation', array('target' => '_blank')));
         return false;
     }
     // check database connection. Thanks, Jelmer.
     try {
         @\Database_Connection::instance()->connect();
     } catch (\Database_Exception $e) {
         // can't seem to properly catch database authentication errors
         // hack to trap authentication error. there are probably other errors involved here.
         $msg = $e->getMessage();
         if (empty($msg)) {
             $msg = 'Access to database <code>' . \Config::get('db.' . \Config::get('environment') . '.connection.database') . '</code> was denied.';
         }
         $msg = str_replace('\'', '"', $msg);
         Error::set(CRUDE_FUEL_ERR, $msg);
         Error::set(CRUDE_SOLUTION, 'Check that the database configuration file <code>APPPATH' . DS . 'config' . DS . 'db.php</code> contains the correct information to connect to your database. See ' . \Html::anchor('http://fuelphp.com/docs/classes/database/introduction.html', 'Fuel documentation', array('target' => '_blank')));
         return false;
     }
     // check that tables exist in the database
     $tables = \DB::list_tables();
     if (empty($tables)) {
         Error::set(CRUDE_ERROR, 'No tables found in database <code>' . \Config::get('db.' . \Config::get('environment') . '.connection.database') . '.</code>');
         Error::set(CRUDE_SOLUTION, 'There must be at least one table in the configured database for Crude CRUD to work.');
         return false;
     }
     return true;
 }
예제 #2
0
 /**
  * Compile the SQL partial for a JOIN statement and return it.
  *
  * @param   mixed  Database instance or instance name
  * @return  string
  */
 public function compile($db = null)
 {
     if (!$db instanceof \Database_Connection) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     if ($this->_type) {
         $sql = strtoupper($this->_type) . ' JOIN';
     } else {
         $sql = 'JOIN';
     }
     // Quote the table name that is being joined
     $sql .= ' ' . $db->quote_table($this->_table) . ' ON ';
     $conditions = array();
     foreach ($this->_on as $condition) {
         // Split the condition
         list($c1, $op, $c2) = $condition;
         if ($op) {
             // Make the operator uppercase and spaced
             $op = ' ' . strtoupper($op);
         }
         // Quote each of the identifiers used for the condition
         $conditions[] = $db->quote_identifier($c1) . $op . ' ' . $db->quote_identifier($c2);
     }
     // Concat the conditions "... AND ..."
     $sql .= '(' . implode(' AND ', $conditions) . ')';
     return $sql;
 }
예제 #3
0
 public static function _init()
 {
     \Config::load('debtsolv', 'debtsolv');
     static::$_debtsolv_database = \Config::get('debtsolv.debtsolv_database', static::$_debtsolv_database);
     static::$_leadpool_database = \Config::get('debtsolv.leadpool_database', static::$_leadpool_database);
     static::$_connection = \Database_Connection::instance('Debtsolv', \Config::get('debtsolv.connection', static::$_connection));
 }
예제 #4
0
 /**
  * Compile the SQL query and return it.
  *
  * @param   mixed  Database instance or instance name
  * @return  string
  */
 public function compile($db = null)
 {
     if (!$db instanceof \Database_Connection) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     // Start an update query
     $query = 'UPDATE ' . $db->quote_table($this->_table);
     if (!empty($this->_join)) {
         // Add tables to join
         $query .= ' ' . $this->_compile_join($db, $this->_join);
     }
     // Add the columns to update
     $query .= ' SET ' . $this->_compile_set($db, $this->_set);
     if (!empty($this->_where)) {
         // Add selection conditions
         $query .= ' WHERE ' . $this->_compile_conditions($db, $this->_where);
     }
     if (!empty($this->_order_by)) {
         // Add sorting
         $query .= ' ' . $this->_compile_order_by($db, $this->_order_by);
     }
     if ($this->_limit !== NULL && substr($db->_db_type, 0, 6) !== 'sqlite') {
         // Add limiting
         $query .= ' LIMIT ' . $this->_limit;
     }
     return $query;
 }
예제 #5
0
파일: query.php 프로젝트: ClixLtd/pccupload
 private function get_database_results($id)
 {
     $database_query = Model_Database_Query::find($id);
     $config = array('type' => 'pdo', 'connection' => array('dsn' => ($database_query->database_servers->type == 'mysql' ? 'mysql' : 'dblib') . ':host=' . $database_query->database_servers->hostname . ($database_query->database_servers->type == 'mysql' ? ';port=' : ':') . $database_query->database_servers->port . ';dbname=' . $database_query->database, 'username' => $database_query->username == '' ? $database_query->database_servers->username : $database_query->username, 'password' => $database_query->password == '' ? $database_query->database_servers->password : $database_query->password, 'persistent' => false), 'Identifier' => '', 'Charset' => '');
     $remote_connection = Database_Connection::instance('runQuery' . $database_query->database_servers->hostname, $config);
     $results = DB::query($database_query->query)->cached($database_query->cache_time)->execute($remote_connection);
     return $results->as_array();
 }
예제 #6
0
 public function execute($db = NULL, $as_object = FALSE)
 {
     if (!is_object($db)) {
         $db = \Database_Connection::instance();
     }
     $type = strtoupper(array_search(get_class($this->command), $this->commands));
     $return = $db->query($type, $this, $as_object);
     return $return;
 }
예제 #7
0
 /**
  * Setup the test
  */
 public function setup()
 {
     \Package::load('hybrid');
     $acl = Acl::make('mock');
     $acl->add_roles('guest');
     $acl->add_resources(array('blog', 'forum', 'news'));
     $acl->allow('guest', array('blog'), 'view');
     $acl->deny('guest', 'forum');
     try {
         \Database_Connection::instance(\Config::get('db.active'))->connect();
     } catch (\Database_Exception $e) {
         // in case when list table is not supported by Database Connection
         $this->markTestSkipped('User table is not available');
     }
 }
예제 #8
0
 public function action_addProduct()
 {
     $validator = $this->addModifyValidator();
     $message = "";
     $categories_db = Model_Category::find('all');
     foreach ($categories_db as $category) {
         $categories[$category->id] = $category->name;
     }
     $category_id = Input::post('category_id');
     $description = Input::post('description');
     $image = Input::post('image');
     $doit = Input::post('doit');
     if (!is_null($doit)) {
         try {
             if (!$validator->run(Input::post())) {
                 throw new Exception();
             }
             $valid = (object) $validator->validated();
             $product = Model_Product::forge();
             $product->name = $valid->name;
             $product->price = $valid->price;
             $product->category_id = $category_id;
             $product->description = $description;
             $product->image = $image;
             $product->save();
             return Response::redirect("/home/productInfo/{$product->id}");
             /* 
                 if (strlen($name) < 3) {
                   throw new Exception("name must have at least 3 chars");
                 }
                 if (!preg_match($pattern, $price)) {
                   throw new Exception("illegal price format");
                 }*/
         } catch (Database_Exception $ex) {
             // this gets the message without the extra info
             list(, , $message) = Database_Connection::instance()->error_info();
         } catch (Exception $ex) {
             $message = $ex->getMessage();
         }
     }
     $data = ['message' => $message, 'categories' => $categories];
     $view = View::forge('admin/addProduct.tpl', $data);
     $view->set('validator', $validator, false);
     return Response::forge($view);
 }
 function initialize()
 {
     define('DOCROOT', realpath(__DIR__ . '/public/') . DIRECTORY_SEPARATOR);
     define('APPPATH', realpath(__DIR__ . '/fuel/app/') . DIRECTORY_SEPARATOR);
     define('PKGPATH', realpath(__DIR__ . '/fuel/packages/') . DIRECTORY_SEPARATOR);
     define('COREPATH', realpath(__DIR__ . '/fuel/core/') . DIRECTORY_SEPARATOR);
     defined('FUEL_START_TIME') or define('FUEL_START_TIME', microtime(true));
     defined('FUEL_START_MEM') or define('FUEL_START_MEM', memory_get_usage());
     if (!file_exists(COREPATH . 'classes' . DIRECTORY_SEPARATOR . 'autoloader.php')) {
         die('No composer autoloader found. Please run composer to install the FuelPHP framework dependencies first!');
     }
     require COREPATH . 'classes' . DIRECTORY_SEPARATOR . 'autoloader.php';
     class_alias('Fuel\\Core\\Autoloader', 'Autoloader');
     require APPPATH . 'bootstrap.php';
     require_once APPPATH . 'classes/model/Model_Author.php';
     require_once APPPATH . 'classes/model/Model_Book.php';
     $this->con = \Database_Connection::instance()->connection();
     $this->initTables();
 }
예제 #10
0
 private function _setDebtsolvDatabase()
 {
     // -- Get the Alias of the company based on Company ID
     // ---------------------------------------------------
     $result = \DB::query("SELECT\n                             alias\n                            ,active\n                           FROM\n                             clientarea_companies\n                           WHERE\n                             id = " . (int) $this->_companyID . "\n                           LIMIT 1                           \n                          ", \DB::select())->execute()->as_array();
     if (isset($result[0]['alias'])) {
         $this->_companyAlias = $result[0]['alias'];
         $this->_active = $result[0]['active'];
         \Config::load('clientarea', 'debtsolv');
         $this->_debtsolvDatabase = \Config::get('debtsolv.' . $this->_companyAlias . '.debtsolv_db', $this->_debtsolvDatabase);
         $this->_leadpoolDatabase = \Config::get('debtsolv.' . $this->_companyAlias . '.leadpool_db', $this->_leadpoolDatabase);
         $this->_connection = \Database_Connection::instance('Debtsolv', \Config::get('debtsolv.' . $this->_companyAlias . '.database', $this->_connection));
         if ($this->_connection instanceof \Database_Connection) {
             \Log::info('CLIENT AREA: Database connected for for Company ' . $this->_companyAlias . ' ID: ' . $this->_companyID . ' DS Name: ' . $this->_debtsolvDatabase);
         } else {
             \Log::error('CLIENT AREA: Failed to connect to ' . $this->_companyAlias);
         }
     } else {
         \Log::error('CLIENT AREA: Failed to connect to company ID ' . (int) $this->_companyID);
     }
 }
예제 #11
0
 /**
  * Compile the SQL query and return it.
  *
  * @param mixed $db
  *        	Database_Connection instance or instance name
  *        	
  * @return string
  */
 public function compile($db = null)
 {
     if (!$db instanceof \Database_Connection) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     // Start a deletion query
     $query = 'DELETE FROM ' . $db->quote_table($this->_table);
     if (!empty($this->_where)) {
         // Add deletion conditions
         $query .= ' WHERE ' . $this->_compile_conditions($db, $this->_where);
     }
     if (!empty($this->_order_by)) {
         // Add sorting
         $query .= ' ' . $this->_compile_order_by($db, $this->_order_by);
     }
     if ($this->_limit !== NULL && substr($db->_db_type, 0, 6) !== 'sqlite') {
         // Add limiting
         $query .= ' LIMIT ' . $this->_limit;
     }
     return $query;
 }
예제 #12
0
 /**
  * Execute the current query on the given database.
  *
  * @param   mixed    Database instance or name of instance
  * @return  object   Database_Result for SELECT queries
  * @return  mixed    the insert id for INSERT queries
  * @return  integer  number of affected rows for all other queries
  */
 public function execute($db = null)
 {
     if (!is_object($db)) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     // Compile the SQL query
     $sql = $this->compile($db);
     switch (strtoupper(substr(ltrim($sql, '('), 0, 6))) {
         case 'SELECT':
             $this->_type = \DB::SELECT;
             break;
         case 'INSERT':
         case 'CREATE':
             $this->_type = \DB::INSERT;
             break;
     }
     if ($db->caching() and !empty($this->_lifetime) and $this->_type === DB::SELECT) {
         $cache_key = empty($this->_cache_key) ? 'db.' . md5('Database_Connection::query("' . $db . '", "' . $sql . '")') : $this->_cache_key;
         if (is_string($this->_cache_key) && substr($this->_cache_key, -1) == '.') {
             $cache_key = $this->_cache_key . md5('Database_Connection::query("' . $db . '", "' . $sql . '")');
         }
         $cache = \Cache::forge($cache_key);
         try {
             $result = $cache->get();
             return new Database_Result_Cached($result, $sql, $this->_as_object);
         } catch (CacheNotFoundException $e) {
         }
     }
     // Execute the query
     \DB::$query_count++;
     $result = $db->query($this->_type, $sql, $this->_as_object);
     // Cache the result if needed
     if (isset($cache) and ($this->_cache_all or $result->count())) {
         $cache->set_expiration($this->_lifetime)->set_contents($result->as_array())->set();
     }
     return $result;
 }
예제 #13
0
파일: dbutil.php 프로젝트: wushian/MDD
 /**
  * Checks if a given table exists.
  *
  * @param   string  $table  Table name
  * @return  bool
  */
 public static function table_exists($table, $db = null)
 {
     try {
         \DB::select()->from($table)->limit(1)->execute($db ? $db : static::$connection);
         return true;
     } catch (\Database_Exception $e) {
         // check if we have a DB connection at all
         $connection = \Database_Connection::instance($db ? $db : static::$connection)->connection();
         // if no connection could be made, re throw the exception
         if (!$connection) {
             throw $e;
         }
         return false;
     }
 }
예제 #14
0
 /**
  * Compile the SQL query and return it.
  *
  * @param   mixed  $db  Database instance or instance name
  *
  * @return  string
  */
 public function compile($db = null)
 {
     if (!$db instanceof \Database_Connection) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     // Start an insertion query
     $query = 'INSERT INTO ' . $db->quote_table($this->_table);
     // Add the column names
     $query .= ' (' . implode(', ', array_map(array($db, 'quote_identifier'), $this->_columns)) . ') ';
     if (is_array($this->_values)) {
         // Callback for quoting values
         $quote = array($db, 'quote');
         $groups = array();
         foreach ($this->_values as $group) {
             foreach ($group as $i => $value) {
                 if (is_string($value) and isset($this->_parameters[$value])) {
                     // Use the parameter value
                     $group[$i] = $this->_parameters[$value];
                 }
             }
             $groups[] = '(' . implode(', ', array_map($quote, $group)) . ')';
         }
         // Add the values
         $query .= 'VALUES ' . implode(', ', $groups);
     } else {
         // Add the sub-query
         $query .= (string) $this->_values;
     }
     return $query;
 }
예제 #15
0
파일: db.php 프로젝트: novius/core
	/**
	 * Rollsback all pending transactional queries
	 *
	 *     DB::rollback_transaction();
	 *
	 * @param   string  db connection
	 * @return  void
	 */
	public static function rollback_transaction($db = null)
	{
		return \Database_Connection::instance($db)->rollback_transaction();
	}
예제 #16
0
 public function delete($cascade = null, $use_transaction = false)
 {
     // If we are using a transcation then make sure it's started
     if ($use_transaction) {
         $db = \Database_Connection::instance(static::connection(true));
         $db->start_transaction();
     }
     // Call the observers
     $this->observe('before_delete');
     // Load temporal properties.
     $timestamp_end_name = static::temporal_property('end_column');
     $mysql_timestamp = static::temporal_property('mysql_timestamp');
     // Generate the correct timestamp and save it
     $current_timestamp = $mysql_timestamp ? \Date::forge()->format('mysql') : \Date::forge()->get_timestamp();
     static::disable_primary_key_check();
     $this->{$timestamp_end_name} = $current_timestamp;
     static::enable_primary_key_check();
     // Loop through all relations and delete if we are cascading.
     $this->freeze();
     foreach ($this->relations() as $rel_name => $rel) {
         // get the cascade delete status
         $relCascade = is_null($cascade) ? $rel->cascade_delete : (bool) $cascade;
         if ($relCascade) {
             if (get_class($rel) != 'Orm\\ManyMany') {
                 // Loop through and call delete on all the models
                 foreach ($rel->get($this) as $model) {
                     $model->delete($cascade);
                 }
             }
         }
     }
     $this->unfreeze();
     parent::save();
     $this->observe('after_delete');
     // Make sure the transaction is committed if needed
     $use_transaction and $db->commit_transaction();
     return $this;
 }
 /**
  * 登録処理
  *
  * @access public
  * @param
  * @return void
  * @author ida
  */
 public function post_thanks()
 {
     if (!Security::check_token()) {
         Response::redirect('errors/doubletransmission');
     }
     try {
         $db = \Database_Connection::instance('master');
         \DB::start_transaction();
         $fieldsets = $this->getFieldsets();
         $location = $this->saveLocation($fieldsets['location']);
         $fleamarket = $this->saveFleamarket($fieldsets['fleamarket'], $location->location_id);
         $fleamarket_about = $this->saveFleamarketAbout($fieldsets['fleamarket_about'], $fleamarket->fleamarket_id);
         $this->deleteFleamarketImage($fleamarket->fleamarket_id);
         $this->saveFleamarketImage($fleamarket->fleamarket_id);
         \DB::commit_transaction();
     } catch (\Exception $e) {
         \DB::rollback_transaction();
         throw new SystemException(\Model_Error::ER00905);
     }
     $this->template->content = \ViewModel::forge('fleamarket/thanks');
 }
예제 #18
0
 /**
  * Delete current object
  *
  * @param   mixed $cascade
  *     null = use default config,
  *     bool = force/prevent cascade,
  *     array cascades only the relations that are in the array
  * @param bool $use_transaction
  *
  * @throws \Exception
  *
  * @return  Model  this instance as a new object without primary key(s)
  */
 public function delete($cascade = null, $use_transaction = false)
 {
     // New objects can't be deleted, neither can frozen
     if ($this->is_new() or $this->frozen()) {
         return false;
     }
     if ($use_transaction) {
         $db = \Database_Connection::instance(static::connection(true));
         $db->start_transaction();
     }
     try {
         $this->observe('before_delete');
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             $should_cascade = is_array($cascade) ? in_array($rel_name, $cascade) : $rel->cascade_delete;
             // Give model subclasses a chance to chip in.
             if ($should_cascade && !$this->should_cascade_delete($rel)) {
                 // The function returned false so something does not want this relation to be cascade deleted
                 $should_cascade = false;
             }
             $rel->delete($this, $this->{$rel_name}, false, $should_cascade);
         }
         $this->unfreeze();
         // Delete the model in question
         if (!$this->delete_self()) {
             return false;
         }
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             $should_cascade = is_array($cascade) ? in_array($rel_name, $cascade) : $rel->cascade_delete;
             // Give model subclasses a chance to chip in.
             if ($should_cascade && !$this->should_cascade_delete($rel)) {
                 // The function returned false so something does not want this relation to be cascade deleted
                 $should_cascade = false;
             }
             $rel->delete($this, $this->{$rel_name}, true, $should_cascade);
         }
         $this->unfreeze();
         // Perform cleanup:
         // remove from internal object cache, remove PK's, set to non saved object, remove db original values
         if (array_key_exists(get_called_class(), static::$_cached_objects) and array_key_exists(static::implode_pk($this), static::$_cached_objects[get_called_class()])) {
             unset(static::$_cached_objects[get_called_class()][static::implode_pk($this)]);
         }
         foreach ($this->primary_key() as $pk) {
             unset($this->_data[$pk]);
         }
         // remove original relations too
         foreach ($this->relations() as $rel_name => $rel) {
             $this->_original_relations[$rel_name] = $rel->singular ? null : array();
         }
         $this->_is_new = true;
         $this->_original = array();
         $this->observe('after_delete');
         $use_transaction and $db->commit_transaction();
     } catch (\Exception $e) {
         $use_transaction and $db->rollback_transaction();
         throw $e;
     }
     return $this;
 }
예제 #19
0
파일: crud.php 프로젝트: wushian/MDD
 /**
  * Count all of the rows in the table.
  *
  * @param   string  Column to count by
  * @param   bool    Whether to count only distinct rows (by column)
  * @param   array   Query where clause(s)
  * @param   string  Column to group by
  * @return  int     The number of rows OR false
  */
 public static function count($column = null, $distinct = true, $where = array(), $group_by = null)
 {
     $select = $column ?: static::primary_key();
     // Get the database group / connection
     $connection = static::get_connection();
     // Get the columns
     $columns = \DB::expr('COUNT(' . ($distinct ? 'DISTINCT ' : '') . \Database_Connection::instance($connection)->quote_identifier($select) . ') AS count_result');
     // Remove the current select and
     $query = \DB::select($columns);
     // Set from table
     $query = $query->from(static::$_table_name);
     if (!empty($where)) {
         //is_array($where) or $where = array($where);
         if (!is_array($where) and $where instanceof \Closure === false) {
             throw new \FuelException(get_called_class() . '::count where statement must be an array or a closure.');
         }
         $query = $query->where($where);
     }
     if (!empty($group_by)) {
         $result = $query->select($group_by)->group_by($group_by)->execute($connection)->as_array();
         $counts = array();
         foreach ($result as $res) {
             $counts[$res[$group_by]] = $res['count_result'];
         }
         return $counts;
     }
     $count = $query->execute($connection)->get('count_result');
     if ($count === null) {
         return false;
     }
     return (int) $count;
 }
예제 #20
0
 /**
  * Deletes the entire tree structure using the current node as starting point
  *
  * @param   mixed  $cascade
  *     null = use default config,
  *     bool = force/prevent cascade,
  *     array cascades only the relations that are in the array
  * @return  Model  this instance as a new object without primary key(s)
  */
 public function delete_tree($cascade = null, $use_transaction = false)
 {
     if ($use_transaction) {
         $db = \Database_Connection::instance(static::connection(true));
         $db->start_transaction();
     }
     // get params to avoid excessive method calls
     $left_field = static::tree_config('left_field');
     $right_field = static::tree_config('right_field');
     $pk = reset(static::$_primary_key);
     // put the entire operation in a try/catch, so we can rollback if needed
     try {
         // check if the node has children
         if ($this->has_children()) {
             // get them
             $children = $this->children()->get();
             // and delete them to
             foreach ($children as $child) {
                 if ($child->delete_tree($cascade) === false) {
                     throw new \UnexpectedValueException('delete of child node with PK "' . $child->{$pk} . '" failed.');
                 }
             }
         }
         // delete the node itself
         $result = parent::delete($cascade);
         // check if the delete was succesful
         if ($result !== false) {
             // re-index the tree
             $this->_shift_rl_values($this->{$right_field} + 1, $this->{$left_field} - $this->{$right_field} - 1);
         }
     } catch (\Exception $e) {
         $use_transaction and $db->rollback_transaction();
         throw $e;
     }
     // reset the node operation store to make sure nothings pending...
     $this->_node_operation = array();
     // and return the result
     return $result;
 }
예제 #21
0
 /**
  * Compile the SQL query and return it.
  *
  * @param mixed $db
  *        	Database_Connection instance or instance name
  *        	
  * @return string
  */
 public function compile($db = null)
 {
     if (!$db instanceof \Database_Connection) {
         // Get the database instance
         $db = \Database_Connection::instance($db);
     }
     // Callback to quote identifiers
     $quote_ident = array($db, 'quote_identifier');
     // Callback to quote tables
     $quote_table = array($db, 'quote_table');
     // Start a selection query
     $query = 'SELECT ';
     if ($this->_distinct === TRUE) {
         // Select only unique results
         $query .= 'DISTINCT ';
     }
     if (empty($this->_select)) {
         // Select all columns
         $query .= '*';
     } else {
         // Select all columns
         $query .= implode(', ', array_unique(array_map($quote_ident, $this->_select)));
     }
     if (!empty($this->_from)) {
         // Set tables to select from
         $query .= ' FROM ' . implode(', ', array_unique(array_map($quote_table, $this->_from)));
     }
     if (!empty($this->_join)) {
         // Add tables to join
         $query .= ' ' . $this->_compile_join($db, $this->_join);
     }
     if (!empty($this->_where)) {
         // Add selection conditions
         $query .= ' WHERE ' . $this->_compile_conditions($db, $this->_where);
     }
     if (!empty($this->_group_by)) {
         // Add sorting
         $query .= ' GROUP BY ' . implode(', ', array_map($quote_ident, $this->_group_by));
     }
     if (!empty($this->_having)) {
         // Add filtering conditions
         $query .= ' HAVING ' . $this->_compile_conditions($db, $this->_having);
     }
     if (!empty($this->_order_by)) {
         // Add sorting
         $query .= ' ' . $this->_compile_order_by($db, $this->_order_by);
     }
     if ($this->_limit !== NULL) {
         // Add limiting
         $query .= ' LIMIT ' . $this->_limit;
     }
     if ($this->_offset !== NULL) {
         // Add offsets
         $query .= ' OFFSET ' . $this->_offset;
     }
     return $query;
 }
예제 #22
0
 /**
  * The constructor
  *
  * @param  string  $instance
  */
 public function __construct($instance = null)
 {
     $this->_db = Database_Connection::instance($instance);
 }
예제 #23
0
 /**
  * Connection to table schema
  *
  * @param  string $table_schema table schema
  * @return bool
  */
 private static function connect($table_schema)
 {
     \Config::load('db', true);
     $active = \Config::get('db.active');
     if (\Config::get('db.' . $active . '.type') == 'pdo') {
         \Cli::write('PDO Driver not supported.', 'red');
         exit;
     }
     $config = \Config::get('db');
     $config[$config['active']]['connection']['database'] = $table_schema;
     \Config::set('db', $config);
     \Database_Connection::$instances = array();
     \Database_Connection::instance($config['active'], $config[$config['active']]);
 }
 /**
  * 登録&送信
  *
  * @access public
  * @param
  * @return void
  * @author ida
  */
 public function action_thanks()
 {
     if (!Security::check_token()) {
         \Response::redirect('errors/doubletransmission');
     }
     Asset::css('jquery-ui.min.css', array(), 'add_css');
     Asset::js('jquery-ui.min.js', array(), 'add_js');
     $input_data = $this->getInputData(true);
     $input_data['created_user'] = $this->administrator->administrator_id;
     $input_data['send_status'] = \Model_Mail_Magazine::SEND_STATUS_WAITING;
     $additional_data = $this->getAdditionalData($input_data);
     $input_data['additional_serialize_data'] = serialize($additional_data);
     try {
         $db = Database_Connection::instance('master');
         \DB::start_transaction();
         $mail_magazine = \Model_Mail_Magazine::forge();
         $mail_magazine->set($input_data)->save();
         // メルマガ対象ユーザ登録
         $query = $input_data['query'];
         $users = \DB::query($query)->execute();
         foreach ($users as $user) {
             $data = array('mail_magazine_id' => $mail_magazine->mail_magazine_id, 'user_id' => $user['user_id'], 'send_status' => \Model_Mail_Magazine_User::SEND_STATUS_WAITING, 'created_user' => $this->administrator->administrator_id);
             $mail_magazine_user = \Model_Mail_Magazine_User::forge();
             $mail_magazine_user->set($data)->save();
         }
         \DB::commit_transaction();
     } catch (\Exception $e) {
         \DB::rollback_transaction();
         throw new \SystemException(\Model_Error::ER00000);
     }
     $view_model = \ViewModel::forge('admin/mailmagazine/thanks');
     list($view_model, $replace_data) = $this->setupData($view_model, $input_data);
     // タスク実行
     $oil_path = realpath(APPPATH . '/../../') . DS;
     $param = $mail_magazine->mail_magazine_id . ' ' . $this->administrator->administrator_id;
     exec('php ' . $oil_path . 'oil refine mail_magazine ' . $param . ' > /dev/null &');
     $view_model->set('mail_magazine', $mail_magazine, true);
     $this->template->content = $view_model;
 }
예제 #25
0
 /**
  * Get the minimum of a column for the current query
  *
  * @param   string  column
  * @return  mixed   minimum value OR false
  */
 public function min($column)
 {
     is_array($column) and $column = array_shift($column);
     // Get the columns
     $columns = \DB::expr('MIN(' . \Database_Connection::instance()->table_prefix() . $this->alias . '.' . $column . ') AS min_result');
     // Remove the current select and
     $query = call_user_func('DB::select', $columns);
     // Set from table
     $query->from(array(call_user_func($this->model . '::table'), $this->alias));
     $tmp = $this->build_query($query, $columns, 'min');
     $query = $tmp['query'];
     $min = $query->execute($this->connection)->get('min_result');
     // Database_Result::get('min_result') returns a string | null
     if ($min === null) {
         return false;
     }
     return $min;
 }
예제 #26
0
 /**
  * Delete current object
  *
  * @param   mixed  $cascade
  *     null = use default config,
  *     bool = force/prevent cascade,
  *     array cascades only the relations that are in the array
  * @return  Model  this instance as a new object without primary key(s)
  */
 public function delete($cascade = null, $use_transaction = false)
 {
     // New objects can't be deleted, neither can frozen
     if ($this->is_new() or $this->frozen()) {
         return false;
     }
     if ($use_transaction) {
         $db = \Database_Connection::instance(static::connection());
         $db->start_transaction();
     }
     try {
         $this->observe('before_delete');
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             $rel->delete($this, $this->{$rel_name}, false, is_array($cascade) ? in_array($rel_name, $cascade) : $cascade);
         }
         $this->unfreeze();
         // Create the query and limit to primary key(s)
         $query = Query::forge(get_called_class(), static::connection())->limit(1);
         $primary_key = static::primary_key();
         foreach ($primary_key as $pk) {
             $query->where($pk, '=', $this->{$pk});
         }
         // Return success of update operation
         if (!$query->delete()) {
             return false;
         }
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             $rel->delete($this, $this->{$rel_name}, true, is_array($cascade) ? in_array($rel_name, $cascade) : $cascade);
         }
         $this->unfreeze();
         // Perform cleanup:
         // remove from internal object cache, remove PK's, set to non saved object, remove db original values
         if (array_key_exists(get_called_class(), static::$_cached_objects) and array_key_exists(static::implode_pk($this), static::$_cached_objects[get_called_class()])) {
             unset(static::$_cached_objects[get_called_class()][static::implode_pk($this)]);
         }
         foreach ($this->primary_key() as $pk) {
             unset($this->_data[$pk]);
         }
         $this->_is_new = true;
         $this->_original = array();
         $this->observe('after_delete');
         $use_transaction and $db->commit_transaction();
     } catch (\Exception $e) {
         $use_transaction and $db->rollback_transaction();
         throw $e;
     }
     return $this;
 }
예제 #27
0
 /**
  * Get the minimum of a column for the current query
  *
  * @param   string      $column Column which min value you want to get
  *
  * @return  bool|int    minimum value OR false
  */
 public function min($column)
 {
     is_array($column) and $column = array_shift($column);
     // Get the columns
     $columns = \DB::expr('MIN(' . \Database_Connection::instance($this->connection)->quote_identifier($this->alias . '.' . $column) . ') AS min_result');
     // Remove the current select and
     $query = \DB::select($columns);
     // Set from table
     $query->from(array($this->_table(), $this->alias));
     $tmp = $this->build_query($query, $columns, 'min');
     $query = $tmp['query'];
     $min = $query->execute($this->connection)->get('min_result');
     // Database_Result::get('min_result') returns a string | null
     if ($min === null) {
         return false;
     }
     return $min;
 }
 /**
  * 更新する
  *
  * @access public
  * @param array $values
  * @param array $where
  * @return bool
  * @author ida
  */
 public static function updateStatus($values = array(), $where = array())
 {
     $result = false;
     if (!empty($values) && !empty($where)) {
         $db = \Database_Connection::instance('master');
         $values['updated_at'] = \Date::forge()->format('mysql');
         $result = \DB::update(self::$_table_name)->set($values)->where($where)->execute($db);
     }
     return $result;
 }
 /**
  * 完了画面
  *
  * @access public
  * @param
  * @return void
  * @author kobayashi
  */
 public function post_thanks()
 {
     if (!Security::check_token()) {
         \Response::redirect('errors/doubletransmission');
     }
     try {
         $db = \Database_Connection::instance('master');
         $db->start_transaction();
         $fleamarket = $this->registerFleamarket();
         $files = $this->storeImages($fleamarket->fleamarket_id);
         if ($files) {
             $this->registerFleamarketImage($fleamarket, $files);
         }
         $this->removeFleamarketImages();
         $this->registerFleamarketAbout($fleamarket);
         $this->registerFleamarketEntryStyle($fleamarket);
         $db->commit_transaction();
     } catch (Exception $e) {
         $db->rollback_transaction();
         throw $e;
     }
     $view = View::forge('admin/fleamarket/thanks');
     $this->template->content = $view;
 }
예제 #30
0
파일: soft.php 프로젝트: ClixLtd/pccupload
 /**
  * Updates the defined deleted_field with a current timestamp rather than
  * deleting.
  *
  * TODO: This method needs a major cleanup but can't be done really until the refactoring starts. This is currently
  * not maintainable at all,
  *
  * @param $cascade         boolean
  * @param $use_transaction boolean
  *
  * @return boolean
  */
 public function delete($cascade = null, $use_transaction = false)
 {
     // New objects can't be deleted, neither can frozen
     if ($this->is_new() or $this->frozen()) {
         return false;
     }
     if ($use_transaction) {
         $db = \Database_Connection::instance(static::connection(true));
         $db->start_transaction();
     }
     try {
         $this->observe('before_delete');
         $deleted_column = static::soft_delete_property('deleted_field', static::$_default_field_name);
         $mysql_timestamp = static::soft_delete_property('mysql_timestamp', static::$_default_mysql_timestamp);
         //Call the observers
         $this->observe('before_delete');
         //Generate the correct timestamp and save it
         $this->{$deleted_column} = $mysql_timestamp ? \Date::forge()->format('mysql') : \Date::forge()->get_timestamp();
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             $rel->delete($this, $this->{$rel_name}, false, is_array($cascade) ? in_array($rel_name, $cascade) : $cascade);
         }
         $this->unfreeze();
         // Return success of update operation
         if (!$this->save()) {
             return false;
         }
         $this->freeze();
         foreach ($this->relations() as $rel_name => $rel) {
             //Give model subclasses a chance to chip in.
             if (!$this->should_cascade_delete($rel)) {
                 //The function returned false so something does not want this relation to be cascade deleted
                 $should_cascade = false;
             } else {
                 $should_cascade = is_array($cascade) ? in_array($rel_name, $cascade) : $cascade;
             }
             $rel->delete($this, $this->{$rel_name}, true, $should_cascade);
         }
         $this->unfreeze();
         // Perform cleanup:
         // remove from internal object cache, remove PK's, set to non saved object, remove db original values
         if (array_key_exists(get_called_class(), static::$_cached_objects) and array_key_exists(static::implode_pk($this), static::$_cached_objects[get_called_class()])) {
             unset(static::$_cached_objects[get_called_class()][static::implode_pk($this)]);
         }
         foreach ($this->primary_key() as $pk) {
             unset($this->_data[$pk]);
         }
         // remove original relations too
         foreach ($this->relations() as $rel_name => $rel) {
             $this->_original_relations[$rel_name] = $rel->singular ? null : array();
         }
         $this->_is_new = true;
         $this->_original = array();
         $this->observe('after_delete');
         $use_transaction and $db->commit_transaction();
     } catch (\Exception $e) {
         $use_transaction and $db->rollback_transaction();
         throw $e;
     }
     return $this;
 }