/** * Method to check a row in if the necessary properties/fields exist. Checking * a row in will allow other users the ability to edit the row. * * @param mixed $pk An optional primary key value to check out. If not set the instance property value is used. * * @return boolean True on success. * * @link https://docs.joomla.org/JTable/checkIn * @since 11.1 * @throws UnexpectedValueException */ public function checkIn($pk = null) { $checkedOutField = $this->getColumnAlias('checked_out'); $checkedOutTimeField = $this->getColumnAlias('checked_out_time'); // If there is no checked_out or checked_out_time field, just return true. if (!property_exists($this, $checkedOutField) || !property_exists($this, $checkedOutTimeField)) { return true; } if (is_null($pk)) { $pk = array(); foreach ($this->_tbl_keys as $key) { $pk[$this->{$key}] = $this->{$key}; } } elseif (!is_array($pk)) { $pk = array($this->_tbl_key => $pk); } foreach ($this->_tbl_keys as $key) { $pk[$key] = empty($pk[$key]) ? $this->{$key} : $pk[$key]; if ($pk[$key] === null) { throw new UnexpectedValueException('Null primary key not allowed.'); } } // Check the row in by primary key. $query = $this->_db->getQuery(true)->update($this->_tbl)->set($this->_db->quoteName($checkedOutField) . ' = 0')->set($this->_db->quoteName($checkedOutTimeField) . ' = ' . $this->_db->quote($this->_db->getNullDate())); $this->appendPrimaryKeys($query, $pk); $this->_db->setQuery($query); // Check for a database error. $this->_db->execute(); // Set table values in the object. $this->{$checkedOutField} = 0; $this->{$checkedOutTimeField} = ''; return true; }
/** * Method to check a row in if the necessary properties/fields exist. Checking * a row in will allow other users the ability to edit the row. * * @param mixed $pk An optional primary key value to check out. If not set the instance property value is used. * * @return boolean True on success. * * @link http://docs.joomla.org/JTable/checkIn * @since 11.1 */ public function checkIn($pk = null) { // If there is no checked_out or checked_out_time field, just return true. if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) { return true; } // Initialise variables. $k = $this->_tbl_key; $pk = is_null($pk) ? $this->{$k} : $pk; // If no primary key is given, return false. if ($pk === null) { throw new UnexpectedValueException('Null primary key not allowed.'); } // Check the row in by primary key. $query = $this->_db->getQuery(true); $query->update($this->_tbl); $query->set($this->_db->quoteName('checked_out') . ' = 0'); $query->set($this->_db->quoteName('checked_out_time') . ' = ' . $this->_db->quote($this->_db->getNullDate())); $query->where($this->_tbl_key . ' = ' . $this->_db->quote($pk)); $this->_db->setQuery($query); // Check for a database error. $this->_db->execute(); // Set table values in the object. $this->checked_out = 0; $this->checked_out_time = ''; return true; }
/** * Tests the JDatabaseDriver::getNullDate method. * * @return void * * @since 11.4 */ public function testGetNullDate() { $this->assertThat( $this->db->getNullDate(), $this->equalTo('1BC') ); }
function checkin($oid = null) { $fldLockedBy = $this->getColumnAlias('locked_by'); $fldLockedOn = $this->getColumnAlias('locked_on'); if (!(in_array($fldLockedBy, array_keys($this->getProperties())) || in_array($fldLockedOn, array_keys($this->getProperties())))) { return true; } $k = $this->_tbl_key; if ($oid !== null) { $this->{$k} = $oid; } if ($this->{$k} == null) { return false; } $query = $this->_db->getQuery(true)->update($this->_db->qn($this->_tbl))->set(array($this->_db->qn($fldLockedBy) . ' = 0', $this->_db->qn($fldLockedOn) . ' = ' . $this->_db->q($this->_db->getNullDate())))->where($this->_db->qn($this->_tbl_key) . ' = ' . $this->_db->q($this->{$k})); $this->_db->setQuery((string) $query); $this->{$fldLockedBy} = 0; $this->{$fldLockedOn} = ''; return $this->_db->execute(); }
/** * The event which runs before storing (saving) data to the database * * @param boolean $updateNulls Should nulls be saved as nulls (true) or just skipped over (false)? * * @return boolean True to allow saving */ protected function onBeforeStore($updateNulls) { // Do we have a "Created" set of fields? $created_on = $this->getColumnAlias('created_on'); $created_by = $this->getColumnAlias('created_by'); $modified_on = $this->getColumnAlias('modified_on'); $modified_by = $this->getColumnAlias('modified_by'); $locked_on = $this->getColumnAlias('locked_on'); $locked_by = $this->getColumnAlias('locked_by'); $title = $this->getColumnAlias('title'); $slug = $this->getColumnAlias('slug'); $hasCreatedOn = in_array($created_on, $this->getKnownFields()); $hasCreatedBy = in_array($created_by, $this->getKnownFields()); if ($hasCreatedOn && $hasCreatedBy) { $hasModifiedOn = in_array($modified_on, $this->getKnownFields()); $hasModifiedBy = in_array($modified_by, $this->getKnownFields()); $nullDate = $this->_db->getNullDate(); if (empty($this->{$created_by}) || $this->{$created_on} == $nullDate || empty($this->{$created_on})) { $uid = FOFPlatform::getInstance()->getUser()->id; if ($uid) { $this->{$created_by} = FOFPlatform::getInstance()->getUser()->id; } $date = FOFPlatform::getInstance()->getDate('now', null, false); $this->{$created_on} = $date->toSql(); } elseif ($hasModifiedOn && $hasModifiedBy) { $uid = FOFPlatform::getInstance()->getUser()->id; if ($uid) { $this->{$modified_by} = FOFPlatform::getInstance()->getUser()->id; } $date = FOFPlatform::getInstance()->getDate('now', null, false); $this->{$modified_on} = $date->toSql(); } } // Do we have a set of title and slug fields? $hasTitle = in_array($title, $this->getKnownFields()); $hasSlug = in_array($slug, $this->getKnownFields()); if ($hasTitle && $hasSlug) { if (empty($this->{$slug})) { // Create a slug from the title $this->{$slug} = FOFStringUtils::toSlug($this->{$title}); } else { // Filter the slug for invalid characters $this->{$slug} = FOFStringUtils::toSlug($this->{$slug}); } // Make sure we don't have a duplicate slug on this table $db = $this->getDbo(); $query = $db->getQuery(true)->select($db->qn($slug))->from($this->_tbl)->where($db->qn($slug) . ' = ' . $db->q($this->{$slug}))->where('NOT ' . $db->qn($this->_tbl_key) . ' = ' . $db->q($this->{$this->_tbl_key})); $db->setQuery($query); $existingItems = $db->loadAssocList(); $count = 0; $newSlug = $this->{$slug}; while (!empty($existingItems)) { $count++; $newSlug = $this->{$slug} . '-' . $count; $query = $db->getQuery(true)->select($db->qn($slug))->from($this->_tbl)->where($db->qn($slug) . ' = ' . $db->q($newSlug))->where('NOT ' . $db->qn($this->_tbl_key) . ' = ' . $db->q($this->{$this->_tbl_key})); $db->setQuery($query); $existingItems = $db->loadAssocList(); } $this->{$slug} = $newSlug; } // Call the behaviors $result = $this->tableDispatcher->trigger('onBeforeStore', array(&$this, $updateNulls)); if (in_array(false, $result, true)) { // Behavior failed, return false return false; } // Execute onBeforeStore<tablename> events in loaded plugins if ($this->_trigger_events) { $name = FOFInflector::pluralize($this->getKeyName()); $result = FOFPlatform::getInstance()->runPlugins('onBeforeStore' . ucfirst($name), array(&$this, $updateNulls)); if (in_array(false, $result, true)) { return false; } else { return true; } } return true; }
/** * Constructor * * @param JDatabaseDriver $db Database connector object * * @since 1.5 */ public function __construct(JDatabaseDriver $db) { $this->typeAlias = 'com_banners.client'; $this->checked_out_time = $db->getNullDate(); parent::__construct('#__banner_clients', 'id', $db); }
/** * Returns the zero date/time * * @param string $dateTime 'datetime', 'date', 'time' * @return string Unquoted null/zero date string */ public function getNullDate($dateTime = 'datetime') { return $this->formatDateOrTime($this->_db->getNullDate(), $dateTime); }