コード例 #1
0
ファイル: table.php プロジェクト: deenison/joomla-cms
 /**
  * Publish or unpublish records
  *
  * @param   integer|array  $cid      The primary key value(s) of the item(s) to publish/unpublish
  * @param   integer        $publish  1 to publish an item, 0 to unpublish
  * @param   integer        $user_id  The user ID of the user (un)publishing the item.
  *
  * @return  boolean  True on success, false on failure (e.g. record is locked)
  */
 public function publish($cid = null, $publish = 1, $user_id = 0)
 {
     $enabledName = $this->getColumnAlias('enabled');
     $locked_byName = $this->getColumnAlias('locked_by');
     // Mhm... you called the publish method on a table without publish support...
     if (!in_array($enabledName, $this->getKnownFields())) {
         return false;
     }
     //We have to cast the id as array, or the helper function will return an empty set
     if ($cid) {
         $cid = (array) $cid;
     }
     FOFUtilsArray::toInteger($cid);
     $user_id = (int) $user_id;
     $publish = (int) $publish;
     $k = $this->_tbl_key;
     if (count($cid) < 1) {
         if ($this->{$k}) {
             $cid = array($this->{$k});
         } else {
             $this->setError("No items selected.");
             return false;
         }
     }
     if (!$this->onBeforePublish($cid, $publish)) {
         return false;
     }
     $query = $this->_db->getQuery(true)->update($this->_db->qn($this->_tbl))->set($this->_db->qn($enabledName) . ' = ' . (int) $publish);
     $checkin = in_array($locked_byName, $this->getKnownFields());
     if ($checkin) {
         $query->where(' (' . $this->_db->qn($locked_byName) . ' = 0 OR ' . $this->_db->qn($locked_byName) . ' = ' . (int) $user_id . ')', 'AND');
     }
     // TODO Rewrite this statment using IN. Check if it work in SQLServer and PostgreSQL
     $cids = $this->_db->qn($k) . ' = ' . implode(' OR ' . $this->_db->qn($k) . ' = ', $cid);
     $query->where('(' . $cids . ')');
     $this->_db->setQuery((string) $query);
     if (version_compare(JVERSION, '3.0', 'ge')) {
         try {
             $this->_db->execute();
         } catch (JDatabaseException $e) {
             $this->setError($e->getMessage());
         }
     } else {
         if (!$this->_db->execute()) {
             $this->setError($this->_db->getErrorMsg());
             return false;
         }
     }
     if (count($cid) == 1 && $checkin) {
         if ($this->_db->getAffectedRows() == 1) {
             $this->checkin($cid[0]);
             if ($this->{$k} == $cid[0]) {
                 $this->{$enabledName} = $publish;
             }
         }
     }
     $this->setError('');
     return true;
 }
コード例 #2
0
ファイル: table.php プロジェクト: ZerGabriel/joomla-platform
 /**
  * Method to set the publishing state for a row or list of rows in the database
  * table.  The method respects checked out rows by other users and will attempt
  * to checkin rows that it can after adjustments are made.
  *
  * @param   mixed    $pks     An optional array of primary key values to update.
  *                            If not set the instance property value is used.
  * @param   integer  $state   The publishing state. eg. [0 = unpublished, 1 = published]
  * @param   integer  $userId  The user id of the user performing the operation.
  *
  * @return  boolean  True on success; false if $pks is empty.
  *
  * @link    http://docs.joomla.org/JTable/publish
  * @since   11.1
  */
 public function publish($pks = null, $state = 1, $userId = 0)
 {
     $k = $this->_tbl_keys;
     if (!is_null($pks)) {
         foreach ($pks as $key => $pk) {
             if (!is_array($pk)) {
                 $pks[$key] = array($this->_tbl_key => $pk);
             }
         }
     }
     $userId = (int) $userId;
     $state = (int) $state;
     // If there are no primary keys set check to see if the instance key is set.
     if (empty($pks)) {
         $pk = array();
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key}) {
                 $pk[$this->{$key}] = $this->{$key};
             } else {
                 return false;
             }
         }
         $pks = array($pk);
     }
     foreach ($pks as $pk) {
         // Update the publishing state for rows with the given primary keys.
         $query = $this->_db->getQuery(true);
         $query->update($this->_tbl);
         $query->set('published = ' . (int) $state);
         // Determine if there is checkin support for the table.
         if (property_exists($this, 'checked_out') || property_exists($this, 'checked_out_time')) {
             $query->where('(checked_out = 0 OR checked_out = ' . (int) $userId . ')');
             $checkin = true;
         } else {
             $checkin = false;
         }
         // Build the WHERE clause for the primary keys.
         $this->appendPrimaryKeys($query, $pk);
         $this->_db->setQuery($query);
         $this->_db->execute();
         // If checkin is supported and all rows were adjusted, check them in.
         if ($checkin && count($pks) == $this->_db->getAffectedRows()) {
             $this->checkin($pk);
         }
         $ours = true;
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key} != $pk[$key]) {
                 $ours = false;
             }
         }
         if ($ours) {
             $this->published = $state;
         }
     }
     $this->setError('');
     return true;
 }
