<?php if (!defined('PmWiki')) exit();
/*  Copyright 2016 Petko Yotov www.pmwiki.org/petko
    Class based on PageStore() Copyright 2005-2015 by Patrick Michaud
    
    This file is written for PmWiki; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published
    by the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.  See pmwiki.php for full details.
*/

$RecipeInfo['SessionPageStore']['Version'] = '20160127';
$PageCacheDir = false;
$NoHTMLCache = 1;
$PageIndexFile = false;

## class SessionPageStore holds objects that store pages 
## via session storage.
class SessionPageStore extends PageStore {
  function SessionPageStore() { 
    @session_start();
  }
  function read($pagename, $since=0) {
    @session_start();
    return @$_SESSION['session-page-store'][$pagename];
  }
  function write($pagename,$page) {
    global $Now, $Version, $Charset;
    @session_start();
    $page['charset'] = $Charset;
    $page['name'] = $pagename;
    $page['time'] = $Now;
    $page['host'] = $_SERVER['REMOTE_ADDR'];
    $page['agent'] = @$_SERVER['HTTP_USER_AGENT'];
    $page['rev'] = @$page['rev']+1;
    unset($page['version']); unset($page['newline']);
    uksort($page, 'CmpPageAttr');
    $_SESSION['session-page-store'][$pagename] = $page;
    PCache($pagename, $page);
    session_write_close();
  }
  function exists($pagename) {
    if (!$pagename) return false;
    @session_start();
    return (boolean)@$_SESSION['session-page-store'][$pagename];
  }
  function delete($pagename) {
    @session_start();
    unset($_SESSION['session-page-store'][$pagename]);
    session_write_close();
  }
  
  function ls($pats=NULL) {  
    @session_start();
    global $GroupPattern, $NamePattern;
    StopWatch("SessionPageStore::ls begin");
    $pats=(array)$pats; 
    array_push($pats, "/^$GroupPattern\.$NamePattern$/");
    $out = $o = array();
    if(@$_SESSION['session-page-store'] && is_array($_SESSION['session-page-store']))
      foreach($_SESSION['session-page-store'] as $pn=>$page) {
        $o[] = $pn;
      }
    StopWatch("SessionPageStore::ls merge");
    $out = array_merge($out, MatchPageNames($o, $pats));
    StopWatch("SessionPageStore::ls end");
    return $out;
  }
}