コード例 #1
0
ファイル: object.php プロジェクト: BillVGN/PortalPRP
	public function store($updateNulls = false)
	{
		if ($this->exists())
		{
			$ret = static::$db->updateObject(static::$tbl, $this, static::$tbl_keys, $updateNulls);
		}
		else
		{
			$ret = static::$db->insertObject(static::$tbl, $this, static::$tbl_keys);
		}

		if (static::$locked)
		{
			$this->unlock();
		}

		if (!$ret)
		{
			$this->setError(get_class($this) . '::store failed - ' . static::$db->getErrorMsg());

			return false;
		}

		$this->_exists = true;

		return true;
	}
コード例 #2
0
ファイル: DataMapper.php プロジェクト: beingsane/quickcontent
 /**
  * Do update action.
  *
  * @param mixed $dataset    Data set contain data we want to update.
  * @param array $condFields The where condition tell us record exists or not, if not set,
  *                          will use primary key instead.
  *
  * @throws \Exception
  * @return  mixed Updated data set.
  */
 protected function doUpdate($dataset, array $condFields)
 {
     $this->db->transactionStart(true);
     try {
         foreach ($dataset as &$data) {
             $entity = new Entity($this->getFields($this->table), $data);
             $this->db->updateObject($this->table, $entity, $condFields);
         }
     } catch (\Exception $e) {
         $this->db->transactionRollback(true);
         throw $e;
     }
     $this->db->transactionCommit(true);
     return $dataset;
 }
コード例 #3
0
ファイル: table.php プロジェクト: deenison/joomla-cms
 /**
  * Method to store a row in the database from the FOFTable instance properties.
  * If a primary key value is set the row with that primary key value will be
  * updated with the instance property values.  If no primary key value is set
  * a new row will be inserted into the database with the properties from the
  * FOFTable instance.
  *
  * @param   boolean  $updateNulls  True to update fields even if they are null.
  *
  * @return  boolean  True on success.
  */
 public function store($updateNulls = false)
 {
     if (!$this->onBeforeStore($updateNulls)) {
         return false;
     }
     $k = $this->_tbl_key;
     if ($this->{$k} == 0) {
         $this->{$k} = null;
     }
     // Create the object used for inserting/updating data to the database
     $fields = $this->getTableFields();
     $properties = $this->getKnownFields();
     $keys = array();
     foreach ($properties as $property) {
         // 'input' property is a reserved name
         if (isset($fields[$property])) {
             $keys[] = $property;
         }
     }
     $updateObject = array();
     foreach ($keys as $key) {
         $updateObject[$key] = $this->{$key};
     }
     $updateObject = (object) $updateObject;
     // If a primary key exists update the object, otherwise insert it.
     if ($this->{$k}) {
         $result = $this->_db->updateObject($this->_tbl, $updateObject, $this->_tbl_key, $updateNulls);
     } else {
         $result = $this->_db->insertObject($this->_tbl, $updateObject, $this->_tbl_key);
     }
     if ($result !== true) {
         $this->setError($this->_db->getErrorMsg());
         return false;
     }
     $this->bind($updateObject);
     if ($this->_locked) {
         $this->_unlock();
     }
     $result = $this->onAfterStore();
     return $result;
 }