コード例 #3
0
 function publish($cid = null, $publish = 1, $user_id = 0)
 {
     JArrayHelper::toInteger($cid);
     $user_id = (int) $user_id;
     $publish = (int) $publish;
     $k = $this->_tbl_key;
     if (count($cid) < 1) {
         if ($this->{$k}) {
             $cid = array($this->{$k});
         } else {
             $this->setError("No items selected.");
             return false;
         }
     }
     if (!$this->onBeforePublish($cid, $publish)) {
         return false;
     }
     $enabledName = $this->getColumnAlias('enabled');
     $locked_byName = $this->getColumnAlias('locked_by');
     $query = $this->_db->getQuery(true)->update($this->_db->qn($this->_tbl))->set($this->_db->qn($enabledName) . ' = ' . (int) $publish);
     $checkin = in_array($locked_byName, array_keys($this->getProperties()));
     if ($checkin) {
         $query->where(' (' . $this->_db->qn($locked_byName) . ' = 0 OR ' . $this->_db->qn($locked_byName) . ' = ' . (int) $user_id . ')', 'AND');
     }
     $cids = $this->_db->qn($k) . ' = ' . implode(' OR ' . $this->_db->qn($k) . ' = ', $cid);
     $query->where('(' . $cids . ')');
     $this->_db->setQuery((string) $query);
     if (version_compare(JVERSION, '3.0', 'ge')) {
         try {
             $this->_db->execute();
         } catch (JDatabaseException $e) {
             $this->setError($e->getMessage());
         }
     } else {
         if (!$this->_db->execute()) {
             $this->setError($this->_db->getErrorMsg());
             return false;
         }
     }
     if (count($cid) == 1 && $checkin) {
         if ($this->_db->getAffectedRows() == 1) {
             $this->checkin($cid[0]);
             if ($this->{$k} == $cid[0]) {
                 $this->published = $publish;
             }
         }
     }
     $this->setError('');
     return true;
 }
コード例 #4
0
ファイル: table.php プロジェクト: ranwaldo/joomla-platform
 /**
  * Method to set the publishing state for a row or list of rows in the database
  * table.  The method respects checked out rows by other users and will attempt
  * to checkin rows that it can after adjustments are made.
  *
  * @param   mixed    $pks     An optional array of primary key values to update.
  *                            If not set the instance property value is used.
  * @param   integer  $state   The publishing state. eg. [0 = unpublished, 1 = published]
  * @param   integer  $userId  The user id of the user performing the operation.
  *
  * @return  boolean  True on success; false if $pks is empty.
  *
  * @link    http://docs.joomla.org/JTable/publish
  * @since   11.1
  */
 public function publish($pks = null, $state = 1, $userId = 0)
 {
     // Initialise variables.
     $k = $this->_tbl_key;
     // Sanitize input.
     JArrayHelper::toInteger($pks);
     $userId = (int) $userId;
     $state = (int) $state;
     // If there are no primary keys set check to see if the instance key is set.
     if (empty($pks)) {
         if ($this->{$k}) {
             $pks = array($this->{$k});
         } else {
             return false;
         }
     }
     // Update the publishing state for rows with the given primary keys.
     $query = $this->_db->getQuery(true);
     $query->update($this->_tbl);
     $query->set('published = ' . (int) $state);
     // Determine if there is checkin support for the table.
     if (property_exists($this, 'checked_out') || property_exists($this, 'checked_out_time')) {
         $query->where('(checked_out = 0 OR checked_out = ' . (int) $userId . ')');
         $checkin = true;
     } else {
         $checkin = false;
     }
     // Build the WHERE clause for the primary keys.
     $query->where($k . ' = ' . implode(' OR ' . $k . ' = ', $pks));
     $this->_db->setQuery($query);
     $this->_db->execute();
     // If checkin is supported and all rows were adjusted, check them in.
     if ($checkin && count($pks) == $this->_db->getAffectedRows()) {
         // Checkin the rows.
         foreach ($pks as $pk) {
             $this->checkin($pk);
         }
     }
     // If the JTable instance value is in the list of primary keys that were set, set the instance.
     if (in_array($this->{$k}, $pks)) {
         $this->published = $state;
     }
     $this->setError('');
     return true;
 }
