Use a factory for Vfs.
authorMichael J. Rubinsky <mrubinsk@horde.org>
Mon, 24 May 2010 18:28:49 +0000 (14:28 -0400)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Mon, 24 May 2010 18:28:49 +0000 (14:28 -0400)
Need to be able to specify different vfs scopes, can't assume we always want
Horde's

17 files changed:
agora/lib/Agora.php
ansel/scripts/garbage_collection.php
framework/Core/lib/Horde.php
framework/Core/lib/Horde/Core/Binder/Vfs.php
framework/Core/lib/Horde/Core/Factory/Vfs.php [new file with mode: 0644]
framework/Core/package.xml
framework/Scheduler/lib/Horde/Scheduler.php
horde/services/images/view.php
hylax/lib/Storage.php
imp/attachment.php
imp/lib/Compose.php
imp/lib/LoginTasks/SystemTask/GarbageCollection.php
imp/lib/LoginTasks/Task/DeleteAttachmentsMonthly.php
whups/lib/Driver/sql.php
whups/lib/Ticket.php
whups/lib/Whups.php
wicked/lib/Driver.php

index 6170288..4de487e 100644 (file)
@@ -227,7 +227,7 @@ class Agora {
         }
 
         try {
-            return $GLOBALS['injector']->getInstance('Horde_Vfs');
+            return $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return PEAR::raiseError($e);
         }
index 9e4e7aa..75cea26 100755 (executable)
@@ -36,7 +36,7 @@ foreach ($opts as $opt) {
     }
 }
 
-$vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+$vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
 $vfspath = '.horde/ansel/';
 $garbagepath = $vfspath . 'garbage/';
 