コード例 #4
0
ファイル: table.php プロジェクト: ranwaldo/joomla-platform
 /**
  * Method to store a row in the database from the JTable instance properties.
  * If a primary key value is set the row with that primary key value will be
  * updated with the instance property values.  If no primary key value is set
  * a new row will be inserted into the database with the properties from the
  * JTable instance.
  *
  * @param   boolean  $updateNulls  True to update fields even if they are null.
  *
  * @return  boolean  True on success.
  *
  * @link    http://docs.joomla.org/JTable/store
  * @since   11.1
  */
 public function store($updateNulls = false)
 {
     // Initialise variables.
     $k = $this->_tbl_key;
     if (!empty($this->asset_id)) {
         $currentAssetId = $this->asset_id;
     }
     // The asset id field is managed privately by this class.
     if ($this->_trackAssets) {
         unset($this->asset_id);
     }
     // If a primary key exists update the object, otherwise insert it.
     if ($this->{$k}) {
         $this->_db->updateObject($this->_tbl, $this, $this->_tbl_key, $updateNulls);
     } else {
         $this->_db->insertObject($this->_tbl, $this, $this->_tbl_key);
     }
     // If the table is not set to track assets return true.
     if (!$this->_trackAssets) {
         return true;
     }
     if ($this->_locked) {
         $this->_unlock();
     }
     /*
      * Asset Tracking
      */
     $parentId = $this->_getAssetParentId();
     $name = $this->_getAssetName();
     $title = $this->_getAssetTitle();
     $asset = self::getInstance('Asset', 'JTable', array('dbo' => $this->getDbo()));
     $asset->loadByName($name);
     // Re-inject the asset id.
     $this->asset_id = $asset->id;
     // Check for an error.
     $error = $asset->getError();
     if ($error) {
         $this->setError($error);
         return false;
     }
     // Specify how a new or moved node asset is inserted into the tree.
     if (empty($this->asset_id) || $asset->parent_id != $parentId) {
         $asset->setLocation($parentId, 'last-child');
     }
     // Prepare the asset to be stored.
     $asset->parent_id = $parentId;
     $asset->name = $name;
     $asset->title = $title;
     if ($this->_rules instanceof JAccessRules) {
         $asset->rules = (string) $this->_rules;
     }
     if (!$asset->check() || !$asset->store($updateNulls)) {
         $this->setError($asset->getError());
         return false;
     }
     // Create an asset_id or heal one that is corrupted.
     if (empty($this->asset_id) || $currentAssetId != $this->asset_id && !empty($this->asset_id)) {
         // Update the asset_id field in this table.
         $this->asset_id = (int) $asset->id;
         $query = $this->_db->getQuery(true);
         $query->update($this->_db->quoteName($this->_tbl));
         $query->set('asset_id = ' . (int) $this->asset_id);
         $query->where($this->_db->quoteName($k) . ' = ' . (int) $this->{$k});
         $this->_db->setQuery($query);
         $this->_db->execute();
     }
     return true;
 }
コード例 #5
0
ファイル: table.php プロジェクト: klas/joomla-cms
 /**
  * Method to store a row in the database from the JTable instance properties.
  * If a primary key value is set the row with that primary key value will be
  * updated with the instance property values.  If no primary key value is set
  * a new row will be inserted into the database with the properties from the
  * JTable instance.
  *
  * @param   boolean  $updateNulls  True to update fields even if they are null.
  *
  * @return  boolean  True on success.
  *
  * @link    https://docs.joomla.org/JTable/store
  * @since   11.1
  */
 public function store($updateNulls = false)
 {
     $result = true;
     $k = $this->_tbl_keys;
     // Implement JObservableInterface: Pre-processing by observers
     $this->_observers->update('onBeforeStore', array($updateNulls, $k));
     $currentAssetId = 0;
     if (!empty($this->asset_id)) {
         $currentAssetId = $this->asset_id;
     }
     // The asset id field is managed privately by this class.
     if ($this->_trackAssets) {
         unset($this->asset_id);
     }
     // If a primary key exists update the object, otherwise insert it.
     if ($this->hasPrimaryKey()) {
         $this->_db->updateObject($this->_tbl, $this, $this->_tbl_keys, $updateNulls);
     } else {
         $this->_db->insertObject($this->_tbl, $this, $this->_tbl_keys[0]);
     }
     // If the table is not set to track assets return true.
     if ($this->_trackAssets) {
         if ($this->_locked) {
             $this->_unlock();
         }
         /*
          * Asset Tracking
          */
         $parentId = $this->_getAssetParentId();
         $name = $this->_getAssetName();
         $title = $this->_getAssetTitle();
         $asset = self::getInstance('Asset', 'JTable', array('dbo' => $this->getDbo()));
         $asset->loadByName($name);
         // Re-inject the asset id.
         $this->asset_id = $asset->id;
         // Check for an error.
         $error = $asset->getError();
         if ($error) {
             $this->setError($error);
             return false;
         } else {
             // Specify how a new or moved node asset is inserted into the tree.
             if (empty($this->asset_id) || $asset->parent_id != $parentId) {
                 $asset->setLocation($parentId, 'last-child');
             }
             // Prepare the asset to be stored.
             $asset->parent_id = $parentId;
             $asset->name = $name;
             $asset->title = $title;
             if ($this->_rules instanceof JAccessRules) {
                 $asset->rules = (string) $this->_rules;
             }
             if (!$asset->check() || !$asset->store($updateNulls)) {
                 $this->setError($asset->getError());
                 return false;
             } else {
                 // Create an asset_id or heal one that is corrupted.
                 if (empty($this->asset_id) || $currentAssetId != $this->asset_id && !empty($this->asset_id)) {
                     // Update the asset_id field in this table.
                     $this->asset_id = (int) $asset->id;
                     $query = $this->_db->getQuery(true)->update($this->_db->quoteName($this->_tbl))->set('asset_id = ' . (int) $this->asset_id);
                     $this->appendPrimaryKeys($query);
                     $this->_db->setQuery($query)->execute();
                 }
             }
         }
     }
     // Implement JObservableInterface: Post-processing by observers
     $this->_observers->update('onAfterStore', array(&$result));
     return $result;
 }
