return common_database_tablename($this->tableName());
}
+ /**
+ * Returns an object by looking at the primary key column(s).
+ *
+ * Will require all primary key columns to be defined in an associative array
+ * and ignore any keys which are not part of the primary key.
+ *
+ * Will NOT accept NULL values as part of primary key.
+ *
+ * @param array $vals Must match all primary key columns for the dataobject.
+ *
+ * @return Managed_DataObject of the get_called_class() type
+ * @throws NoResultException if no object with that primary key
+ */
+ static function getByPK(array $vals)
+ {
+ $classname = get_called_class();
+ var_dump($classname);
+
+ $pkey = static::pkeyCols();
+ if (is_null($pkey)) {
+ throw new ServerException("Failed to get primary key columns for class '{$classname}'");
+ }
+
+ $object = new $classname();
+ foreach ($pkey as $col) {
+ if (!array_key_exists($col, $vals)) {
+ throw new ServerException("Missing primary key column '{$col}'");
+ } elseif (is_null($vals[$col])) {
+ throw new ServerException("NULL values not allowed in getByPK for column '{$col}'");
+ }
+ $object->$col = $vals[$col];
+ }
+ if (!$object->find(true)) {
+ throw new NoResultException($object);
+ }
+ return $object;
+ }
+
+ static function getByID($id)
+ {
+ if (empty($id)) {
+ throw new ServerException('Empty ID on lookup');
+ }
+ // getByPK throws exception if id is null
+ // or if the class does not have a single 'id' column as primary key
+ return static::getByPK(array('id' => $id));
+ }
+
/**
* Returns an ID, checked that it is set and reasonably valid
*
return $notice;
}
- public static function getById($id)
- {
- $notice = new Notice();
- $notice->id = $id;
- if (!$notice->find(true)) {
- throw new NoResultException($notice);
- }
- return $notice;
- }
-
/**
* Extract #hashtags from this notice's content and save them to the database.
*/
if (empty($this->reply_to)) {
throw new NoParentNoticeException($this);
}
- return self::getById($this->reply_to);
+ return self::getByID($this->reply_to);
}
/**
throw new ServerException('A verb has not been specified.');
}
- $this->notice = Notice::getById($this->trimmed('id'));
+ $this->notice = Notice::getByID($this->trimmed('id'));
if (!$this->notice->inScope($this->scoped)) {
// TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null)
{
// TODO: How to handle repeats of deleted notices?
- $target = Notice::getById($stored->repeat_of);
+ $target = Notice::getByID($stored->repeat_of);
// TRANS: A repeat activity's title. %1$s is repeater's nickname
// and %2$s is the repeated user's nickname.
$act->title = sprintf(_('%1$s repeated a notice by %2$s'),