6 * Basic implementation for object editors following the decorator pattern.
9 * @copyright 2001-2012 WoltLab GmbH
10 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
11 * @package com.woltlab.wcf
13 * @category Community Framework
15 abstract class DatabaseObjectEditor
extends DatabaseObjectDecorator
implements IEditableObject
{
17 * @see wcf\data\IEditableObject::create()
19 public static function create(array $parameters = array()) {
21 $statementParameters = array();
22 foreach ($parameters as $key => $value) {
30 $statementParameters[] = $value;
34 $sql = "INSERT INTO ".static::getDatabaseTableName()."
36 VALUES (".$values.")";
37 $statement = WCF
::getDB()->prepareStatement($sql);
38 $statement->execute($statementParameters);
41 if (static::getDatabaseTableIndexIsIdentity()) {
42 $id = WCF
::getDB()->getInsertID(static::getDatabaseTableName(), static::getDatabaseTableIndexName());
45 $id = $parameters[static::getDatabaseTableIndexName()];
47 return new static::$baseClass($id);
51 * @see wcf\data\IEditableObject::update()
53 public function update(array $parameters = array()) {
54 if (empty($parameters)) return;
57 $statementParameters = array();
58 foreach ($parameters as $key => $value) {
59 if (!empty($updateSQL)) $updateSQL .= ', ';
60 $updateSQL .= $key . ' = ?';
61 $statementParameters[] = $value;
63 $statementParameters[] = $this->getObjectID();
65 $sql = "UPDATE ".static::getDatabaseTableName()."
67 WHERE ".static::getDatabaseTableIndexName()." = ?";
68 $statement = WCF
::getDB()->prepareStatement($sql);
69 $statement->execute($statementParameters);
73 * @see wcf\data\IEditableObject::updateCounters()
75 public function updateCounters(array $counters = array()) {
76 if (empty($counters)) return;
79 $statementParameters = array();
80 foreach ($counters as $key => $value) {
81 if (!empty($updateSQL)) $updateSQL .= ', ';
82 $updateSQL .= $key . ' = ' . $key . ' + ?';
83 $statementParameters[] = $value;
85 $statementParameters[] = $this->getObjectID();
87 $sql = "UPDATE ".static::getDatabaseTableName()."
89 WHERE ".static::getDatabaseTableIndexName()." = ?";
90 $statement = WCF
::getDB()->prepareStatement($sql);
91 $statement->execute($statementParameters);
95 * @see wcf\data\IEditableObject::delete()
97 public function delete() {
98 static::deleteAll(array($this->getObjectID()));
102 * @see wcf\data\IEditableObject::deleteAll()
104 public static function deleteAll(array $objectIDs = array()) {
105 $sql = "DELETE FROM ".static::getDatabaseTableName()."
106 WHERE ".static::getDatabaseTableIndexName()." = ?";
107 $statement = WCF
::getDB()->prepareStatement($sql);
110 WCF
::getDB()->beginTransaction();
111 foreach ($objectIDs as $objectID) {
112 $statement->executeUnbuffered(array($objectID));
113 $affectedCount +
= $statement->getAffectedRows();
115 WCF
::getDB()->commitTransaction();
117 return $affectedCount;