Delete operation replaced by moving to trash.

+ #887 feature added
+ #885 fixed
This commit is contained in:
tomas 2005-04-27 23:59:50 +00:00
parent c153560ab9
commit ecf5284a5c
5 changed files with 124 additions and 78 deletions

View file

@ -23,7 +23,7 @@
Author : $Author: tomas $
Version : $Revision: 1.6 $
Version : $Revision: 1.7 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/alib/var/subj.php,v $
------------------------------------------------------------------------------*/
@ -39,7 +39,7 @@ define('ALIBERR_BADSMEMB', 21);
* (allow adding users to groups or groups to groups)
*
* @author $Author: tomas $
* @version $Revision: 1.6 $
* @version $Revision: 1.7 $
* @see ObjClasses
* @see Alib
*/
@ -127,17 +127,20 @@ class Subjects extends ObjClasses{
* Change user password
*
* @param login string
* @param oldpass string
* @param oldpass string, old password (optional for 'superuser mode')
* @param pass string, optional
* @return boolean/err
*/
function passwd($login, $oldpass, $pass='')
function passwd($login, $oldpass=null, $pass='')
{
$cpass = md5($pass);
$oldcpass = md5($oldpass);
if(!is_null($oldpass)){
$oldcpass = md5($oldpass);
$oldpCond = "AND pass='$oldcpass'";
}else{ $oldpCond = ''; }
$this->dbc->query("
UPDATE {$this->subjTable} SET pass='$cpass'
WHERE login='$login' AND pass='$oldcpass' AND type='U'
WHERE login='$login' $oldpCond AND type='U'
");
if(PEAR::isError($id)) return $id;
return TRUE;

View file

@ -452,7 +452,7 @@ class uiHandler extends uiBase {
{
if (PEAR::isError(
$this->gb->addPerm(
$this->sessid, $subj, $permAction, $id, $allowDeny
$subj, $permAction, $id, $allowDeny, $this->sessid
)
)) {
$this->_retMsg('Access denied.');
@ -472,7 +472,7 @@ class uiHandler extends uiBase {
*/
function removePerm($permid, $oid)
{
if (PEAR::isError($this->gb->removePerm($this->sessid, $permid))) {
if (PEAR::isError($this->gb->removePerm($permid, NULL, NULL, $this->sessid))) {
$this->_retMsg('Access denied.');
return FALSE;
}

View file

@ -23,7 +23,7 @@
Author : $Author: tomas $
Version : $Revision: 1.46 $
Version : $Revision: 1.47 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storageServer/var/BasicStor.php,v $
------------------------------------------------------------------------------*/
@ -53,7 +53,7 @@ require_once "Transport.php";
* Core of LiveSupport file storage module
*
* @author $Author: tomas $
* @version $Revision: 1.46 $
* @version $Revision: 1.47 $
* @see Alib
*/
class BasicStor extends Alib{
@ -236,7 +236,30 @@ class BasicStor extends Alib{
*/
function bsDeleteFile($id, $forced=FALSE)
{
$res = $this->removeObj($id, $forced);
// full delete:
if(!$this->config['useTrash'] || $forced){
$res = $this->removeObj($id, $forced);
return $res;
}
// move to trash:
$did = $this->getObjId($this->config['TrashName'], $this->storId);
if($this->dbc->isError($did)) return $did;
switch($this->getObjType($id)){
case"audioclip":
case"playlist":
case"webstream":
$ac =& StoredFile::recall($this, $id);
if($this->dbc->isError($ac)) return $ac;
if(is_null($did)){
return PEAR::raiseError("BasicStor::bsDeleteFile: ".
"trash not found", GBERR_NOTF);
}
$res = $ac->setState('deleted');
if($this->dbc->isError($res)) return $res;
break;
default:
}
$res = $this->bsMoveFile($id, $did);
return $res;
}
@ -1311,9 +1334,14 @@ class BasicStor extends Alib{
// if($this->dbc->isError($p = parent::test())) return $p;
$this->deleteData();
$this->testData();
if($this->config['useTrash']){
$trash = "{$this->config['TrashName']}\n ";
}else{
$trash = "";
}
if(!$this->config['isArchive']){
$this->test_correct = " StorageRoot
root
{$trash}root
test1
file1.mp3
public
@ -1332,7 +1360,7 @@ class BasicStor extends Alib{
";
}else{
$this->test_correct = " StorageRoot
root
{$trash}root
test1
file1.mp3
test1_folder1
@ -1349,9 +1377,9 @@ class BasicStor extends Alib{
$this->test_dump = $this->dumpTree($this->storId, ' ', ' ', '{name}');
if($this->test_dump==$this->test_correct)
{ $this->test_log.="# BasicStor::test: OK\n"; return true; }
else PEAR::raiseError('BasicStor::test:', 1, PEAR_ERROR_DIE, '%s'.
"<pre>\ncorrect:\n.{$this->test_correct}.\n".
"dump:\n.{$this->test_dump}.\n</pre>\n");
else return PEAR::raiseError(
"BasicStor::test:\ncorrect:\n.{$this->test_correct}.\n".
"dump:\n.{$this->test_dump}.\n", 1, PEAR_ERROR_RETURN);
}
/**
@ -1365,7 +1393,16 @@ class BasicStor extends Alib{
$this->addObj('StorageRoot', 'Folder', $this->rootId);
$rootUid = parent::addSubj('root', $this->config['tmpRootPass']);
$res = parent::addPerm($rootUid, '_all', $this->rootId, 'A');
if($this->dbc->isError($res)) return $res;
$res = parent::addPerm($rootUid, 'subjects', $this->rootId, 'A');
if($this->dbc->isError($res)) return $res;
$fid = $this->bsCreateFolder($this->storId, 'root');
if($this->dbc->isError($fid)) return $fid;
if($this->config['useTrash']){
$tfid = $this->bsCreateFolder(
$this->storId, $this->config["TrashName"]);
if($this->dbc->isError($tfid)) return $tfid;
}
if(!$this->config['isArchive']){
$stPrefGr = parent::addSubj($this->config['StationPrefsGr']);
$this->addSubj2Gr('root', $this->config['StationPrefsGr']);
@ -1377,6 +1414,7 @@ class BasicStor extends Alib{
if($this->dbc->isError($r)) return $r;
}
}
/**
* install - create tables
*
@ -1386,6 +1424,7 @@ class BasicStor extends Alib{
* <li>incomplete</li>
* <li>ready</li>
* <li>edited</li>
* <li>deleted</li>
* </ul>
* file types:

View file

@ -23,7 +23,7 @@
Author : $Author: tomas $
Version : $Revision: 1.8 $
Version : $Revision: 1.9 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storageServer/var/DataEngine.php,v $
------------------------------------------------------------------------------*/
@ -100,7 +100,7 @@ class DataEngine{
$whereArr = array();
if(is_array($conditions)){
foreach($conditions as $cond){
$catQn = strtolower($cond['cat']);
$catQn = $cond['cat'];
$op = strtolower($cond['op']);
$value = strtolower($cond['val']);
$splittedQn = XML_Util::splitQualifiedName($catQn);
@ -112,7 +112,8 @@ class DataEngine{
$opVal = str_replace("%", "%%", $opVal);
$sqlCond =
" %s.predicate = '{$cat}' AND".
" %s.objns='_L' AND lower(%s.object) {$opVal}\n";
" %s.objns='_L' AND %s.predxml='T'".
" AND lower(%s.object) {$opVal}\n";
if(!is_null($catNs)){
$catNs = str_replace("%", "%%", $catNs);
$sqlCond = " %s.predns = '{$catNs}' AND $sqlCond";
@ -140,7 +141,7 @@ class DataEngine{
{
$innerBlocks = array();
foreach($whereArr as $i=>$v){
$whereArr[$i] = sprintf($v, "md$i", "md$i", "md$i", "md$i");
$whereArr[$i] = sprintf($v, "md$i", "md$i", "md$i", "md$i", "md$i");
$lastTbl = ($i==0 ? "f" : "md".($i-1));
$innerBlocks[] =
"INNER JOIN {$this->mdataTable} md$i ON md$i.gunid = $lastTbl.gunid\n";
@ -149,7 +150,8 @@ class DataEngine{
$sql = "SELECT $fldsPart\nFROM {$this->filesTable} f\n".join("", $innerBlocks);
if($browse){
$sql .= "INNER JOIN {$this->mdataTable} br".
"\n ON br.gunid = f.gunid AND br.objns='_L' AND br.predicate='{$brFld}'";
"\n ON br.gunid = f.gunid AND br.objns='_L'".
" AND br.predicate='{$brFld}' AND br.predxml='T'";
if(!is_null($brFldNs)) $sql .= " AND br.predns='{$brFldNs}'";
$sql .= "\n";
}
@ -178,7 +180,7 @@ class DataEngine{
$fldsPart, $whereArr, $fileCond, $browse, $brFldNs, $brFld);
$isectBlocks = array();
foreach($whereArr as $i=>$v){
$whereArr[$i] = sprintf($v, "md$i", "md$i", "md$i", "md$i");
$whereArr[$i] = sprintf($v, "md$i", "md$i", "md$i", "md$i", "md$i");
$isectBlocks[] =
" SELECT gunid FROM {$this->mdataTable} md$i\n".
" WHERE\n {$whereArr[$i]}";
@ -195,7 +197,7 @@ class DataEngine{
"SELECT $fldsPart\n".$isectBlock;
if($browse){
$sql .= "\nINNER JOIN {$this->mdataTable} br ON br.gunid = f.gunid\n".
"WHERE br.objns='_L' AND br.predicate='{$brFld}'";
"WHERE br.objns='_L' AND br.predxml='T' AND br.predicate='{$brFld}'";
if(!is_null($brFldNs)) $sql .= " AND br.predns='{$brFldNs}'";
$glue = " AND";
}else{ $glue = "WHERE";}
@ -218,15 +220,16 @@ class DataEngine{
function _makeOrSql($fldsPart, $whereArr, $fileCond, $browse,
$brFldNs=NULL, $brFld=NULL)
{
$whereArr[] = " FALSE\n";
//$whereArr[] = " FALSE\n";
foreach($whereArr as $i=>$v){
$whereArr[$i] = sprintf($v, "md", "md", "md", "md");
$whereArr[$i] = sprintf($v, "md", "md", "md", "md", "md");
}
// query construcion:
$sql = "SELECT $fldsPart\nFROM {$this->filesTable} f\n";
if($browse){
$sql .= "INNER JOIN {$this->mdataTable} br".
"\n ON br.gunid = f.gunid AND br.objns='_L' AND br.predicate='{$brFld}'";
"\n ON br.gunid = f.gunid AND br.objns='_L'".
" AND br.predxml='T' AND br.predicate='{$brFld}'";
if(!is_null($brFldNs)) $sql .= " AND br.predns='{$brFldNs}'";
$sql .= "\n";
}
@ -278,8 +281,8 @@ class DataEngine{
$operator = strtolower($criteria['operator']);
$desc = (isset($criteria['desc']) ? $criteria['desc'] : NULL);
$whereArr = $this->_makeWhereArr($criteria['conditions']);
$orderbyQn = (isset($criteria['orderby']) ?
strtolower($criteria['orderby']) : NULL);
$orderbyQn =
(isset($criteria['orderby']) ? $criteria['orderby'] : NULL);
$obSplitQn = XML_Util::splitQualifiedName($orderbyQn);
$obNs = $obSplitQn['namespace'];
$orderby = $obSplitQn['localPart'];
@ -309,7 +312,8 @@ class DataEngine{
"SELECT to_hex(sq2.gunid)as gunid, m.object\n".
"FROM (\n$sql\n)sq2\n".
"LEFT JOIN ls_mdata m\n".
" ON m.gunid = sq2.gunid AND m.predicate='$orderby' AND m.objns='_L'".
" ON m.gunid = sq2.gunid AND m.predicate='$orderby'".
" AND m.objns='_L' AND m.predxml='T'".
(!is_null($obNs)? " AND m.predns='$obNs'":'')."\n".
"ORDER BY m.object".($desc? ' DESC':'')."\n";
}
@ -339,14 +343,14 @@ class DataEngine{
*/
function browseCategory($category, $limit=0, $offset=0, $criteria=NULL)
{
$category = strtolower($category);
//$category = strtolower($category);
$r = XML_Util::splitQualifiedName($category);
$catNs = $r['namespace'];
$cat = $r['localPart'];
if(is_array($criteria) && count($criteria)>0){
return $this->_localGenSearch($criteria, $limit, $offset, $catNs, $cat);
}
$sqlCond = "m.predicate='$cat' AND m.objns='_L'";
$sqlCond = "m.predicate='$cat' AND m.objns='_L' AND m.predxml='T'";
if(!is_null($catNs)){
$sqlCond = "m.predns = '{$catNs}' AND $sqlCond";
}

View file

@ -23,7 +23,7 @@
Author : $Author: tomas $
Version : $Revision: 1.57 $
Version : $Revision: 1.58 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storageServer/var/GreenBox.php,v $
------------------------------------------------------------------------------*/
@ -35,7 +35,7 @@ require_once "BasicStor.php";
* LiveSupport file storage module
*
* @author $Author: tomas $
* @version $Revision: 1.57 $
* @version $Revision: 1.58 $
* @see BasicStor
*/
class GreenBox extends BasicStor{
@ -222,41 +222,6 @@ class GreenBox extends BasicStor{
return $this->bsDeleteFile($id);
}
/* ---------------------------------------------- replicas, versions etc. */
/**
* Create replica.<br>
* <b>TODO: NOT FINISHED</b>
*
* @param id int, virt.file's local id
* @param did int, destination folder local id
* @param replicaName string, name of new replica
* @param sessid string, session id
* @return int, local id of new object
*/
function createReplica($id, $did, $replicaName='', $sessid='')
{
if(($res = $this->_authorize(
array('read', 'write'), array($id, $did), $sessid
)) !== TRUE) return $res;
return $this->bsCreateReplica($id, $did, $replicaName);
}
/**
* Create version.<br>
* <b>TODO: NOT FINISHED</b>
*
* @param id int, virt.file's local id
* @param did int, destination folder local id
* @param versionLabel string, name of new version
* @param sessid string, session id
* @return int, local id of new object
*/
function createVersion($id, $did, $versionLabel, $sessid='')
{
return $this->bsCreateVersion($id, $did, $versionLabel);
}
/* ------------------------------------------------------------- metadata */
/**
@ -867,17 +832,50 @@ class GreenBox extends BasicStor{
return $pa;
}
/**
* Change user password.
*
* ('superuser mode'= superuser is changing some password without
* knowledge of the old password)
*
* @param login string
* @param oldpass string, old password
* (should be null or empty for 'superuser mode')
* @param pass string, optional
* @param sessid string, session id, required for 'superuser mode'
* @return boolean/err
*/
function passwd($login, $oldpass=null, $pass='', $sessid='')
{
if(is_null($oldpass) || $oldpass == ''){
if(($res = $this->_authorize('subjects', $this->rootId, $sessid))
!== TRUE
){ sleep(2); return $res; }
else $oldpass=null;
}else{
if(FALSE === $this->authenticate($login, $oldpass)){
sleep(2);
return PEAR::raiseError(
"GreenBox::passwd: access denied (oldpass)", GBERR_DENY);
}
}
return PEAR::raiseError("GreenBox::passwd: OK");
$res = parent::passwd($login, $oldpass, $pass);
if(PEAR::isError($res)) return $res;
return TRUE;
}
/**
* Insert permission record
*
* @param sessid string, session id
* @param sid int - local user/group id
* @param action string
* @param oid int - local object id
* @param type char - 'A'|'D' (allow/deny)
* @param sessid string, session id
* @return int - local permission id
*/
function addPerm($sessid, $sid, $action, $oid, $type='A')
function addPerm($sid, $action, $oid, $type='A', $sessid='')
{
$parid = $this->getParent($oid);
if(($res = $this->_authorize('editPerms', $parid, $sessid)) !== TRUE){
@ -889,20 +887,22 @@ class GreenBox extends BasicStor{
/**
* Remove permission record
*
* @param sessid string, session id
* @param permid int OPT - local permission id
* @param subj int OPT - local user/group id
* @param obj int OPT - local object id
* @param sessid string, session id
* @return boolean/error
*/
function removePerm($sessid, $permid=NULL, $subj=NULL, $obj=NULL)
function removePerm($permid=NULL, $subj=NULL, $obj=NULL, $sessid='')
{
$oid = $this->_getPermOid($permid);
if(PEAR::isError($oid)) return $oid;
if(!is_null($oid)){
$parid = $this->getParent($oid);
if(($res = $this->_authorize('editPerms', $parid, $sessid)) !== TRUE)
return $res;
if(!is_null($permid)){
$oid = $this->_getPermOid($permid);
if(PEAR::isError($oid)) return $oid;
if(!is_null($oid)){
$parid = $this->getParent($oid);
if(($res = $this->_authorize('editPerms', $parid, $sessid)) !== TRUE)
return $res;
}
}
$res = parent::removePerm($permid, $subj, $obj);
return $res;