コード例 #6
0
ファイル: table.php プロジェクト: Rai-Ka/joomla-cms
 /**
  * Method to store a row in the database from the JTable instance properties.
  *
  * If a primary key value is set the row with that primary key value will be updated with the instance property values.
  * If no primary key value is set a new row will be inserted into the database with the properties from the JTable instance.
  *
  * @param   boolean  $updateNulls  True to update fields even if they are null.
  *
  * @return  boolean  True on success.
  *
  * @since   11.1
  */
 public function store($updateNulls = false)
 {
     $result = true;
     $k = $this->_tbl_keys;
     // Pre-processing by observers
     $event = AbstractEvent::create('onTableBeforeStore', ['subject' => $this, 'updateNulls' => $updateNulls, 'k' => $k]);
     $this->getDispatcher()->dispatch('onTableBeforeStore', $event);
     $currentAssetId = 0;
     if (!empty($this->asset_id)) {
         $currentAssetId = $this->asset_id;
     }
     // The asset id field is managed privately by this class.
     if ($this->_trackAssets) {
         unset($this->asset_id);
     }
     // We have to unset typeAlias since updateObject / insertObject will try to insert / update all public variables...
     $typeAlias = $this->typeAlias;
     unset($this->typeAlias);
     try {
         // If a primary key exists update the object, otherwise insert it.
         if ($this->hasPrimaryKey()) {
             $this->_db->updateObject($this->_tbl, $this, $this->_tbl_keys, $updateNulls);
         } else {
             $this->_db->insertObject($this->_tbl, $this, $this->_tbl_keys[0]);
         }
     } catch (\Exception $e) {
         $this->setError($e->getMessage());
         $result = false;
     }
     $this->typeAlias = $typeAlias;
     // If the table is not set to track assets return true.
     if ($this->_trackAssets) {
         if ($this->_locked) {
             $this->_unlock();
         }
         /*
          * Asset Tracking
          */
         $parentId = $this->_getAssetParentId();
         $name = $this->_getAssetName();
         $title = $this->_getAssetTitle();
         $asset = self::getInstance('Asset', 'JTable', array('dbo' => $this->getDbo()));
         $asset->loadByName($name);
         // Re-inject the asset id.
         $this->asset_id = $asset->id;
         // Check for an error.
         $error = $asset->getError();
         if ($error) {
             $this->setError($error);
             return false;
         } else {
             // Specify how a new or moved node asset is inserted into the tree.
             if (empty($this->asset_id) || $asset->parent_id != $parentId) {
                 $asset->setLocation($parentId, 'last-child');
             }
             // Prepare the asset to be stored.
             $asset->parent_id = $parentId;
             $asset->name = $name;
             $asset->title = $title;
             if ($this->_rules instanceof JAccessRules) {
                 $asset->rules = (string) $this->_rules;
             }
             if (!$asset->check() || !$asset->store($updateNulls)) {
                 $this->setError($asset->getError());
                 return false;
             } else {
                 // Create an asset_id or heal one that is corrupted.
                 if (empty($this->asset_id) || $currentAssetId != $this->asset_id && !empty($this->asset_id)) {
                     // Update the asset_id field in this table.
                     $this->asset_id = (int) $asset->id;
                     $query = $this->_db->getQuery(true)->update($this->_db->quoteName($this->_tbl))->set('asset_id = ' . (int) $this->asset_id);
                     $this->appendPrimaryKeys($query);
                     $this->_db->setQuery($query)->execute();
                 }
             }
         }
     }
     // Post-processing by observers
     $event = AbstractEvent::create('onTableAfterStore', ['subject' => $this, 'result' => &$result]);
     $this->getDispatcher()->dispatch('onTableAfterStore', $event);
     return $result;
 }
コード例 #7
0
 /**
  * Do update action.
  *
  * @param string $table         The table name.
  * @param mixed  $data          Data set contain data we want to update.
  * @param array  $condFields    The where condition tell us record exists or not, if not set,
  *                              will use primary key instead.
  * @param bool   $updateNulls   Update empty fields or not.
  *
  * @throws \Exception
  * @return  mixed Updated data set.
  */
 public function updateOne($table, $data, array $condFields = array(), $updateNulls = false)
 {
     return $this->db->updateObject($table, $data, $condFields, $updateNulls);
 }