Exemple #1
0
 public function requireLock($args)
 {
     $lockName = $args['lockName'];
     $sessionId = array_key_exists('sessionId', $args) ? $args['sessionId'] : session_id();
     $lockedByTitle = $args['lockedByTitle'];
     $lockedByIPNo = $args['lockedByIPNo'];
     $this->_pageLockRequireAccess();
     $locks = ModUtil::apiFunc('pagelock', 'user', 'getLocks', $args);
     if (count($locks) > 0) {
         $lockedBy = '';
         foreach ($locks as $lock) {
             if (strlen($lockedBy) > 0) {
                 $lockedBy .= ', ';
             }
             $lockedBy .= $lock['lockedByTitle'] . " ({$lock['lockedByIPNo']}) " . $lock['createdDate'];
         }
         return array('hasLock' => false, 'lockedBy' => $lockedBy);
     }
     $args['lockedBy'] = null;
     $dbtable = DBUtil::getTables();
     $pageLockTable =& $dbtable['pagelock'];
     $pageLockColumn =& $dbtable['pagelock_column'];
     // Look for existing lock
     $sql = "\nSELECT COUNT(*)\nFROM {$pageLockTable}\nWHERE {$pageLockColumn['name']} = '" . DataUtil::formatForStore($lockName) . "' AND {$pageLockColumn['lockedBySessionId']} = '" . DataUtil::formatForStore($sessionId) . "'";
     $count = DBUtil::selectScalar($sql);
     $now = time();
     $expireDate = $now + PageLockLifetime;
     if ($count > 0) {
         // Update existing lock
         $sql = "\nUPDATE {$pageLockTable}\nSET {$pageLockColumn['expiresDate']} = '" . DateUtil::getDatetime($expireDate) . "'\nWHERE {$pageLockColumn['name']} = '" . DataUtil::formatForStore($lockName) . "' AND {$pageLockColumn['lockedBySessionId']} = '" . DataUtil::formatForStore($sessionId) . "'";
         DBUtil::executeSql($sql);
     } else {
         $data = array('name' => $lockName, 'createdDate' => DateUtil::getDatetime($now), 'expiresDate' => DateUtil::getDatetime($expireDate), 'lockedBySessionId' => $sessionId, 'lockedByTitle' => $lockedByTitle, 'lockedByIPNo' => $lockedByIPNo);
         DBUtil::insertObject($data, 'pagelock');
     }
     $this->_pageLockReleaseAccess();
     return array('hasLock' => true);
 }
Exemple #2
0
 protected function contentGetNextRevisionNumber($pageId)
 {
     $pageId = (int) $pageId;
     $tables = DBUtil::getTables();
     $historyTable = $tables['content_history'];
     $historyColumn = $tables['content_history_column'];
     $sql = "\n            SELECT MAX({$historyColumn['revisionNo']})\n            FROM {$historyTable}\n            WHERE {$historyColumn['pageId']} = {$pageId}";
     // FIXME: how to avoid concurrency problems?
     $pos = DBUtil::selectScalar($sql);
     return $pos === null ? 1 : (int) $pos + 1;
 }
Exemple #3
0
 protected function contentGetLastContentPosition($pageId, $contentAreaIndex)
 {
     $pageId = (int) $pageId;
     $contentAreaIndex = (int) $contentAreaIndex;
     $table = DBUtil::getTables();
     $contentTable = $table['content_content'];
     $contentColumn = $table['content_content_column'];
     $sql = "\n            SELECT MAX({$contentColumn['position']})\n            FROM {$contentTable}\n            WHERE {$contentColumn['pageId']} = {$pageId}";
     $pos = DBUtil::selectScalar($sql);
     return $pos === null ? -1 : (int) $pos;
 }
Exemple #4
0
    public function insertPage($args)
    {
        $pageId = (int) $args['pageId'];
        $position = (int) $args['position'];
        $parentPageId = (int) $args['parentPageId'];

        $dbtables = DBUtil::getTables();
        $pageTable = $dbtables['content_page'];
        $pageColumn = $dbtables['content_page_column'];

        $sql = "
            UPDATE $pageTable
            SET $pageColumn[position] = $pageColumn[position]+1
            WHERE $pageColumn[parentPageId] = $parentPageId
            AND $pageColumn[position] >= $position";

        DBUtil::executeSQL($sql);

        // *** Update all left/right values for all pages "right of this page"
        // Assume "this page" has left/right values that matches it's subtree (but with a wrong offset)
        $pageData = DBUtil::selectObjectByID('content_page', $pageId);
        if ($parentPageId > 0) {
            $parentPageData = DBUtil::selectObjectByID('content_page', $parentPageId);
            $parentLevel = $parentPageData['level'];
        } else {
            $parentPageData = null;
            $parentLevel = -1;
        }

        // Fetch largest left/right value left of this page's new position
        $sql = "
            SELECT MAX($pageColumn[setRight])
            FROM $pageTable
            WHERE $pageColumn[parentPageId] = $parentPageId
            AND $pageColumn[position] < $position
            AND $pageColumn[id] != $pageId";

        $maxLeftOfthis = DBUtil::selectScalar($sql);
        if (empty($maxLeftOfthis)) {
            $maxLeftOfthis = -1;
        }
        if ($parentPageData != null && $parentPageData['setLeft'] > $maxLeftOfthis) {
            $maxLeftOfthis = $parentPageData['setLeft'];
        }
        $diff = $pageData['setRight'] - $pageData['setLeft'] + 1;
        $sql = "
            UPDATE $pageTable SET
            $pageColumn[setRight] = $pageColumn[setRight]+$diff
            WHERE $pageColumn[setRight] > $maxLeftOfthis AND $pageColumn[id] != $pageId";

        DBUtil::executeSQL($sql);

        $sql = "
            UPDATE $pageTable SET
            $pageColumn[setLeft] = $pageColumn[setLeft]+$diff
            WHERE $pageColumn[setLeft] > $maxLeftOfthis AND $pageColumn[id] != $pageId";

        DBUtil::executeSQL($sql);

        // *** Update level/left/right values for this page and all pages below
        $levelDiff = $pageData['level'] - ($parentLevel + 1);
        $diff2 = $pageData['setLeft'] - $maxLeftOfthis - 1;
        //echo "diff2=$diff2. ";
        $sql = "
            UPDATE $pageTable SET
            $pageColumn[setLeft] = $pageColumn[setLeft]-$diff2,
            $pageColumn[setRight] = $pageColumn[setRight]-$diff2,
            $pageColumn[level] = $pageColumn[level]-$levelDiff
            WHERE $pageData[setLeft] <= $pageColumn[setLeft] AND $pageColumn[setRight] <= $pageData[setRight]";

        DBUtil::executeSQL($sql);

        // Update this page
        $newPageData = array('id' => $pageId, 'position' => $position, 'parentPageId' => $parentPageId, 'level' => ($parentPageData == null ? 0 : $parentPageData['level'] + 1));
        DBUtil::updateObject($newPageData, 'content_page');

        return true;
    }