index 17fb312..c3a75de 100644 (file)
@@ -831,11 +831,11 @@ HTML;
     {
         global $conf;
 
-        if (!isset($conf[$name]['type'])) {
+        if ($name !== 'horde' && !isset($conf[$name]['type'])) {
             throw new Horde_Exception(_("You must configure a VFS backend."));
         }
 
-        $vfs = ($conf[$name]['type'] == 'horde')
+        $vfs = ($name == 'horde' || $conf[$name]['type'] == 'horde')
             ? $conf['vfs']
             : $conf[$name];
 
index 724125c..0da26b7 100644 (file)
@@ -7,10 +7,7 @@ class Horde_Core_Binder_Vfs implements Horde_Injector_Binder
 {
     public function create(Horde_Injector $injector)
     {
-        $vfs = VFS::singleton($GLOBALS['conf']['vfs']['type'], Horde::getDriverConfig('vfs', $GLOBALS['conf']['vfs']['type']));
-        $vfs->setLogger($injector->getInstance('Horde_Log_Logger'));
-
-        return $vfs;
+        return new Horde_Core_Factory_Vfs($injector);
     }
 
     public function equals(Horde_Injector_Binder $binder)
diff --git a/framework/Core/lib/Horde/Core/Factory/Vfs.php b/framework/Core/lib/Horde/Core/Factory/Vfs.php
new file mode 100644 (file)
index 0000000..134c59b
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * A Horde_Injector:: based Horde_Vfs:: factory.
+ *
+ * @category Horde
+ * @package  Core
+ * @author   Michael J. Rubinsky <mrubinsk@horde.org>
+ */
+
+/**
+ * A Horde_Injector:: based Horde_Vfs:: factory.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Horde
+ * @package  Core
+ * @author   Michael J. Rubinsky <mrubinsk@horde.org>
+ */
+class Horde_Core_Factory_Vfs
+{
+    /**
+     * 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;
+    }
+
+    /**
+     * Obtain the Vfs instance.
+     *
+     * @param string $scope  The vfs scope to return.
+     * 
+     * @return VFS  The VFS object
+     */
+    public function getVfs($scope)
+    {
+        $params = Horde::getVFSConfig($scope);
+        return VFS::singleton($params['type'], $params['params']);
+    }
+
+}
\ No newline at end of file
index 1e25501..e014fa0 100644 (file)
@@ -101,6 +101,7 @@ Application Framework.
        <file name="KolabStorage.php" role="php" />
        <file name="LoginTasks.php" role="php" />
        <file name="Share.php" role="php" />
+       <file name="Vfs.php" role="php" />
       </dir> <!-- /lib/Horde/Core/Factory -->
       <dir name="Log">
        <file name="Logger.php" role="php" />
@@ -274,6 +275,7 @@ Application Framework.
    <install name="lib/Horde/Core/Factory/KolabStorage.php" as="Horde/Core/Factory/KolabStorage.php" />
    <install name="lib/Horde/Core/Factory/LoginTasks.php" as="Horde/Core/Factory/LoginTasks.php" />
    <install name="lib/Horde/Core/Factory/Share.php" as="Horde/Core/Factory/Share.php" />
+   <install name="lib/Horde/Core/Factory/Vfs.php" as="Horde/Core/Factory/Vfs.php" />
    <install name="lib/Horde/Core/Log/Logger.php" as="Horde/Core/Log/Logger.php" />
    <install name="lib/Horde/Core/LoginTasks/Backend/Horde.php" as="Horde/Core/LoginTasks/Backend/Horde.php" />
    <install name="lib/Horde/Core/Notification/Hordelog.php" as="Horde/Core/Notification/Hordelog.php" />
index 68330ff..57dc0d3 100644 (file)
@@ -82,7 +82,7 @@ class Horde_Scheduler
     public function serialize($id = '')
     {
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
             $vfs->writeData('.horde/scheduler', Horde_String::lower(get_class($this)) . $id, serialize($this), true);
             return true;
         } catch (VFS_Exception $e) {
index e531c61..c0a9b04 100644 (file)
@@ -34,7 +34,7 @@ case 'vfs':
     /* Getting a file from Horde's VFS. */
     $path = Horde_Util::getFormData('p');
     try {
-        $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+        $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         $file_data = $vfs->read($path, $file);
     } catch (VFS_Exception $e) {
         Horde::logMessage(sprintf('Error displaying image [%s]: %s', $path . '/' . $file, $e->getMessage()), 'ERR');
index da59853..7d9ff7e 100644 (file)
@@ -39,7 +39,7 @@ class Hylax_Storage {
             Horde::fatal(_("You must configure a VFS backend to use Hylax."), __FILE__, __LINE__);
         }
 
-        $this->_vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+        $this->_vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
     }
 
     function saveFaxData($data, $type = '.ps')
index cab1185..57033bc 100644 (file)
@@ -36,7 +36,7 @@ if (is_null($mail_user) || is_null($time_stamp) || is_null($file_name)) {
 
 // Initialize the VFS.
 try {
-    $vfsroot = $injector->getInstance('Horde_Vfs');
+    $vfsroot = $injector->getInstance('Horde_Vfs')->getVfs();
 } catch (VFS_Exception $e) {
     throw new IMP_Exception(sprintf(_("Could not create the VFS backend: %s"), $e->getMessage()));
 }
index 7241b6c..991022c 100644 (file)
@@ -1909,7 +1909,7 @@ class IMP_Compose
         /* Store in VFS. */
         if ($GLOBALS['conf']['compose']['use_vfs']) {
             try {
-                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
                 $cacheID = uniqid(mt_rand());
 
                 if ($vfs_file) {
@@ -1968,7 +1968,7 @@ class IMP_Compose
             case 'vfs':
                 /* Delete from VFS. */
                 try {
-                    $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                    $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
                     $vfs->deleteFile(self::VFS_ATTACH_PATH, $atc['filename']);
                 } catch (VFS_Exception $e) {}
                 break;
@@ -2062,7 +2062,7 @@ class IMP_Compose
         case 'vfs':
             // TODO: Use streams
             try {
-                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
                 $part->setContents($vfs->read(self::VFS_ATTACH_PATH, $this->_cache[$id]['filename']));
             } catch (VFS_Exception $e) {}
             break;
@@ -2345,7 +2345,7 @@ class IMP_Compose
         $baseurl = Horde::applicationUrl('attachment.php', true)->setRaw(true);
 
         try {
-            $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             throw new IMP_Compose_Exception($e);
         }
@@ -2645,7 +2645,7 @@ class IMP_Compose
         }
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
             $vfs->writeData(self::VFS_DRAFTS_PATH, hash('md5', Horde_Util::getFormData('user')), $body, true);
 
             $GLOBALS['notification']->push(_("The message you were composing has been saved as a draft. The next time you login, you may resume composing your message."));
@@ -2664,7 +2664,7 @@ class IMP_Compose
         $filename = hash('md5', Horde_Auth::getAuth());
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return;
         }
index d71abc7..5168671 100644 (file)
@@ -35,7 +35,7 @@ class IMP_LoginTasks_SystemTask_GarbageCollection extends Horde_LoginTasks_Syste
         /* Do garbage collection on compose VFS data. */
         if ($GLOBALS['conf']['compose']['use_vfs']) {
             try {
-                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
                 VFS_GC::gc($vfs, IMP_Compose::VFS_ATTACH_PATH, 86400);
             } catch (VFS_Exception $e) {}
         }
index d6e4e7d..ffe6816 100644 (file)
@@ -36,7 +36,7 @@ class IMP_LoginTasks_Task_DeleteAttachmentsMonthly extends Horde_LoginTasks_Task
         $del_time = gmmktime(0, 0, 0, date('n') - $GLOBALS['prefs']->getValue('delete_attachments_monthly_keep'), 1, date('Y'));
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return false;
         }
index 5357257..d43924a 100644 (file)
@@ -500,7 +500,7 @@ class Whups_Driver_sql extends Whups_Driver {
 
         if (!empty($GLOBALS['conf']['vfs']['type'])) {
             try {
-                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
             } catch (VFS_Exception $e) {
                 return PEAR::raiseError($e->getMessage());
             }
index 0cdf295..d159b55 100644 (file)
@@ -432,7 +432,7 @@ class Whups_Ticket {
         }
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return PEAR::raiseError($e->getMessage());
         }
@@ -482,7 +482,7 @@ class Whups_Ticket {
         }
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return PEAR::raiseError($e->getMessage());
         }
index 3ca9355..15b5250 100644 (file)
@@ -788,7 +788,7 @@ class Whups {
         }
 
         try {
-            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+            $vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
         } catch (VFS_Exception $e) {
             return PEAR::raiseError($vfs->getMessage());
         }
index a043379..30cbcb2 100644 (file)
@@ -60,7 +60,7 @@ class Wicked_Driver {
     {
         if (!$this->_vfs) {
             try {
-                $this->_vfs = $GLOBALS['injector']->getInstance('Horde_Vfs');
+                $this->_vfs = $GLOBALS['injector']->getInstance('Horde_Vfs')->getVfs();
             } catch (VFS_Exception $e) {
                 return PEAR::raiseError($e->getMessage());
             }