コード例 #5
0
ファイル: table.php プロジェクト: klas/joomla-cms
 /**
  * Method to set the publishing state for a row or list of rows in the database
  * table.  The method respects checked out rows by other users and will attempt
  * to checkin rows that it can after adjustments are made.
  *
  * @param   mixed    $pks     An optional array of primary key values to update.
  *                            If not set the instance property value is used.
  * @param   integer  $state   The publishing state. eg. [0 = unpublished, 1 = published]
  * @param   integer  $userId  The user id of the user performing the operation.
  *
  * @return  boolean  True on success; false if $pks is empty.
  *
  * @link    https://docs.joomla.org/JTable/publish
  * @since   11.1
  */
 public function publish($pks = null, $state = 1, $userId = 0)
 {
     // Sanitize input
     $userId = (int) $userId;
     $state = (int) $state;
     if (!is_null($pks)) {
         if (!is_array($pks)) {
             $pks = array($pks);
         }
         foreach ($pks as $key => $pk) {
             if (!is_array($pk)) {
                 $pks[$key] = array($this->_tbl_key => $pk);
             }
         }
     }
     // If there are no primary keys set check to see if the instance key is set.
     if (empty($pks)) {
         $pk = array();
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key}) {
                 $pk[$key] = $this->{$key};
             } else {
                 $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED'));
                 return false;
             }
         }
         $pks = array($pk);
     }
     $publishedField = $this->getColumnAlias('published');
     $checkedOutField = $this->getColumnAlias('checked_out');
     foreach ($pks as $pk) {
         // Update the publishing state for rows with the given primary keys.
         $query = $this->_db->getQuery(true)->update($this->_tbl)->set($this->_db->quoteName($publishedField) . ' = ' . (int) $state);
         // Determine if there is checkin support for the table.
         if (property_exists($this, 'checked_out') || property_exists($this, 'checked_out_time')) {
             $query->where('(' . $this->_db->quoteName($checkedOutField) . ' = 0 OR ' . $this->_db->quoteName($checkedOutField) . ' = ' . (int) $userId . ')');
             $checkin = true;
         } else {
             $checkin = false;
         }
         // Build the WHERE clause for the primary keys.
         $this->appendPrimaryKeys($query, $pk);
         $this->_db->setQuery($query);
         try {
             $this->_db->execute();
         } catch (RuntimeException $e) {
             $this->setError($e->getMessage());
             return false;
         }
         // If checkin is supported and all rows were adjusted, check them in.
         if ($checkin && count($pks) == $this->_db->getAffectedRows()) {
             $this->checkin($pk);
         }
         // If the JTable instance value is in the list of primary keys that were set, set the instance.
         $ours = true;
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key} != $pk[$key]) {
                 $ours = false;
             }
         }
         if ($ours) {
             $this->{$publishedField} = $state;
         }
     }
     $this->setError('');
     return true;
 }
コード例 #6
0
 /**
  * @return int The number of affected rows in the previous operation
  */
 public function getAffectedRows()
 {
     return $this->_db->getAffectedRows();
 }
