5 # Part of the ScoutLib application support library 6 # Copyright 2016 Edward Almasy and Internet Scout Research Group 7 # http://scout.wisc.edu 16 # ---- PUBLIC INTERFACE -------------------------------------------------- 32 # set up database access values 33 $ClassName = get_class($this);
34 static::SetDatabaseAccessValues($ClassName);
35 $this->ItemIdColumnName = self::$ItemIdColumnNames[$ClassName];
36 $this->ItemNameColumnName = self::$ItemNameColumnNames[$ClassName];
37 $this->ItemTableName = self::$ItemTableNames[$ClassName];
40 $this->
Id = static::GetCanonicalId(
$Id);
42 # load item info from database 44 $this->DB->Query(
"SELECT * FROM `".$this->ItemTableName.
"`" 45 .
" WHERE `".$this->ItemIdColumnName.
"` = " 47 $this->ValueCache = $this->DB->FetchRow();
49 # error out if item not found in database 50 if ($this->ValueCache === FALSE)
52 throw new InvalidArgumentException(
"Attempt to load ".$ClassName
53 .
" with unknown ID (".
$Id.
").");
62 # delete item from database 63 $this->DB->Query(
"DELETE FROM `".$this->ItemTableName.
"`" 64 .
" WHERE `".$this->ItemIdColumnName.
"` = ".intval($this->
Id));
105 $NameColumn = strlen($this->ItemNameColumnName)
106 ? $this->ItemNameColumnName
152 return $this->
UpdateValue(
"LastModifiedBy", $NewValue);
164 # check for NULL ID (usually used to indicate no value set) 170 # set up database access values 171 $ClassName = get_called_class();
172 static::SetDatabaseAccessValues($ClassName);
174 # build database query to check for item 175 $Query =
"SELECT COUNT(*) AS ItemCount" 176 .
" FROM ".self::$ItemTableNames[$ClassName]
177 .
" WHERE ".self::$ItemIdColumnNames[$ClassName].
" = ".intval(
$Id);
179 # check for item and return result to caller 181 $ItemCount =
$DB->Query($Query,
"ItemCount");
182 return ($ItemCount > 0) ? TRUE : FALSE;
186 # ---- PRIVATE INTERFACE ------------------------------------------------- 207 # set up database access values 208 $ClassName = get_called_class();
209 static::SetDatabaseAccessValues($ClassName);
211 # set up query to add item to database 212 $Query =
"INSERT INTO `".self::$ItemTableNames[$ClassName].
"`";
214 # add initial values to query if supplied 218 foreach ($Values as $Column => $Value)
220 $Assignments[] =
"`".$Column.
"` = '".addslashes($Value).
"'";
222 $Query .= implode(
", ", $Assignments);
225 # add item to database 229 # retrieve ID for newly-created item 230 $NewItemId =
$DB->LastInsertId();
233 $NewItem =
new $ClassName($NewItemId);
235 # return new item object to caller 247 if (!isset(self::$ItemIdColumnNames[$ClassName]))
249 self::$ItemIdColumnNames[$ClassName] = $ClassName.
"Id";
250 self::$ItemNameColumnNames[$ClassName] = $ClassName.
"Name";
264 return $this->DB->UpdateValue($this->ItemTableName, $ColumnName, $NewValue,
265 "`".$this->ItemIdColumnName.
"` = ".intval($this->
Id),
282 $Date =
new Date($NewValue);
283 $NewValue = $Date->FormattedForSql();
DateLastModified($NewValue=DB_NOVALUE)
Get/set when item was last modified.
static $ItemIdColumnNames
DateCreated($NewValue=DB_NOVALUE)
Get/set when item was created.
Name($NewValue=DB_NOVALUE)
Get/set name of item.
static CreateWithValues($Values)
Create a new item, using specified initial database values.
UpdateValue($ColumnName, $NewValue=DB_NOVALUE)
Convenience function to supply parameters to Database::UpdateValue().
SQL database abstraction object with smart query caching.
CreatedBy($NewValue=DB_NOVALUE)
Get/set ID of user who created the item.
static $ItemNameColumnNames
LastModifiedBy($NewValue=DB_NOVALUE)
Get/set ID of user who last modified the item.
static SetDatabaseAccessValues($ClassName)
Set the database access values (table name, ID column name, name column name) for specified class...
static Pluralize($Word)
Pluralize an English word.
const NO_ITEM
ID value used to indicate no item.
Common base class for persistent items store in database.
__construct($Id)
Constructor, used to load existing items.
static ItemExists($Id)
Check whether an item exists with the specified ID.
UpdateDateValue($ColumnName, $NewValue=DB_NOVALUE)
Convenience function to supply parameters to Database::UpdateValue(), with preprocessing of new value...
static GetCanonicalId($Id)
Normalize item ID to canonical form.