mirror of
https://github.com/24eme/signaturepdf.git
synced 2023-08-25 09:33:08 +02:00
240 lines
4.6 KiB
PHP
240 lines
4.6 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
|
||
|
Copyright (c) 2009-2019 F3::Factory/Bong Cosca, All rights reserved.
|
||
|
|
||
|
This file is part of the Fat-Free Framework (http://fatfreeframework.com).
|
||
|
|
||
|
This is free software: 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 3 of the License, or later.
|
||
|
|
||
|
Fat-Free Framework is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License along
|
||
|
with Fat-Free Framework. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
*/
|
||
|
|
||
|
//! Session-based pseudo-mapper
|
||
|
class Basket extends Magic {
|
||
|
|
||
|
//@{ Error messages
|
||
|
const
|
||
|
E_Field='Undefined field %s';
|
||
|
//@}
|
||
|
|
||
|
protected
|
||
|
//! Session key
|
||
|
$key,
|
||
|
//! Current item identifier
|
||
|
$id,
|
||
|
//! Current item contents
|
||
|
$item=[];
|
||
|
|
||
|
/**
|
||
|
* Return TRUE if field is defined
|
||
|
* @return bool
|
||
|
* @param $key string
|
||
|
**/
|
||
|
function exists($key) {
|
||
|
return array_key_exists($key,$this->item);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Assign value to field
|
||
|
* @return scalar|FALSE
|
||
|
* @param $key string
|
||
|
* @param $val scalar
|
||
|
**/
|
||
|
function set($key,$val) {
|
||
|
return ($key=='_id')?FALSE:($this->item[$key]=$val);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieve value of field
|
||
|
* @return scalar|FALSE
|
||
|
* @param $key string
|
||
|
**/
|
||
|
function &get($key) {
|
||
|
if ($key=='_id')
|
||
|
return $this->id;
|
||
|
if (array_key_exists($key,$this->item))
|
||
|
return $this->item[$key];
|
||
|
user_error(sprintf(self::E_Field,$key),E_USER_ERROR);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Delete field
|
||
|
* @return NULL
|
||
|
* @param $key string
|
||
|
**/
|
||
|
function clear($key) {
|
||
|
unset($this->item[$key]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return items that match key/value pair;
|
||
|
* If no key/value pair specified, return all items
|
||
|
* @return array
|
||
|
* @param $key string
|
||
|
* @param $val mixed
|
||
|
**/
|
||
|
function find($key=NULL,$val=NULL) {
|
||
|
$out=[];
|
||
|
if (isset($_SESSION[$this->key])) {
|
||
|
foreach ($_SESSION[$this->key] as $id=>$item)
|
||
|
if (!isset($key) ||
|
||
|
array_key_exists($key,$item) && $item[$key]==$val ||
|
||
|
$key=='_id' && $id==$val) {
|
||
|
$obj=clone($this);
|
||
|
$obj->id=$id;
|
||
|
$obj->item=$item;
|
||
|
$out[]=$obj;
|
||
|
}
|
||
|
}
|
||
|
return $out;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return first item that matches key/value pair
|
||
|
* @return object|FALSE
|
||
|
* @param $key string
|
||
|
* @param $val mixed
|
||
|
**/
|
||
|
function findone($key,$val) {
|
||
|
return ($data=$this->find($key,$val))?$data[0]:FALSE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Map current item to matching key/value pair
|
||
|
* @return array
|
||
|
* @param $key string
|
||
|
* @param $val mixed
|
||
|
**/
|
||
|
function load($key,$val) {
|
||
|
if ($found=$this->find($key,$val)) {
|
||
|
$this->id=$found[0]->id;
|
||
|
return $this->item=$found[0]->item;
|
||
|
}
|
||
|
$this->reset();
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return TRUE if current item is empty/undefined
|
||
|
* @return bool
|
||
|
**/
|
||
|
function dry() {
|
||
|
return !$this->item;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return number of items in basket
|
||
|
* @return int
|
||
|
**/
|
||
|
function count() {
|
||
|
return isset($_SESSION[$this->key])?count($_SESSION[$this->key]):0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Save current item
|
||
|
* @return array
|
||
|
**/
|
||
|
function save() {
|
||
|
if (!$this->id)
|
||
|
$this->id=uniqid(NULL,TRUE);
|
||
|
$_SESSION[$this->key][$this->id]=$this->item;
|
||
|
return $this->item;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Erase item matching key/value pair
|
||
|
* @return bool
|
||
|
* @param $key string
|
||
|
* @param $val mixed
|
||
|
**/
|
||
|
function erase($key,$val) {
|
||
|
$found=$this->find($key,$val);
|
||
|
if ($found && $id=$found[0]->id) {
|
||
|
unset($_SESSION[$this->key][$id]);
|
||
|
if ($id==$this->id)
|
||
|
$this->reset();
|
||
|
return TRUE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Reset cursor
|
||
|
* @return NULL
|
||
|
**/
|
||
|
function reset() {
|
||
|
$this->id=NULL;
|
||
|
$this->item=[];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Empty basket
|
||
|
* @return NULL
|
||
|
**/
|
||
|
function drop() {
|
||
|
unset($_SESSION[$this->key]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Hydrate item using hive array variable
|
||
|
* @return NULL
|
||
|
* @param $var array|string
|
||
|
**/
|
||
|
function copyfrom($var) {
|
||
|
if (is_string($var))
|
||
|
$var=\Base::instance()->$var;
|
||
|
foreach ($var as $key=>$val)
|
||
|
$this->set($key,$val);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Populate hive array variable with item contents
|
||
|
* @return NULL
|
||
|
* @param $key string
|
||
|
**/
|
||
|
function copyto($key) {
|
||
|
$var=&\Base::instance()->ref($key);
|
||
|
foreach ($this->item as $key=>$field)
|
||
|
$var[$key]=$field;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check out basket contents
|
||
|
* @return array
|
||
|
**/
|
||
|
function checkout() {
|
||
|
if (isset($_SESSION[$this->key])) {
|
||
|
$out=$_SESSION[$this->key];
|
||
|
unset($_SESSION[$this->key]);
|
||
|
return $out;
|
||
|
}
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Instantiate class
|
||
|
* @return void
|
||
|
* @param $key string
|
||
|
**/
|
||
|
function __construct($key='basket') {
|
||
|
$this->key=$key;
|
||
|
if (session_status()!=PHP_SESSION_ACTIVE)
|
||
|
session_start();
|
||
|
Base::instance()->sync('SESSION');
|
||
|
$this->reset();
|
||
|
}
|
||
|
|
||
|
}
|