コード例 #7
0
ファイル: table.php プロジェクト: Rai-Ka/joomla-cms
 /**
  * Method to set the publishing state for a row or list of rows in the database table.
  *
  * The method respects checked out rows by other users and will attempt to checkin rows that it can after adjustments are made.
  *
  * @param   mixed    $pks     An optional array of primary key values to update. If not set the instance property value is used.
  * @param   integer  $state   The publishing state. eg. [0 = unpublished, 1 = published]
  * @param   integer  $userId  The user ID of the user performing the operation.
  *
  * @return  boolean  True on success; false if $pks is empty.
  *
  * @since   11.1
  */
 public function publish($pks = null, $state = 1, $userId = 0)
 {
     // Sanitize input
     $userId = (int) $userId;
     $state = (int) $state;
     // Pre-processing by observers
     $event = AbstractEvent::create('onTableBeforePublish', ['subject' => $this, 'pks' => $pks, 'state' => $state, 'userId' => $userId]);
     $this->getDispatcher()->dispatch('onTableBeforePublish', $event);
     if (!is_null($pks)) {
         if (!is_array($pks)) {
             $pks = array($pks);
         }
         foreach ($pks as $key => $pk) {
             if (!is_array($pk)) {
                 $pks[$key] = array($this->_tbl_key => $pk);
             }
         }
     }
     // If there are no primary keys set check to see if the instance key is set.
     if (empty($pks)) {
         $pk = array();
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key}) {
                 $pk[$key] = $this->{$key};
             } else {
                 $this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED'));
                 return false;
             }
         }
         $pks = array($pk);
     }
     $publishedField = $this->getColumnAlias('published');
     $checkedOutField = $this->getColumnAlias('checked_out');
     foreach ($pks as $pk) {
         // Update the publishing state for rows with the given primary keys.
         $query = $this->_db->getQuery(true)->update($this->_tbl)->set($this->_db->quoteName($publishedField) . ' = ' . (int) $state);
         // If publishing, set published date/time if not previously set
         if ($state && property_exists($this, 'publish_up') && (int) $this->publish_up == 0) {
             $nowDate = $this->_db->quote(JFactory::getDate()->toSql());
             $query->set($this->_db->quoteName($this->getColumnAlias('publish_up')) . ' = ' . $nowDate);
         }
         // Determine if there is checkin support for the table.
         if (property_exists($this, 'checked_out') || property_exists($this, 'checked_out_time')) {
             $query->where('(' . $this->_db->quoteName($checkedOutField) . ' = 0 OR ' . $this->_db->quoteName($checkedOutField) . ' = ' . (int) $userId . ')');
             $checkin = true;
         } else {
             $checkin = false;
         }
         // Build the WHERE clause for the primary keys.
         $this->appendPrimaryKeys($query, $pk);
         $this->_db->setQuery($query);
         try {
             $this->_db->execute();
         } catch (RuntimeException $e) {
             $this->setError($e->getMessage());
             return false;
         }
         // If checkin is supported and all rows were adjusted, check them in.
         if ($checkin && count($pks) == $this->_db->getAffectedRows()) {
             $this->checkin($pk);
         }
         // If the JTable instance value is in the list of primary keys that were set, set the instance.
         $ours = true;
         foreach ($this->_tbl_keys as $key) {
             if ($this->{$key} != $pk[$key]) {
                 $ours = false;
             }
         }
         if ($ours) {
             $this->{$publishedField} = $state;
         }
     }
     $this->setError('');
     // Pre-processing by observers
     $event = AbstractEvent::create('onTableAfterPublish', ['subject' => $this, 'pks' => $pks, 'state' => $state, 'userId' => $userId]);
     $this->getDispatcher()->dispatch('onTableAfterPublish', $event);
     return true;
 }
コード例 #8
0
 /**
  * @return int The number of affected rows in the previous operation
  */
 function getAffectedRows()
 {
     if (is_callable(array($this->_db, 'getAffectedRows'))) {
         $affected = $this->_db->getAffectedRows();
     } elseif (get_resource_type($this->_db->_resource) == 'mysql link') {
         $affected = mysql_affected_rows($this->_db->_resource);
     } else {
         $affected = mysqli_affected_rows($this->_db->_resource);
     }
     return $affected;
 }