Exemple #5
0
    protected function contentGetLastContentPosition($pageId, $contentAreaIndex)
    {
        $pageId = (int) $pageId;
        $contentAreaIndex = (int) $contentAreaIndex;

        $table = DBUtil::getTables();
        $contentTable = $table['content_content'];
        $contentColumn = $table['content_content_column'];

        $sql = "
            SELECT MAX($contentColumn[position])
            FROM $contentTable
            WHERE $contentColumn[pageId] = $pageId";

        $pos = DBUtil::selectScalar($sql);
        return $pos === null ? -1 : (int) $pos;
    }
Exemple #6
0
 public function insertPage($args)
 {
     $pageId = (int) $args['pageId'];
     $position = (int) $args['position'];
     $parentPageId = (int) $args['parentPageId'];
     $dbtables = DBUtil::getTables();
     $pageTable = $dbtables['content_page'];
     $pageColumn = $dbtables['content_page_column'];
     $sql = "\n            UPDATE {$pageTable}\n            SET {$pageColumn['position']} = {$pageColumn['position']}+1\n            WHERE {$pageColumn['parentPageId']} = {$parentPageId}\n            AND {$pageColumn['position']} >= {$position}";
     DBUtil::executeSQL($sql);
     // *** Update all left/right values for all pages "right of this page"
     // Assume "this page" has left/right values that matches it's subtree (but with a wrong offset)
     $pageData = DBUtil::selectObjectByID('content_page', $pageId);
     if ($parentPageId > 0) {
         $parentPageData = DBUtil::selectObjectByID('content_page', $parentPageId);
         $parentLevel = $parentPageData['level'];
     } else {
         $parentPageData = null;
         $parentLevel = -1;
     }
     // Fetch largest left/right value left of this page's new position
     $sql = "\n            SELECT MAX({$pageColumn['setRight']})\n            FROM {$pageTable}\n            WHERE {$pageColumn['parentPageId']} = {$parentPageId}\n            AND {$pageColumn['position']} < {$position}\n            AND {$pageColumn['id']} != {$pageId}";
     $maxLeftOfthis = DBUtil::selectScalar($sql);
     if (empty($maxLeftOfthis)) {
         $maxLeftOfthis = -1;
     }
     if ($parentPageData != null && $parentPageData['setLeft'] > $maxLeftOfthis) {
         $maxLeftOfthis = $parentPageData['setLeft'];
     }
     $diff = $pageData['setRight'] - $pageData['setLeft'] + 1;
     $sql = "\n            UPDATE {$pageTable} SET\n            {$pageColumn['setRight']} = {$pageColumn['setRight']}+{$diff}\n            WHERE {$pageColumn['setRight']} > {$maxLeftOfthis} AND {$pageColumn['id']} != {$pageId}";
     DBUtil::executeSQL($sql);
     $sql = "\n            UPDATE {$pageTable} SET\n            {$pageColumn['setLeft']} = {$pageColumn['setLeft']}+{$diff}\n            WHERE {$pageColumn['setLeft']} > {$maxLeftOfthis} AND {$pageColumn['id']} != {$pageId}";
     DBUtil::executeSQL($sql);
     // *** Update level/left/right values for this page and all pages below
     $levelDiff = $pageData['level'] - ($parentLevel + 1);
     $diff2 = $pageData['setLeft'] - $maxLeftOfthis - 1;
     //echo "diff2=$diff2. ";
     $sql = "\n            UPDATE {$pageTable} SET\n            {$pageColumn['setLeft']} = {$pageColumn['setLeft']}-{$diff2},\n            {$pageColumn['setRight']} = {$pageColumn['setRight']}-{$diff2},\n            {$pageColumn['level']} = {$pageColumn['level']}-{$levelDiff}\n            WHERE {$pageData['setLeft']} <= {$pageColumn['setLeft']} AND {$pageColumn['setRight']} <= {$pageData['setRight']}";
     DBUtil::executeSQL($sql);
     // Update this page
     $newPageData = array('id' => $pageId, 'position' => $position, 'parentPageId' => $parentPageId, 'level' => $parentPageData == null ? 0 : $parentPageData['level'] + 1);
     DBUtil::updateObject($newPageData, 'content_page');
     return true;
 }