Delete operation replaced by moving to trash.
+ #887 feature added + #885 fixed
This commit is contained in:
parent
c153560ab9
commit
ecf5284a5c
5 changed files with 124 additions and 78 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue