Page MenuHomeIn-Portal Phabricator

subscription_manager.php
No OneTemporary

File Metadata

Created
Sat, Feb 1, 6:28 AM

subscription_manager.php

<?php
/**
* @version $Id: subscription_manager.php 15287 2012-04-11 08:50:20Z alex $
* @package In-Portal
* @copyright Copyright (C) 1997 - 2012 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class kSubscriptionManager extends kBase {
/**
* List of subscriptions (instances of kSubcriptionItem objects)
*
* @var Array
* @access protected
*/
protected $subscriptions = Array ();
/**
* Adds set of fields, that uniquely identifies subscription
*
* @param Array $fields
* @return void
*/
public function add($fields)
{
$this->subscriptions[] = new kSubscriptionItem($fields);
}
/**
* Detects if current user is subscribed to new posts in given topic
*
* @return bool
* @access public
*/
public function subscribed()
{
foreach ($this->subscriptions as $subscription) {
if ( !$subscription->getSubscription()->isLoaded() ) {
/* @var $subscription kSubscriptionItem */
return false;
}
}
return true;
}
/**
* Subscribes current user to new posts in a given topic
*
* @return bool
* @access public
*/
public function subscribe()
{
foreach ($this->subscriptions as $subscription) {
if ( !$subscription->subscribe() ) {
/* @var $subscription kSubscriptionItem */
return false;
}
}
return true;
}
/**
* Unsubscribes current user from reciving e-mails about new posts in a gvein topic
*
* @return bool
* @access public
*/
public function unsubscribe()
{
foreach ($this->subscriptions as $subscription) {
if ( !$subscription->unsubscribe() ) {
/* @var $subscription kSubscriptionItem */
return false;
}
}
return true;
}
/**
* Returns e-mail event id or throws an exception, when such event not found
*
* @param string $email_event_name
* @param int $type
* @return string
* @throws Exception
* @access public
*/
public function getEmailEventId($email_event_name, $type = EmailEvent::EVENT_TYPE_FRONTEND)
{
$sql = 'SELECT EventId
FROM ' . TABLE_PREFIX . 'EmailEvents
WHERE Event = ' . $this->Conn->qstr($email_event_name) . ' AND Type = ' . $type;
$id = $this->Conn->GetOne($sql);
if ( !$id ) {
throw new Exception('E-mail event "' . $email_event_name . '" not found');
}
return $id;
}
}
class kSubscriptionItem extends kBase {
/**
* Fields set, that uniquely identifies subscription
*
* @var Array
* @access protected
*/
protected $fields = Array ();
/**
* Creates new subscription item
*
* @param Array $fields
* @access public
*/
public function __construct($fields)
{
parent::__construct();
$this->fields = $fields;
}
/**
* Returns user subscription
*
* @param bool $reload
* @return kBase|kDBItem
* @access public
*/
public function getSubscription($reload = false)
{
$special = kUtil::crc32(serialize($this->fields));
$subscription = $this->Application->recallObject('system-event-subscription.' . $special, null, Array ('skip_autoload' => true));
/* @var $subscription kDBItem */
if ( !$subscription->isLoaded() || $reload ) {
$subscription->Load($this->fields);
}
return $subscription;
}
/**
* Subscribes user
*
* @return bool
* @access public
*/
public function subscribe()
{
$subscription = $this->getSubscription();
if ( $subscription->isLoaded() ) {
return true;
}
$subscription->SetDBFieldsFromHash($this->fields);
return $subscription->Create();
}
/**
* Unsubscribes user
*
* @return bool
* @access public
*/
public function unsubscribe()
{
$subscription = $this->getSubscription();
if ( !$subscription->isLoaded() ) {
return true;
}
$temp_handler = $this->Application->recallObject($subscription->getPrefixSpecial() . '_TempHandler', 'kTempTablesHandler');
/* @var $temp_handler kTempTablesHandler */
$temp_handler->DeleteItems($subscription->Prefix, $subscription->Special, Array ($subscription->GetID()));
return true;
}
}

Event Timeline