From: Michael M Slusarz Date: Wed, 14 Apr 2010 10:31:58 +0000 (-0600) Subject: Use injector to load IMP_Mailbox X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b51f0bb915b2ec67c21722a2e7054ff70253b236;p=horde.git Use injector to load IMP_Mailbox --- diff --git a/imp/lib/Ajax/Application.php b/imp/lib/Ajax/Application.php index 8909cb83e..8c51a812f 100644 --- a/imp/lib/Ajax/Application.php +++ b/imp/lib/Ajax/Application.php @@ -649,7 +649,7 @@ class IMP_Ajax_Application extends Horde_Ajax_Application_Base $result->ViewPort = $this->_viewPortData(true); } else { $result->ViewPort = new stdClass; - $result->ViewPort->updatecacheid = IMP_Mailbox::singleton($this->_vars->view)->getCacheID($this->_vars->view); + $result->ViewPort->updatecacheid = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($this->_vars->view)->getCacheID($this->_vars->view); $result->ViewPort->view = $this->_vars->view; } return $result; @@ -848,7 +848,7 @@ class IMP_Ajax_Application extends Horde_Ajax_Application_Base $result = $this->_checkUidvalidity($result); } elseif (!$change) { /* Only update cacheid info if it changed. */ - $cacheid = IMP_Mailbox::singleton($this->_vars->view)->getCacheID($this->_vars->view); + $cacheid = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($this->_vars->view)->getCacheID($this->_vars->view); if ($cacheid != $this->_vars->cacheid) { $result->ViewPort = new stdClass; $result->ViewPort->updatecacheid = $cacheid; @@ -1648,7 +1648,7 @@ class IMP_Ajax_Application extends Horde_Ajax_Application_Base $result->ViewPort = $this->_viewPortData(true); } else { $result->ViewPort = new stdClass; - $result->ViewPort->updatecacheid = IMP_Mailbox::singleton($this->_vars->view)->getCacheID($this->_vars->view); + $result->ViewPort->updatecacheid = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($this->_vars->view)->getCacheID($this->_vars->view); $result->ViewPort->view = $this->_vars->view; } @@ -1693,7 +1693,7 @@ class IMP_Ajax_Application extends Horde_Ajax_Application_Base } } - return (IMP_Mailbox::singleton($this->_vars->view)->getCacheID($this->_vars->view) != $this->_vars->cacheid); + return ($GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($this->_vars->view)->getCacheID($this->_vars->view) != $this->_vars->cacheid); } /** diff --git a/imp/lib/Application.php b/imp/lib/Application.php index d36ba5b18..0288e4916 100644 --- a/imp/lib/Application.php +++ b/imp/lib/Application.php @@ -99,6 +99,7 @@ class IMP_Application extends Horde_Registry_Application 'IMP_Folder' => new IMP_Injector_Binder_Folder(), 'IMP_Identity' => new IMP_Injector_Binder_Identity(), 'IMP_Imap_Tree' => new IMP_Injector_Binder_Imaptree(), + 'IMP_Mailbox' => new IMP_Injector_Binder_Mailbox(), 'IMP_Quota' => new IMP_Injector_Binder_Quota(), 'IMP_Sentmail' => new IMP_Injector_Binder_Sentmail() ); diff --git a/imp/lib/Injector/Binder/Mailbox.php b/imp/lib/Injector/Binder/Mailbox.php new file mode 100644 index 000000000..ee70b0030 --- /dev/null +++ b/imp/lib/Injector/Binder/Mailbox.php @@ -0,0 +1,29 @@ + + * @package IMP + */ +class IMP_Injector_Binder_Mailbox implements Horde_Injector_Binder +{ + /** + */ + public function create(Horde_Injector $injector) + { + return new IMP_Injector_Factory_Mailbox($injector); + } + + /** + */ + public function equals(Horde_Injector_Binder $binder) + { + return false; + } + +} diff --git a/imp/lib/Injector/Factory/Mailbox.php b/imp/lib/Injector/Factory/Mailbox.php new file mode 100644 index 000000000..7de2071ba --- /dev/null +++ b/imp/lib/Injector/Factory/Mailbox.php @@ -0,0 +1,79 @@ + + * @license http://www.fsf.org/copyleft/gpl.html GPL + * @link http://pear.horde.org/index.php?package=IMP + */ + +/** + * A Horde_Injector:: based IMP_Mailbox:: factory. + * + * Copyright 2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (GPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. + * + * @category Horde + * @package IMP + * @author Michael Slusarz + * @license http://www.fsf.org/copyleft/gpl.html GPL + * @link http://pear.horde.org/index.php?package=IMP + */ +class IMP_Injector_Factory_Mailbox +{ + /** + * Instances. + * + * @var array + */ + private $_instances = array(); + + /** + * The injector. + * + * @var Horde_Injector + */ + private $_injector; + + /** + * Constructor. + * + * @param Horde_Injector $injector The injector to use. + */ + public function __construct(Horde_Injector $injector) + { + $this->_injector = $injector; + } + + /** + * Return the Horde_Mailbox:: instance. + * + * @param string $mailbox The mailbox name. + * @param string $msgmbox The mailbox name of the current index. + * @param integer $uid The message UID of the current index. + * + * @return IMP_Mailbox The singleton mailbox instance. + * @throws IMP_Exception + */ + public function getOb($mailbox, $msgmbox = null, $uid = null) + { + $uid = (is_null($msgmbox) || is_null($uid)) + ? null + : $uid . IMP::IDX_SEP . $msgmbox; + + if (!isset($this->_instances[$mailbox])) { + $this->_instances[$mailbox] = new IMP_Mailbox($mailbox, $uid); + } elseif (!is_null($uid)) { + $this->_instances[$mailbox]->setIndex($uid); + } + + return $this->_instances[$mailbox]; + } + +} diff --git a/imp/lib/Mailbox.php b/imp/lib/Mailbox.php index 19b472b25..e113eaed7 100644 --- a/imp/lib/Mailbox.php +++ b/imp/lib/Mailbox.php @@ -14,13 +14,6 @@ class IMP_Mailbox { /** - * Singleton instances - * - * @var array - */ - protected static $_instances = array(); - - /** * The mailbox to work with. * * @var string @@ -71,33 +64,12 @@ class IMP_Mailbox protected $_changed = false; /** - * Attempts to return a reference to a concrete instance. - * It will only create a new instance if no instance with the same - * parameters currently exists. - * - * @param string $mailbox See constructor. - * @param string $uid UID string (UID . IMP::IDX_SEP . Mailbox). - * - * @return IMP_Mailbox The created instance. - */ - static public function singleton($mailbox, $uid = null) - { - if (!isset(self::$_instances[$mailbox])) { - self::$_instances[$mailbox] = new self($mailbox, $uid); - } elseif (!is_null($uid)) { - self::$_instances[$mailbox]->setIndex($uid); - } - - return self::$_instances[$mailbox]; - } - - /** * Constructor. * * @param string $mailbox The mailbox to work with. * @param string $uid UID string (UID . IMP::IDX_SEP . Mailbox). */ - protected function __construct($mailbox, $uid = null) + public function __construct($mailbox, $uid = null) { $this->_mailbox = $mailbox; $this->_searchmbox = $GLOBALS['imp_search']->isSearchMbox($mailbox); diff --git a/imp/lib/Message.php b/imp/lib/Message.php index c25ad27f4..a04b1a956 100644 --- a/imp/lib/Message.php +++ b/imp/lib/Message.php @@ -116,7 +116,7 @@ class IMP_Message try { $GLOBALS['imp_imap']->ob()->copy($mbox, $targetMbox, array('ids' => $msgIndices, 'move' => $imap_move)); - $imp_mailbox = IMP_Mailbox::singleton($mbox); + $imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($mbox); if (($action == 'move') && $imp_mailbox->isBuilt()) { $imp_mailbox->removeMsgs(array($mbox => $msgIndices)); } @@ -211,7 +211,7 @@ class IMP_Message try { $GLOBALS['imp_imap']->ob()->copy($mbox, $trash, array('ids' => $msgIndices, 'move' => true)); - $imp_mailbox = IMP_Mailbox::singleton($mbox); + $imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($mbox); if ($imp_mailbox->isBuilt()) { $imp_mailbox->removeMsgs(array($mbox => $msgIndices)); } @@ -534,7 +534,7 @@ class IMP_Message $this->delete($indices, array('nuke' => true, 'keeplog' => true)); - $imp_mailbox = IMP_Mailbox::singleton($mbox); + $imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($mbox); $imp_mailbox->setIndex(reset($uid)); /* We need to replace the old index in the query string with the @@ -682,7 +682,7 @@ class IMP_Message try { $update_list[$key] = $GLOBALS['imp_imap']->ob()->expunge($key, array('ids' => is_array($val) ? $val : array(), 'list' => $msg_list)); - $imp_mailbox = IMP_Mailbox::singleton($key); + $imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($key); if ($imp_mailbox->isBuilt()) { $imp_mailbox->removeMsgs(is_array($val) ? array($key => $val) : true); } diff --git a/imp/lib/Views/ListMessages.php b/imp/lib/Views/ListMessages.php index 4e262f5fc..ebc14119f 100644 --- a/imp/lib/Views/ListMessages.php +++ b/imp/lib/Views/ListMessages.php @@ -88,7 +88,7 @@ class IMP_Views_ListMessages } /* Generate the sorted mailbox list now. */ - $imp_mailbox = IMP_Mailbox::singleton($mbox); + $imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($mbox); $sorted_list = $imp_mailbox->getSortedList(); $msgcount = count($sorted_list['s']); diff --git a/imp/mailbox-mimp.php b/imp/mailbox-mimp.php index 78b39e655..40ffbbeb6 100644 --- a/imp/mailbox-mimp.php +++ b/imp/mailbox-mimp.php @@ -121,7 +121,7 @@ case 'rs': } /* Build the list of messages in the mailbox. */ -$imp_mailbox = IMP_Mailbox::singleton($imp_mbox['mailbox']); +$imp_mailbox = $injector->getInstance('IMP_Mailbox')->getOb($imp_mbox['mailbox']); $pageOb = $imp_mailbox->buildMailboxPage($vars->p, $vars->s); /* Generate page title. */ diff --git a/imp/mailbox.php b/imp/mailbox.php index 2d9967d1f..0543be7dd 100644 --- a/imp/mailbox.php +++ b/imp/mailbox.php @@ -223,7 +223,7 @@ if ($conf['user']['allow_folders']) { } /* Build the list of messages in the mailbox. */ -$imp_mailbox = IMP_Mailbox::singleton($imp_mbox['mailbox']); +$imp_mailbox = $injector->getInstance('IMP_Mailbox')->getOb($imp_mbox['mailbox']); $pageOb = $imp_mailbox->buildMailboxPage(Horde_Util::getFormData('page'), $start); $show_preview = $prefs->getValue('preview_enabled'); diff --git a/imp/message-mimp.php b/imp/message-mimp.php index 5a697b4bb..3c0bc4532 100644 --- a/imp/message-mimp.php +++ b/imp/message-mimp.php @@ -25,7 +25,7 @@ Horde_Nls::setTimeZone(); $vars = Horde_Variables::getDefaultVariables(); /* Make sure we have a valid index. */ -$imp_mailbox = IMP_Mailbox::singleton($imp_mbox['mailbox'], $imp_mbox['uid'] . IMP::IDX_SEP . $imp_mbox['thismailbox']); +$imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($imp_mbox['mailbox'], $imp_mbox['thismailbox'], $imp_mbox['uid']); if (!$imp_mailbox->isValidIndex(false)) { header('Location: ' . IMP::generateIMPUrl('mailbox-mimp.php', $imp_mbox['mailbox'])->setRaw(true)->add('a', 'm')); exit; diff --git a/imp/message.php b/imp/message.php index 3a1166c1d..3ff8ddb68 100644 --- a/imp/message.php +++ b/imp/message.php @@ -32,7 +32,7 @@ if (!$imp_search->isSearchMbox($imp_mbox['mailbox'])) { } /* Make sure we have a valid index. */ -$imp_mailbox = IMP_Mailbox::singleton($imp_mbox['mailbox'], $imp_mbox['uid'] . IMP::IDX_SEP . $imp_mbox['thismailbox']); +$imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($imp_mbox['mailbox'], $imp_mbox['thismailbox'], $imp_mbox['uid']); if (!$imp_mailbox->isValidIndex(false)) { _returnToMailbox(null, 'message_missing'); require IMP_BASE . '/mailbox.php'; diff --git a/imp/rss.php b/imp/rss.php index 5e75e57ba..7663e9001 100644 --- a/imp/rss.php +++ b/imp/rss.php @@ -43,7 +43,7 @@ if (!empty($request)) { } /* Obtain some information describing the mailbox state. */ -$imp_mailbox = IMP_Mailbox::singleton($mailbox); +$imp_mailbox = $injector->getInstance('IMP_Mailbox')->getOb($mailbox); $total_num = $imp_mailbox->getMessageCount(); $unseen_num = ($imp_search->isVINBOXFolder($mailbox)) ? $imp_mailbox->getMessageCount() diff --git a/imp/thread.php b/imp/thread.php index 2d818e1d3..14f928a8c 100644 --- a/imp/thread.php +++ b/imp/thread.php @@ -20,7 +20,7 @@ Horde_Nls::setTimeZone(); */ $mode = Horde_Util::getFormData('mode', 'thread'); -$imp_mailbox = IMP_Mailbox::singleton($imp_mbox['mailbox'], $imp_mbox['uid'] . IMP::IDX_SEP . $imp_mbox['thismailbox']); +$imp_mailbox = $GLOBALS['injector']->getInstance('IMP_Mailbox')->getOb($imp_mbox['mailbox'], $imp_mbox['thismailbox'], $imp_mbox['uid']); $error = false; if ($mode == 'thread') {