_get_info($shout_id);
return true;
} // Constructor
/**
* _get_info
* does the db call, reads from the user_shout table
*/
private function _get_info($shout_id)
{
$sql = "SELECT * FROM `user_shout` WHERE `id` = ?";
$db_results = Dba::read($sql, array($shout_id));
$data = Dba::fetch_assoc($db_results);
foreach ($data as $key=>$value) {
$this->$key = $value;
}
return true;
} // _get_info
/**
* gc
*
* Cleans out orphaned shoutbox items
*/
public static function gc($object_type = null, $object_id = null)
{
$types = array('song', 'album', 'artist', 'label');
if ($object_type != null) {
if (in_array($object_type, $types)) {
$sql = "DELETE FROM `user_shout` WHERE `object_type` = ? AND `object_id` = ?";
Dba::write($sql, array($object_type, $object_id));
} else {
debug_event('shoutbox', 'Garbage collect on type `' . $object_type . '` is not supported.', 1);
}
} else {
foreach ($types as $type) {
Dba::write("DELETE FROM `user_shout` USING `user_shout` LEFT JOIN `$type` ON `$type`.`id` = `user_shout`.`object_id` WHERE `$type`.`id` IS NULL AND `user_shout`.`object_type` = '$type'");
}
}
}
/**
* get_top
* This returns the top user_shouts, shoutbox objects are always shown regardless and count against the total
* number of objects shown
*/
public static function get_top($limit)
{
$shouts = self::get_sticky();
// If we've already got too many stop here
if (count($shouts) > $limit) {
$shouts = array_slice($shouts,0,$limit);
return $shouts;
}
// Only get as many as we need
$limit = intval($limit) - count($shouts);
$sql = "SELECT * FROM `user_shout` WHERE `sticky`='0' ORDER BY `date` DESC LIMIT $limit";
$db_results = Dba::read($sql);
while ($row = Dba::fetch_assoc($db_results)) {
$shouts[] = $row['id'];
}
return $shouts;
} // get_top
public static function get_shouts_since($time)
{
$sql = "SELECT * FROM `user_shout` WHERE `date` > ? ORDER BY `date` DESC";
$db_results = Dba::read($sql, array($time));
$shouts = array();
while ($row = Dba::fetch_assoc($db_results)) {
$shouts[] = $row['id'];
}
return $shouts;
}
/**
* get_sticky
* This returns all current sticky shoutbox items
*/
public static function get_sticky()
{
$sql = "SELECT * FROM `user_shout` WHERE `sticky`='1' ORDER BY `date` DESC";
$db_results = Dba::read($sql);
$results = array();
while ($row = Dba::fetch_assoc($db_results)) {
$results[] = $row['id'];
}
return $results;
} // get_sticky
/**
* get_object
* This takes a type and an ID and returns a created object
*/
public static function get_object($type,$object_id)
{
if (!Core::is_library_item($type))
return false;
$object = new $type($object_id);
return $object;
} // get_object
/**
* get_image
* This returns an image tag if the type of object we're currently rolling with
* has an image associated with it
*/
public function get_image()
{
$image_string = '';
if (Art::has_db($this->object_id, $this->object_type)) {
$image_string = "object_id . "&object_type=" . $this->object_type . "&thumb=1\" />";
}
return $image_string;
} // get_image
/**
* create
* This takes a key'd array of data as input and inserts a new shoutbox entry, it returns the auto_inc id
*/
public static function create(array $data)
{
$sticky = isset($data['sticky']) ? 1 : 0;
$user = intval($data['user'] ?: $GLOBALS['user']->id);
$date = intval($data['date'] ?: time());
$sql = "INSERT INTO `user_shout` (`user`,`date`,`text`,`sticky`,`object_id`,`object_type`, `data`) " .
"VALUES (? , ?, ?, ?, ?, ?, ?)";
Dba::write($sql, array($user, $date, strip_tags($data['comment']), $sticky, $data['object_id'], $data['object_type'], $data['data']));
$insert_id = Dba::insert_id();
return $insert_id;
} // create
/**
* update
* This takes a key'd array of data as input and updates a shoutbox entry
*/
public function update(array $data)
{
$sql = "UPDATE `user_shout` SET `text` = ?, `sticky` = ? WHERE `id` = ?";
Dba::write($sql, array($data['comment'], make_bool($data['sticky']), $this->id));
return $this->id;
} // create
/**
* format
* this function takes the object and reformats some values
*/
public function format()
{
$this->sticky = ($this->sticky == "0") ? 'No' : 'Yes';
$this->f_date = date("m\/d\/Y - H:i", $this->date);
$this->f_text = preg_replace('/(\r\n|\n|\r)/', '
', $this->text);
return true;
} //format
/**
* delete
* this function deletes a specific shoutbox entry
*/
public function delete($shout_id)
{
// Delete the shoutbox post
$shout_id = Dba::escape($shout_id);
$sql = "DELETE FROM `user_shout` WHERE `id`='$shout_id'";
Dba::write($sql);
} // delete
public function get_display($details = true, $jsbuttons = false)
{
$object = Shoutbox::get_object($this->object_type, $this->object_id);
$object->format();
$user = new User($this->user);
$user->format();
$img = $this->get_image();
$html = "