250 lines
4.4 KiB
PHP
250 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* @brief Inline Notification Model
|
|
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
|
* @copyright (c) Invision Power Services, Inc.
|
|
* @license https://www.invisioncommunity.com/legal/standards/
|
|
* @package Invision Community
|
|
* @since 6 Sep 2013
|
|
*/
|
|
|
|
namespace IPS\Notification;
|
|
|
|
/* To prevent PHP errors (extending class does not exist) revealing path */
|
|
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
|
{
|
|
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Inline Notification Model
|
|
*/
|
|
class _Inline extends \IPS\Patterns\ActiveRecord
|
|
{
|
|
/**
|
|
* @brief [ActiveRecord] Multiton Store
|
|
*/
|
|
protected static $multitons;
|
|
|
|
/**
|
|
* @brief [ActiveRecord] Database Table
|
|
*/
|
|
public static $databaseTable = 'core_notifications';
|
|
|
|
/**
|
|
* Set Default Values
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setDefaultValues()
|
|
{
|
|
$this->sent_time = time();
|
|
$this->updated_time = time();
|
|
}
|
|
|
|
/**
|
|
* Get sent time
|
|
*
|
|
* @return \IPS\DateTime
|
|
*/
|
|
public function get_sent_time()
|
|
{
|
|
return \IPS\DateTime::ts( $this->_data['sent_time'] );
|
|
}
|
|
|
|
/**
|
|
* Get updated time
|
|
*
|
|
* @return \IPS\DateTime
|
|
*/
|
|
public function get_updated_time()
|
|
{
|
|
return \IPS\DateTime::ts( $this->_data['updated_time'] );
|
|
}
|
|
|
|
/**
|
|
* Get member
|
|
*
|
|
* @return \IPS\Member
|
|
*/
|
|
public function get_member()
|
|
{
|
|
return \IPS\Member::load( $this->_data['member'] );
|
|
}
|
|
|
|
/**
|
|
* Set member
|
|
*
|
|
* @param |IPS\Member $member The member
|
|
* @return void
|
|
*/
|
|
public function set_member( \IPS\Member $member )
|
|
{
|
|
$this->_data['member'] = $member->member_id;
|
|
}
|
|
|
|
/**
|
|
* Get member data
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_member_data()
|
|
{
|
|
return json_decode( $this->_data['member_data'], TRUE );
|
|
}
|
|
|
|
/**
|
|
* Set member data
|
|
*
|
|
* @param mixed $data Member data
|
|
* @return void
|
|
*/
|
|
public function set_member_data( $data )
|
|
{
|
|
$this->_data['member_data'] = $data ? json_encode( $data ) : NULL;
|
|
}
|
|
|
|
/**
|
|
* Get item
|
|
*
|
|
* @return object|NULL
|
|
*/
|
|
public function get_item()
|
|
{
|
|
if ( $this->_data['item_class'] and $this->_data['item_id'] )
|
|
{
|
|
try
|
|
{
|
|
$class = $this->_data['item_class'];
|
|
if ( class_exists( $class ) )
|
|
{
|
|
return $class::load( $this->_data['item_id'] );
|
|
}
|
|
}
|
|
catch ( \OutOfRangeException $e )
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* Set item
|
|
*
|
|
* @param object $item The item
|
|
* @return void
|
|
*/
|
|
public function set_item( $item )
|
|
{
|
|
$idColumn = $item::$databaseColumnId;
|
|
$this->_data['item_class'] = get_class( $item );
|
|
$this->_data['item_id'] = $item->$idColumn;
|
|
}
|
|
|
|
/**
|
|
* Get subitem
|
|
*
|
|
* @return object|NULL
|
|
*/
|
|
public function get_item_sub()
|
|
{
|
|
if ( $this->_data['item_sub_class'] and $this->_data['item_sub_id'] )
|
|
{
|
|
try
|
|
{
|
|
$class = $this->_data['item_sub_class'];
|
|
if ( class_exists( $class ) )
|
|
{
|
|
return $class::load( $this->_data['item_sub_id'] );
|
|
}
|
|
}
|
|
catch ( \OutOfRangeException $e )
|
|
{
|
|
return NULL;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* Get application
|
|
*
|
|
* @return \IPS\Application
|
|
*/
|
|
public function get_notification_app()
|
|
{
|
|
return \IPS\Application::load( $this->_data['notification_app'] );
|
|
}
|
|
|
|
/**
|
|
* Set application
|
|
*
|
|
* @param mixed $data Member data
|
|
* @return void
|
|
*/
|
|
public function set_notification_app( \IPS\Application $app )
|
|
{
|
|
$this->_data['notification_app'] = $app->directory;
|
|
}
|
|
|
|
/**
|
|
* Get extra data
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_extra()
|
|
{
|
|
return $this->_data['extra'] ? json_decode( $this->_data['extra'], TRUE ) : array();
|
|
}
|
|
|
|
/**
|
|
* Set extra data
|
|
*
|
|
* @param mixed $data Member data
|
|
* @return void
|
|
*/
|
|
public function set_extra( $data )
|
|
{
|
|
$this->_data['extra'] = $data ? json_encode( $data ) : NULL;
|
|
}
|
|
|
|
/**
|
|
* Save Changed Columns
|
|
*
|
|
* @return void
|
|
*/
|
|
public function save()
|
|
{
|
|
parent::save();
|
|
$this->member->recountNotifications();
|
|
}
|
|
|
|
/**
|
|
* Get data from extension
|
|
*
|
|
* @return array
|
|
* @throws \RuntimeException
|
|
*/
|
|
public function getData()
|
|
{
|
|
$method = "parse_{$this->notification_key}";
|
|
|
|
foreach ( $this->notification_app->extensions( 'core', 'Notifications' ) as $class )
|
|
{
|
|
if ( method_exists( $class, $method ) )
|
|
{
|
|
$return = $class->$method( $this );
|
|
|
|
if ( !isset( $return['unread'] ) )
|
|
{
|
|
$return['unread'] = !$this->read_time;
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
}
|
|
throw new \RuntimeException;
|
|
}
|
|
} |