From 07662d645329fa9051015dd34277a03e5facd904 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Wed, 17 Nov 2010 12:42:58 -0700 Subject: [PATCH] Convert gollem to Horde_Session --- gollem/clipboard.php | 2 +- gollem/lib/Api.php | 22 ++++++++++++++------- gollem/lib/Application.php | 28 +++++++++++++-------------- gollem/lib/Auth.php | 48 +++++++++++++++++----------------------------- gollem/lib/Gollem.php | 39 ++++++++++++++++++++----------------- gollem/manager.php | 26 +++++++++++++------------ gollem/selectlist.php | 23 ++++++++++++---------- 7 files changed, 95 insertions(+), 93 deletions(-) diff --git a/gollem/clipboard.php b/gollem/clipboard.php index 405dc1b6a..85feaba53 100644 --- a/gollem/clipboard.php +++ b/gollem/clipboard.php @@ -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'), diff --git a/gollem/lib/Api.php b/gollem/lib/Api.php index 016a5ce08..4194f19f6 100644 --- a/gollem/lib/Api.php +++ b/gollem/lib/Api.php @@ -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)); } diff --git a/gollem/lib/Application.php b/gollem/lib/Application.php index ede013695..5f6797cdd 100644 --- a/gollem/lib/Application.php +++ b/gollem/lib/Application.php @@ -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'); } } diff --git a/gollem/lib/Auth.php b/gollem/lib/Auth.php index 3af1ff1a8..a31423422 100644 --- a/gollem/lib/Auth.php +++ b/gollem/lib/Auth.php @@ -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); } } diff --git a/gollem/lib/Gollem.php b/gollem/lib/Gollem.php index ea01bd7f3..a9e579027 100644 --- a/gollem/lib/Gollem.php +++ b/gollem/lib/Gollem.php @@ -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('%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') { diff --git a/gollem/manager.php b/gollem/manager.php index ae649795b..2f3c1843c 100644 --- a/gollem/manager.php +++ b/gollem/manager.php @@ -18,7 +18,10 @@ 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']))) . ''); $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")) . ''); diff --git a/gollem/selectlist.php b/gollem/selectlist.php index d7079bccc..bd9c881a8 100644 --- a/gollem/selectlist.php +++ b/gollem/selectlist.php @@ -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; } -- 2.11.0