Convert gollem to Horde_Session
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Nov 2010 19:42:58 +0000 (12:42 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Thu, 18 Nov 2010 16:39:15 +0000 (09:39 -0700)
gollem/clipboard.php
gollem/lib/Api.php
gollem/lib/Application.php
gollem/lib/Auth.php
gollem/lib/Gollem.php
gollem/manager.php
gollem/selectlist.php

index 405dc1b..85feaba 100644 (file)
@@ -31,7 +31,7 @@ $template->set('dir', $dir);
 $template->set('manager_url', Horde::url('manager.php'));
 
 $entry = array();
-foreach ($_SESSION['gollem']['clipboard'] as $key => $val) {
+foreach ($session->get('gollem', 'clipboard') as $key => $val) {
     $entry[] = array(
         'copy' => ($val['action'] == 'copy'),
         'cut' => ($val['action'] == 'cut'),
index 016a5ce..4194f19 100644 (file)
@@ -255,10 +255,12 @@ class Gollem_Api extends Horde_Registry_Api
             $backend = Gollem::getPreferredBackend();
         }
 
+        $backend_config = $GLOBALS['session']->get('gollem', 'backends/' . $backend);
+
         return Horde::url('view.php')->add(array(
             'actionID' => 'view_file',
             'dir' => $dir,
-            'driver' => $_SESSION['gollem']['backends'][$backend]['driver'],
+            'driver' => $backend_config['driver'],
             'file' => $file,
             'type' => substr($file, strrpos($file, '.') + 1)
         ));
@@ -312,12 +314,14 @@ class Gollem_Api extends Horde_Registry_Api
      */
     public function selectlistResults($selectid)
     {
-        if (!isset($_SESSION['gollem']['selectlist'][$selectid]['files'])) {
+        $selectlist = $GLOBALS['session']->get('gollem', 'selectlist/' . $selectid);
+
+        if (!isset($selectlist['files'])) {
             return null;
         }
 
         $list = array();
-        foreach ($_SESSION['gollem']['selectlist'][$selectid]['files'] as $val) {
+        foreach ($selectlist['files'] as $val) {
             list($dir, $filename) = explode('|', $val);
             $list[] = array($dir => $filename);
         }
@@ -335,11 +339,13 @@ class Gollem_Api extends Horde_Registry_Api
      */
     public function returnFromSelectlist($selectid, $index)
     {
-        if (!isset($_SESSION['gollem']['selectlist'][$selectid]['files'][$index])) {
+        $selectlist = $GLOBALS['session']->get('gollem', 'selectlist/' . $selectid);
+
+        if (!isset($selectlist['files'][$index])) {
             return null;
         }
 
-        list($dir, $filename) = explode('|', $_SESSION['gollem']['selectlist'][$selectid]['files'][$index]);
+        list($dir, $filename) = explode('|', $selectlist['files'][$index]);
         return $GLOBALS['gollem_vfs']->read($dir, $filename);
     }
 
@@ -364,7 +370,9 @@ class Gollem_Api extends Horde_Registry_Api
             foreach ($files as $file) {
                 $list[] = key($file) . '|' . current($file);
             }
-            $_SESSION['gollem']['selectlist'][$selectid]['files'] = $list;
+            $selectlist = $GLOBALS['session']->get('gollem', 'selectlist/' . $selectid, Horde_Session::TYPE_ARRAY);
+            $selectlist['files'] = $list;
+            $GLOBALS['session']->set('gollem', 'selectlist/' . $selectid, $selectlist);
         }
 
         return $selectid;
@@ -382,7 +390,7 @@ class Gollem_Api extends Horde_Registry_Api
             : $path;
 
         // Validate and perform permissions checks on the requested backend
-        if (!isset($_SESSION['gollem']['backends'][$backend_key])) {
+        if (!$GLOBALS['session']->exists('gollem', 'backends/' . $backend_key)) {
             throw new Gollem_Exception(sprintf(_("Invalid backend requested: %s"), $backend_key));
         }
 
index ede0136..5f6797c 100644 (file)
@@ -58,9 +58,10 @@ class Gollem_Application extends Horde_Registry_Application
     {
         // Set the global $gollem_be variable to the current backend's
         // parameters.
-        $GLOBALS['gollem_be'] = empty($_SESSION['gollem']['backend_key'])
-            ? null
-            : $_SESSION['gollem']['backends'][$_SESSION['gollem']['backend_key']];
+        $backend_key = $GLOBALS['session']->get('gollem', 'backend_key');
+        $GLOBALS['gollem_be'] = $backend_key
+            ? $GLOBALS['session']->get('gollem', 'backends/' . $backend_key)
+            : null;
 
         // Load the backend list.
         Gollem::loadBackendList();
@@ -163,20 +164,17 @@ class Gollem_Application extends Horde_Registry_Application
     {
         $menu->add(Horde::url('manager.php')->add('dir', Gollem::getHome()), _("_My Home"), 'folder_home.png');
 
-        if (!empty($_SESSION['gollem'])) {
-            $backend_key = $_SESSION['gollem']['backend_key'];
-            if ($GLOBALS['registry']->isAdmin()) {
-                $menu->add(Horde::url('permissions.php')->add('backend', $backend_key), _("_Permissions"), 'perms.png');
-            }
+        if ($GLOBALS['registry']->isAdmin()) {
+            $menu->add(Horde::url('permissions.php')->add('backend', $backend_key), _("_Permissions"), 'perms.png');
+        }
 
-            if ($_SESSION['gollem']['backends'][$backend_key]['quota_val'] != -1) {
-                if ($GLOBALS['browser']->hasFeature('javascript')) {
-                    $quota_url = 'javascript:' . Horde::popupJs(Horde::url('quota.php'), array('params' => array('backend' => $backend_key), 'height' => 300, 'width' => 300, 'urlencode' => true));
-                } else {
-                    $quota_url = Horde::url('quota.php')->add('backend', $backend_key);
-                }
-                $menu->add($quota_url, _("Check Quota"), 'info_icon.png');
+        if ($GLOBALS['gollem_be']['quota_val'] != -1) {
+            if ($GLOBALS['browser']->hasFeature('javascript')) {
+                $quota_url = 'javascript:' . Horde::popupJs(Horde::url('quota.php'), array('params' => array('backend' => $backend_key), 'height' => 300, 'width' => 300, 'urlencode' => true));
+            } else {
+                $quota_url = Horde::url('quota.php')->add('backend', $backend_key);
             }
+            $menu->add($quota_url, _("Check Quota"), 'info_icon.png');
         }
     }
 
index 3af1ff1..a314234 100644 (file)
@@ -32,7 +32,7 @@ class Gollem_Auth
                                  $login = false)
     {
         // Check for for hordeauth.
-        if (empty($_SESSION['gollem']['backend_key'])) {
+        if (!$GLOBALS['session']->exists('gollem', 'backend_key')) {
             if (Gollem::canAutoLogin()) {
                 $backend_key = Gollem::getPreferredBackend();
 
@@ -78,7 +78,7 @@ class Gollem_Auth
      */
     protected function _authenticate($userID, $credentials)
     {
-        if (!(isset($_SESSION['gollem']) && is_array($_SESSION['gollem']))) {
+        if (!($backend_key = $GLOBALS['session']->exists('gollem', 'backend_key'))) {
             if (isset($GLOBALS['prefs'])) {
                 $GLOBALS['prefs']->cleanup(true);
             }
@@ -86,7 +86,7 @@ class Gollem_Auth
         }
 
         // Allocate a global VFS object
-        $GLOBALS['gollem_vfs'] = Gollem::getVFSOb($_SESSION['gollem']['backend_key']);
+        $GLOBALS['gollem_vfs'] = Gollem::getVFSOb($backend_key);
         if (is_a($GLOBALS['gollem_vfs'], 'PEAR_Error')) {
             throw new Horde_Exception($GLOBALS['gollem_vfs']);
         }
@@ -194,7 +194,7 @@ class Gollem_Auth
      */
     function createSession($key, $user = null, $pass = null, $args = array())
     {
-        global $conf;
+        global $conf, $session;
 
         /* Make sure we have a key and that it is valid. */
         if (empty($key) || (substr($key, 0, 1) == '_')) {
@@ -211,19 +211,11 @@ class Gollem_Auth
             return false;
         }
 
-        /* Create gollem session object if it doesn't already exist. */
-        if (!isset($_SESSION['gollem'])) {
-            $_SESSION['gollem'] = array();
-            $_SESSION['gollem']['backends'] = array();
-            $_SESSION['gollem']['selectlist'] = array();
-        }
-        $_SESSION['gollem']['backends'][$key] = $backends[$key];
-        $GLOBALS['gollem_be'] = &$_SESSION['gollem']['backends'][$key];
-        $ptr = &$_SESSION['gollem']['backends'][$key];
+        $ptr = $backends[$key];
         $ptr['params'] = array_merge($ptr['params'], $args);
 
         /* Set the current backend as active. */
-        $_SESSION['gollem']['backend_key'] = $key;
+        $session->set('gollem', 'backend_key', $key);
 
         /* Set username now. Don't set the current username if the backend
          * already has a username defined. */
@@ -246,8 +238,8 @@ class Gollem_Auth
         /* Try to authenticate with the given information. */
         $auth_gollem = new Gollem_Auth();
         if ($auth_gollem->authenticate(null, null, true) !== true) {
-            unset($_SESSION['gollem']['backends'][$key]);
-            $_SESSION['gollem']['backend_key'] = null;
+            $session->remove('gollem', 'backends/' . $key);
+            $session->remove('gollem', 'backend_key');
             return false;
         }
 
@@ -278,8 +270,8 @@ class Gollem_Auth
             $error_msg = 'Backend Configuration Error: Home directory not below root.';
             $auth_gollem->gollemSetAuthErrorMsg($error_msg);
             Horde::logMessage($error_msg, 'ERR');
-            unset($_SESSION['gollem']['backends'][$key]);
-            $_SESSION['gollem']['backend_key'] = null;
+            $session->remove('gollem', 'backends/' . $key);
+            $session->remove('gollem', 'backend_key');
             return false;
         }
 
@@ -294,8 +286,8 @@ class Gollem_Auth
                     $error_msg = 'Backend Configuration Error: Could not create home directory ' . $ptr['home'] . '.';
                     $auth_gollem->gollemSetAuthErrorMsg($error_msg);
                     Horde::logMessage($error_msg, 'ERR');
-                    unset($_SESSION['gollem']['backends'][$key]);
-                    $_SESSION['gollem']['backend_key'] = null;
+                    $session->remove('gollem', 'backends/' . $key);
+                    $session->remove('gollem', 'backend_key');
                     return false;
                 }
             }
@@ -305,15 +297,11 @@ class Gollem_Auth
         $ptr['autologin'] = Gollem::canAutoLogin(true);
 
         /* Cache the backend_list in the session. */
-        if (empty($_SESSION['gollem']['be_list'])) {
-            Gollem::loadBackendList();
-            $_SESSION['gollem']['be_list'] = $GLOBALS['gollem_backends'];
-        }
+        Gollem::loadBackendList();
+        $session->set('gollem', 'be_list', $GLOBALS['gollem_backends']);
 
-        /* Initialize clipboard. */
-        if (!isset($_SESSION['gollem']['clipboard'])) {
-            $_SESSION['gollem']['clipboard'] = array();
-        }
+        $GLOBALS['gollem_be'] = $ptr;
+        $session->set('gollem', 'backends/' . $key, $ptr);
 
         /* Call Gollem::changeDir() to make sure the label is set. */
         Gollem::changeDir();
@@ -328,8 +316,8 @@ class Gollem_Auth
      */
     function changeBackend($key)
     {
-        $_SESSION['gollem']['backend_key'] = $key;
-        $GLOBALS['gollem_be'] = &$_SESSION['gollem']['backends'][$key];
+        $GLOBALS['session']->set('gollem', 'backend_key', $key);
+        $GLOBALS['gollem_be'] = $GLOBALS['session']->get('gollem', 'backends/' . $key);
     }
 
 }
index ea01bd7..a9e5790 100644 (file)
@@ -250,8 +250,9 @@ class Gollem
      */
     static protected function _getCacheID($dir)
     {
-        global $prefs;
-        return implode('|', array($GLOBALS['registry']->getAuth(), $_SESSION['gollem']['backend_key'], $prefs->getValue('show_dotfiles'), $prefs->getValue('sortdirsfirst'), $prefs->getValue('sortby'), $prefs->getValue('sortdir'), $dir));
+        global $prefs, $session;
+
+        return implode('|', array($GLOBALS['registry']->getAuth(), $session->get('gollem', 'backend_key'), $prefs->getValue('show_dotfiles'), $prefs->getValue('sortdirsfirst'), $prefs->getValue('sortby'), $prefs->getValue('sortdir'), $dir));
     }
 
     /**
@@ -475,10 +476,12 @@ class Gollem
     static protected function _copyFile($mode, $backend_f, $dir, $name,
                                         $backend_t, $newdir)
     {
+        $backend_key = $GLOBALS['session']->get('gollem', 'backend_key');
+
         /* If the from/to backends are the same, we can just use the built-in
            VFS functions. */
         if ($backend_f == $backend_t) {
-            if ($backend_f == $_SESSION['gollem']['backend_key']) {
+            if ($backend_f == $backend_key) {
                 $ob = &$GLOBALS['gollem_vfs'];
             } else {
                 $ob = Gollem::getVFSOb($backend_f);
@@ -488,14 +491,14 @@ class Gollem
         }
 
         /* Else, get the two VFS objects and copy/move the files. */
-        if ($backend_f == $_SESSION['gollem']['backend_key']) {
+        if ($backend_f == $backend_key) {
             $from_be = &$GLOBALS['gollem_vfs'];
         } else {
             $from_be = Gollem::getVFSOb($backend_f);
             $from_be->checkCredentials();
         }
 
-        if ($backend_t == $_SESSION['gollem']['backend_key']) {
+        if ($backend_t == $backend_key) {
             $to_be = &$GLOBALS['gollem_vfs'];
         } else {
             $from_be = Gollem::getVFSOb($backend_t);
@@ -521,11 +524,7 @@ class Gollem
      */
     static public function getPreferredBackend()
     {
-        $backend_key = null;
-
-        if (!empty($_SESSION['gollem']['backend_key'])) {
-            $backend_key = $_SESSION['gollem']['backend_key'];
-        } else {
+        if (!($backend_key = $GLOBALS['session']->get('gollem', 'backend_key')) ){
             /* Determine the preferred backend. */
             foreach ($GLOBALS['gollem_backends'] as $key => $val) {
                 if (empty($backend_key) && (substr($key, 0, 1) != '_')) {
@@ -585,7 +584,7 @@ class Gollem
     {
         $userID = $GLOBALS['registry']->getAuth();
         if (is_null($backend)) {
-            $backend = $_SESSION['gollem']['backend_key'];
+            $backend = $GLOBALS['session']->get('gollem', 'backend_key');
         }
 
         switch ($filter) {
@@ -610,7 +609,8 @@ class Gollem
     {
         $label = array();
         $root_dir = Gollem::getRoot();
-        $root_dir_name = $_SESSION['gollem']['backends'][$_SESSION['gollem']['backend_key']]['name'];
+        $backend_config = $GLOBALS['session']->get('gollem', 'backends/' . $GLOBALS['session']->get('gollem', 'backend_key'));
+        $root_dir_name = $backend_config['name'];
 
         if ($currdir == $root_dir) {
             $label[] = '[' . $root_dir_name . ']';
@@ -686,7 +686,7 @@ class Gollem
         if (($GLOBALS['conf']['backend']['backend_list'] == 'shown') &&
             (count($GLOBALS['gollem_backends']) > 1)) {
             foreach ($GLOBALS['gollem_backends'] as $key => $val) {
-                $sel = ($_SESSION['gollem']['backend_key'] == $key) ? ' selected="selected"' : '';
+                $sel = ($GLOBALS['session']->get('gollem', 'backend_key') == $key) ? ' selected="selected"' : '';
                 $text .= sprintf('<option value="%s"%s>%s</option>%s', (empty($sel)) ? $key : '', $sel, $val['name'], "\n");
             }
         }
@@ -699,8 +699,8 @@ class Gollem
      */
     static public function loadBackendList()
     {
-        if (!empty($_SESSION['gollem']['be_list'])) {
-            $GLOBALS['gollem_backends'] = $_SESSION['gollem']['be_list'];
+        if ($be_list = $GLOBALS['session']->get('gollem', 'be_list')) {
+            $GLOBALS['gollem_backends'] = $be_list;
         } else {
             require GOLLEM_BASE . '/config/backends.php';
             $GLOBALS['gollem_backends'] = array();
@@ -737,10 +737,12 @@ class Gollem
      */
     function getVFSOb($backend_key, $params = array())
     {
-        if (isset($_SESSION['gollem']['backends'][$backend_key])) {
-            $be_config = &$_SESSION['gollem']['backends'][$backend_key];
+        if ($config = $GLOBALS['session']->get('gollem', 'backends/' . $backend_key)) {
+            $be_config = $config;
+            $sess_setup = true;
         } else {
             $be_config = $GLOBALS['gollem_backends'][$backend_key];
+            $sess_setup = false;
         }
         if (!count($params)) {
             $params = $be_config['params'];
@@ -775,6 +777,7 @@ class Gollem
                 if ($sess_setup) {
                     $be_config['quota_val'] = $quota_str[0];
                     $be_config['quota_metric'] = $quota_metric[$metric];
+                    $GLOBALS['session']->set('gollem', 'backends/' . $backend_key, $be_config);
                 }
             }
         } elseif ($be_config['quota_val'] > -1) {
@@ -816,7 +819,7 @@ class Gollem
      */
     static public function getBackends($perms = 'all')
     {
-        $backends = $_SESSION['gollem']['backends'];
+        $backends = $GLOBALS['session']->get('gollem', 'backends');
         $perms = strtolower($perms);
 
         if ($perms != 'all') {
index ae64979..2f3c184 100644 (file)
 require_once dirname(__FILE__) . '/lib/Application.php';
 Horde_Registry::appInit('gollem');
 
-$backkey = $_SESSION['gollem']['backend_key'];
+$backkey = $session->get('gollem', 'backend_key');
+if (!empty($gollem_be['clipboard'])) {
+    $clipboard = $GLOBALS['session']->get('gollem', 'clipboard', Horde_Session::TYPE_ARRAY);
+}
 $old_dir = Gollem::getDir();
 $vars = Horde_Variables::getDefaultVariables();
 
@@ -144,7 +147,8 @@ case 'cut_items':
                     'name' => $item,
                     'path' => $old_dir
                 );
-                $_SESSION['gollem']['clipboard'][] = $file;
+                $clipboard[] = $file;
+                $GLOBALS['session']->set('gollem', 'clipboard', $clipboard);
                 if ($action == 'copy') {
                     $notification->push(sprintf(_("Item copied to clipboard: %s"), $item),'horde.success');
                 } else {
@@ -167,8 +171,8 @@ case 'paste_items':
         $items = Horde_Util::getPost('items');
         if (is_array($items) && count($items)) {
             foreach ($items as $val) {
-                if (isset($_SESSION['gollem']['clipboard'][$val])) {
-                    $file = $_SESSION['gollem']['clipboard'][$val];
+                if (isset($clipboard[$val])) {
+                    $file = $clipboard[$val];
                     if ($vars->actionID == 'paste_items') {
                         try {
                             if ($file['action'] == 'cut') {
@@ -186,10 +190,10 @@ case 'paste_items':
                             $notification->push(sprintf(_("Cannot paste \"%s\" (file cleared from clipboard): %s"), $file['name'], $e->getMessage()), 'horde.error');
                         }
                     }
-                    unset($_SESSION['gollem']['clipboard'][$val]);
+                    unset($clipboard[$val]);
                 }
             }
-            $_SESSION['gollem']['clipboard'] = array_values($_SESSION['gollem']['clipboard']);
+            $session->set('gollem', 'clipboard', array_values($clipboard));
         }
     }
     break;
@@ -249,11 +253,10 @@ $symlink_img = Horde::img('folder_symlink.png', _("symlink"));
 $page = isset($vars->page)
     ? $vars->page
     : 0;
-if (isset($_SESSION['gollem']['filter']) &&
-    ($_SESSION['gollem']['filter'] != $vars->filter)) {
+if ($session->get('gollem', 'filter') != $vars->filter) {
     $page = 0;
 }
-$_SESSION['gollem']['filter'] = strval($vars->filter);
+$session->set('gollem', 'filter', strval($vars->filter));
 
 /* Commonly used URLs. */
 $view_url = Horde::url('view.php');
@@ -268,7 +271,7 @@ if ($vars->filter) {
 /* Get the list of copy/cut files in this directory. */
 $clipboard_files = array();
 if (!empty($gollem_be['clipboard'])) {
-    foreach ($_SESSION['gollem']['clipboard'] as $val) {
+    foreach ($clipboard as $val) {
         if (($backkey == $val['backend']) && ($val['path'] == $currdir)) {
             $clipboard_files[$val['name']] = 1;
         }
@@ -307,8 +310,7 @@ $template->set('navlink', Gollem::directoryNavLink($currdir, $manager_url));
 $template->set('refresh', Horde::link($refresh_url, sprintf("%s %s", _("Refresh"), $gollem_be['label']), '', '', '', '', '', array('id' => 'refreshimg')) . Horde::img('reload.png', sprintf("%s %s", _("Refresh"), htmlspecialchars($gollem_be['label']))) . '</a>');
 
 $template->set('hasclipboard', !$edit_perms || !empty($gollem_be['clipboard']), true);
-if (!$template->get('hasclipboard') ||
-    empty($_SESSION['gollem']['clipboard'])) {
+if (!$template->get('hasclipboard') || empty($clipboard)) {
     $template->set('clipboard', null);
 } else {
     $template->set('clipboard', Horde::link(Horde::url('clipboard.php')->add('dir', $currdir), _("View Clipboard")) . Horde::img('clipboard.png', _("View Clipboard")) . '</a>');
index d7079bc..bd9c881 100644 (file)
@@ -30,8 +30,8 @@ $currdir = Gollem::getDir();
 $cacheid = Horde_Util::getFormData('cacheid');
 if (empty($cacheid)) {
     $cacheid = strval(new Horde_Support_Randomid());
-    $_SESSION['gollem']['selectlist'][$cacheid] = array();
 }
+$selectlist = $session->get('gollem', 'selectlist/' . $cacheid, Horde_Session::TYPE_ARRAY);
 
 /* Get the formid for the return. */
 $formid = Horde_Util::getFormData('formid');
@@ -43,19 +43,22 @@ case 'select':
     if (is_array($items) && count($items)) {
         foreach ($items as $item) {
             $item_value = $currdir . '|' . $item;
-            if (empty($_SESSION['gollem']['selectlist'][$cacheid]['files'])) {
-                $_SESSION['gollem']['selectlist'][$cacheid]['files'] = array($item_value);
+            if (empty($selectlist['files'])) {
+                $selectlist['files'] = array($item_value);
             } else {
-                $item_key = array_search($item_value, $_SESSION['gollem']['selectlist'][$cacheid]['files']);
+                $item_key = array_search($item_value, $selectlist['files']);
                 if ($item_key !== false) {
-                    unset($_SESSION['gollem']['selectlist'][$cacheid]['files'][$item_key]);
-                    sort($_SESSION['gollem']['selectlist'][$cacheid]['files']);
+                    unset($selectlist['files'][$item_key]);
+                    sort($selectlist['files']);
                 } else {
-                    $_SESSION['gollem']['selectlist'][$cacheid]['files'][] = $item_value;
+                    $selectlist['files'][] = $item_value;
                 }
             }
         }
-        $filelist = array_keys(array_flip($_SESSION['gollem']['selectlist'][$cacheid]['files']));
+
+        $session->set('gollem', 'selectlist/' . $cacheid, $selectlist);
+
+        $filelist = array_keys(array_flip($selectlist['files']));
     }
     break;
 }
@@ -171,8 +174,8 @@ if (is_array($info['list']) &&
             break;
         }
 
-        if (!empty($_SESSION['gollem']['selectlist'][$cacheid]['files']) &&
-            in_array($currdir . '|' . $val['name'], $_SESSION['gollem']['selectlist'][$cacheid]['files'])) {
+        if (!empty($selectlist['files']) &&
+            in_array($currdir . '|' . $val['name'], $selectlist['files'])) {
             $item['selected'] = true;
         }