getByPK (primary key) lookup for Managed_DataObject instances
This commit is contained in:
parent
ca19a5cd6d
commit
ebdd792b6f
@ -309,6 +309,54 @@ abstract class Managed_DataObject extends Memcached_DataObject
|
|||||||
return common_database_tablename($this->tableName());
|
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
|
* Returns an ID, checked that it is set and reasonably valid
|
||||||
*
|
*
|
||||||
|
@ -313,16 +313,6 @@ class Notice extends Managed_DataObject
|
|||||||
return $notice;
|
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.
|
* Extract #hashtags from this notice's content and save them to the database.
|
||||||
*/
|
*/
|
||||||
@ -2761,7 +2751,7 @@ class Notice extends Managed_DataObject
|
|||||||
if (empty($this->reply_to)) {
|
if (empty($this->reply_to)) {
|
||||||
throw new NoParentNoticeException($this);
|
throw new NoParentNoticeException($this);
|
||||||
}
|
}
|
||||||
return self::getById($this->reply_to);
|
return self::getByID($this->reply_to);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,7 +50,7 @@ class ActivityverbAction extends ManagedAction
|
|||||||
throw new ServerException('A verb has not been specified.');
|
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)) {
|
if (!$this->notice->inScope($this->scoped)) {
|
||||||
// TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
|
// TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
|
||||||
|
@ -161,7 +161,7 @@ class SharePlugin extends ActivityVerbHandlerPlugin
|
|||||||
public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null)
|
public function extendActivity(Notice $stored, Activity $act, Profile $scoped=null)
|
||||||
{
|
{
|
||||||
// TODO: How to handle repeats of deleted notices?
|
// 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
|
// TRANS: A repeat activity's title. %1$s is repeater's nickname
|
||||||
// and %2$s is the repeated user's nickname.
|
// and %2$s is the repeated user's nickname.
|
||||||
$act->title = sprintf(_('%1$s repeated a notice by %2$s'),
|
$act->title = sprintf(_('%1$s repeated a notice by %2$s'),
|
||||||
|
Loading…
Reference in New Issue
Block a user