Changeset 551


Ignore:
Timestamp:
Nov 25, 2015 7:10:03 PM (8 years ago)
Author:
anonymous
Message:

Changed internals of boomerang url storage.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/js/Msg.js

    r500 r551  
    2222
    2323/*
    24 * Class for managing user messages. This is the contructor function.
     24* Class for managing user messages. This is the constructor function.
    2525*
    2626* @access   public
  • trunk/lib/App.inc.php

    r550 r551  
    13461346        // Get URL from stored boomerang. Allow non specific URL if ID not valid.
    13471347        if ($this->validBoomerangURL($id, true)) {
    1348             if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$id])) {
    1349                 $url = $_SESSION['_app'][$this->_ns]['boomerang']['url'][$id];
     1348            if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang'][$id])) {
     1349                $url = $_SESSION['_app'][$this->_ns]['boomerang'][$id]['url'];
    13501350                $this->logMsg(sprintf('dieBoomerangURL(%s) found: %s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
    13511351            } else {
    1352                 $url = end($_SESSION['_app'][$this->_ns]['boomerang']['url']);
     1352                $url = end($_SESSION['_app'][$this->_ns]['boomerang'])['url'];
    13531353                $this->logMsg(sprintf('dieBoomerangURL(%s) using: %s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
    13541354            }
     
    13661366        }
    13671367
    1368         // A redirection will never happen immediately twice.
    1369         // Set the time so ensure this doesn't happen.
    1370         $_SESSION['_app'][$this->_ns]['boomerang']['time'] = time();
     1368        // A redirection will never happen immediately twice. Set the time so we can ensure this doesn't happen.
     1369        $_SESSION['_app'][$this->_ns]['boomerang_last_redirect_time'] = time();
     1370
     1371        // Do it.
    13711372        $this->dieURL($url, $carry_args);
    13721373    }
     
    13921393            $url = preg_replace(array('/([&?])boomerang=[^&?]+[&?]?/', '/[&?]$/'), array('$1', ''), $url);
    13931394
    1394             if (isset($_SESSION['_app'][$this->_ns]['boomerang']['url']) && is_array($_SESSION['_app'][$this->_ns]['boomerang']['url']) && !empty($_SESSION['_app'][$this->_ns]['boomerang']['url'])) {
     1395            if (isset($_SESSION['_app'][$this->_ns]['boomerang']) && is_array($_SESSION['_app'][$this->_ns]['boomerang']) && !empty($_SESSION['_app'][$this->_ns]['boomerang'])) {
    13951396                // If the ID=>URL pair currently exists in the boomerang array, delete.
    1396                 foreach (array_keys($_SESSION['_app'][$this->_ns]['boomerang']['url'], $url) as $existing_key) {
    1397                     if ($existing_key == $id) {
     1397                foreach (array_keys($_SESSION['_app'][$this->_ns]['boomerang']) as $existing_id) {
     1398                    if ($existing_id === $id) {
    13981399                        $this->logMsg(sprintf('Found and deleting existing ID=>URL pair: %s=>%s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
    1399                         unset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$existing_key]);
     1400                        unset($_SESSION['_app'][$this->_ns]['boomerang'][$existing_id]);
    14001401                    }
    14011402                }
     
    14031404
    14041405            if (isset($id)) {
    1405                 $_SESSION['_app'][$this->_ns]['boomerang']['url'][$id] = $url;
     1406                $_SESSION['_app'][$this->_ns]['boomerang'][$id] = array(
     1407                    'url' => $url,
     1408                    'added_time' => time(),
     1409                );
    14061410            } else {
    1407                 $_SESSION['_app'][$this->_ns]['boomerang']['url'][] = $url;
    1408             }
     1411                $_SESSION['_app'][$this->_ns]['boomerang'][] = array(
     1412                    'url' => $url,
     1413                    'added_time' => time(),
     1414                );
     1415            }
     1416
    14091417            $this->logMsg(sprintf('setBoomerangURL(%s): %s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
    14101418            return true;
     
    14281436
    14291437        if (isset($id)) {
    1430             if (isset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$id])) {
    1431                 return $_SESSION['_app'][$this->_ns]['boomerang']['url'][$id];
     1438            if (isset($_SESSION['_app'][$this->_ns]['boomerang'][$id])) {
     1439                return $_SESSION['_app'][$this->_ns]['boomerang'][$id]['url'];
    14321440            } else {
    14331441                return '';
    14341442            }
    1435         } else if (is_array($_SESSION['_app'][$this->_ns]['boomerang']['url'])) {
    1436             return end($_SESSION['_app'][$this->_ns]['boomerang']['url']);
     1443        } else if (is_array($_SESSION['_app'][$this->_ns]['boomerang']) && !empty($_SESSION['_app'][$this->_ns]['boomerang'])) {
     1444            return end($_SESSION['_app'][$this->_ns]['boomerang'])['url'];
    14371445        } else {
    14381446            return false;
     
    14521460        }
    14531461
    1454         if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$id])) {
     1462        if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang'][$id])) {
    14551463            $url = $this->getBoomerangURL($id);
    1456             unset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$id]);
    1457         } else if (is_array($_SESSION['_app'][$this->_ns]['boomerang']['url'])) {
    1458             $url = array_pop($_SESSION['_app'][$this->_ns]['boomerang']['url']);
     1464            unset($_SESSION['_app'][$this->_ns]['boomerang'][$id]);
     1465        } else if (is_array($_SESSION['_app'][$this->_ns]['boomerang'])) {
     1466            $url = array_pop($_SESSION['_app'][$this->_ns]['boomerang'])['url'];
    14591467        }
    14601468        $this->logMsg(sprintf('deleteBoomerangURL(%s): %s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
     
    14741482        }
    14751483
    1476         if (!isset($_SESSION['_app'][$this->_ns]['boomerang']['url'])) {
     1484        if (!isset($_SESSION['_app'][$this->_ns]['boomerang'])) {
    14771485            $this->logMsg(sprintf('validBoomerangURL(%s) no boomerang URL set.', $id), LOG_DEBUG, __FILE__, __LINE__);
    14781486            return false;
    14791487        }
    14801488
    1481         // Time is the time stamp of a boomerangURL redirection, or setting of a boomerangURL.
    1482         // a boomerang redirection will always occur at least several seconds after the last boomerang redirect
    1483         // or a boomerang being set.
    1484         $boomerang_time = isset($_SESSION['_app'][$this->_ns]['boomerang']['time']) ? $_SESSION['_app'][$this->_ns]['boomerang']['time'] : 0;
    1485 
    14861489        $url = '';
    1487         if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang']['url'][$id])) {
    1488             $url = $_SESSION['_app'][$this->_ns]['boomerang']['url'][$id];
     1490        if (isset($id) && isset($_SESSION['_app'][$this->_ns]['boomerang'][$id])) {
     1491            $url = $_SESSION['_app'][$this->_ns]['boomerang'][$id]['url'];
     1492            $added_time = $_SESSION['_app'][$this->_ns]['boomerang'][$id]['added_time'];
    14891493        } else if (!isset($id) || $use_nonspecificboomerang) {
    14901494            // Use non specific boomerang if available.
    1491             $url = end($_SESSION['_app'][$this->_ns]['boomerang']['url']);
    1492         }
    1493 
    1494         $this->logMsg(sprintf('validBoomerangURL(%s) testing: %s', $id, $url), LOG_DEBUG, __FILE__, __LINE__);
    1495 
    1496         if ('' == $url) {
     1495            $url = end($_SESSION['_app'][$this->_ns]['boomerang'])['url'];
     1496            $added_time = end($_SESSION['_app'][$this->_ns]['boomerang'])['added_time'];
     1497        }
     1498
     1499        if ('' == trim($url)) {
    14971500            $this->logMsg(sprintf('validBoomerangURL(%s) not valid, empty!', $id), LOG_DEBUG, __FILE__, __LINE__);
    14981501            return false;
    14991502        }
     1503
    15001504        if ($url == absoluteMe()) {
    15011505            // The URL we are directing to is the current page.
     
    15031507            return false;
    15041508        }
    1505         if ($boomerang_time >= (time() - 2)) {
     1509
     1510        // Last redirect time is the time stamp of the last boomerangURL redirection, if any. A boomerang redirection should always occur at least several seconds after the last boomerang redirect (time it takes to load a page and receive user interaction).
     1511        $boomerang_last_redirect_time = isset($_SESSION['_app'][$this->_ns]['boomerang_last_redirect_time']) ? $_SESSION['_app'][$this->_ns]['boomerang_last_redirect_time'] : null;
     1512        if (isset($boomerang_last_redirect_time) && $boomerang_last_redirect_time >= (time() - 2)) {
    15061513            // Last boomerang direction was less than 2 seconds ago.
    1507             $this->logMsg(sprintf('validBoomerangURL(%s) not valid, boomerang_time too short: %s seconds', $id, time() - $boomerang_time), LOG_DEBUG, __FILE__, __LINE__);
    1508             return false;
    1509         }
    1510         if ($boomerang_time < (time() - 72000)) {
    1511             // Last boomerang direction was more than 20 minutes ago.
    1512             $this->logMsg(sprintf('validBoomerangURL(%s) not valid, boomerang_time too long: %s seconds', $id, time() - $boomerang_time), LOG_DEBUG, __FILE__, __LINE__);
     1514            $this->logMsg(sprintf('validBoomerangURL(%s) not valid, boomerang_last_redirect_time too short: %s seconds', $id, time() - $boomerang_last_redirect_time), LOG_DEBUG, __FILE__, __LINE__);
     1515            return false;
     1516        }
     1517
     1518        if (isset($added_time) && $added_time < (time() - 72000)) {
     1519            // Last boomerang direction was more than 20 hours ago.
     1520            $this->logMsg(sprintf('validBoomerangURL(%s) not valid, added_time too old: %s seconds', $id, time() - $added_time), LOG_DEBUG, __FILE__, __LINE__);
     1521            // Delete this defunct boomerang.
     1522            $this->deleteBoomerangURL($id);
    15131523            return false;
    15141524        }
Note: See TracChangeset for help on using the changeset viewer.