Use injector to load IMP_Mailbox
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 14 Apr 2010 10:31:58 +0000 (04:31 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 14 Apr 2010 20:03:54 +0000 (14:03 -0600)
13 files changed:
imp/lib/Ajax/Application.php
imp/lib/Application.php
imp/lib/Injector/Binder/Mailbox.php [new file with mode: 0644]
imp/lib/Injector/Factory/Mailbox.php [new file with mode: 0644]
imp/lib/Mailbox.php
imp/lib/Message.php
imp/lib/Views/ListMessages.php
imp/mailbox-mimp.php
imp/mailbox.php
imp/message-mimp.php
imp/message.php
imp/rss.php
imp/thread.php

index 8909cb8..8c51a81 100644 (file)
@@ -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);
     }
 
     /**
index d36ba5b..0288e49 100644 (file)
@@ -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 (file)
index 0000000..ee70b00
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Binder for IMP_Mailbox::.
+ *
+ * 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.
+ *
+ * @author  Michael Slusarz <slusarz@horde.org>
+ * @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 (file)
index 0000000..7de2071
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * A Horde_Injector:: based IMP_Mailbox:: factory.
+ *
+ * PHP version 5
+ *
+ * @category Horde
+ * @package  IMP
+ * @author   Michael Slusarz <slusarz@horde.org>
+ * @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 <slusarz@horde.org>
+ * @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];
+    }
+
+}
index 19b472b..e113eae 100644 (file)
 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);
index c25ad27..a04b1a9 100644 (file)
@@ -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);
                 }
index 4e262f5..ebc1411 100644 (file)
@@ -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']);
 
index 78b39e6..40ffbbe 100644 (file)
@@ -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. */
index 2d9967d..0543be7 100644 (file)
@@ -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');
 
index 5a697b4..3c0bc45 100644 (file)
@@ -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;
index 3a1166c..3ff8ddb 100644 (file)
@@ -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';
index 5e75e57..7663e90 100644 (file)
@@ -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()
index 2d818e1..14f928a 100644 (file)
@@ -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') {