CC-1658 Remove file tree structure from code and database. Removed tables ls_class and ls_cmemb and continued removing code that was depending on the tree structure.

This commit is contained in:
paul.baranowski 2010-09-03 16:49:28 -04:00
parent 37ba68e830
commit aa9528b9fd
13 changed files with 203 additions and 649 deletions

View File

@ -9,6 +9,19 @@ ALTER TABLE ls_files
ALTER COLUMN id
SET DEFAULT NEXTVAL('file_id_seq');
DROP TABLE ls_struct;
DROP TABLE ls_tree;
DROP TABLE ls_struct CASCADE;
DROP TABLE ls_tree CASCADE;
DROP TABLE ls_classes CASCADE;
DROP TABLE ls_cmemb CASCADE;
DROP SEQUENCE ls_struct_id_seq_seq;
DROP SEQUENCE ls_tree_id_seq_seq;
DROP TABLE as_tree CASCADE;
DROP TABLE as_struct CASCADE;
DROP TABLE as_classes CASCADE;
DROP TABLE as_cmemb CASCADE;
DROP SEQUENCE as_struct_id_seq_seq;
DROP SEQUENCE as_tree_id_seq_seq;

View File

@ -214,84 +214,84 @@ class Alib {
public static function CheckPerm($sid, $action, $oid=NULL)
{
return TRUE;
global $CC_DBC;
global $CC_CONFIG;
if (!is_numeric($sid)) {
return FALSE;
}
// if (is_null($oid) or $oid=='') {
// $oid = M2tree::GetRootNode();
// global $CC_DBC;
// global $CC_CONFIG;
// if (!is_numeric($sid)) {
// return FALSE;
// }
// if (PEAR::isError($oid)) {
// return $oid;
//// if (is_null($oid) or $oid=='') {
//// $oid = M2tree::GetRootNode();
//// }
//// if (PEAR::isError($oid)) {
//// return $oid;
//// }
// if (!is_numeric($oid)) {
// return FALSE;
// }
if (!is_numeric($oid)) {
return FALSE;
}
// query construction
// shortcuts:
// p: permTable,
// s: subjTable, m smembTable,
// t: treeTable ts: structTable,
// c: classTable, cm: cmembTable
// main query elements:
$q_flds = "m.level , p.subj, s.login, action, p.type, p.obj";
$q_from = $CC_CONFIG['permTable']." p ";
// joins for solving users/groups:
$q_join = "LEFT JOIN ".$CC_CONFIG['subjTable']." s ON s.id=p.subj ";
$q_join .= "LEFT JOIN ".$CC_CONFIG['smembTable']." m ON m.gid=p.subj ";
$q_cond = "p.action in('_all', '$action') AND
(s.id=$sid OR m.uid=$sid) ";
// coalesce -1 for higher priority of nongroup rows:
// action DESC order for lower priority of '_all':
$q_ordb = "ORDER BY coalesce(m.level,-1), action DESC, p.type DESC";
$q_flds0 = $q_flds;
$q_from0 = $q_from;
$q_join0 = $q_join;
$q_cond0 = $q_cond;
$q_ordb0 = $q_ordb;
// joins for solving object tree:
$q_flds .= ", t.name, ts.level as tlevel";
//$q_join .= "LEFT JOIN ".$CC_CONFIG['treeTable']." t ON t.id=p.obj ";
//$q_join .= "LEFT JOIN ".$CC_CONFIG['structTable']." ts ON ts.parid=p.obj ";
//$q_cond .= " AND (t.id=$oid OR ts.objid=$oid)";
// action DESC order is hack for lower priority of '_all':
$q_ordb = "ORDER BY coalesce(ts.level,0), m.level, action DESC, p.type DESC";
// query by tree:
$query1 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
$r1 = $CC_DBC->getAll($query1);
if (PEAR::isError($r1)) {
return($r1);
}
// if there is row with type='A' on the top => permit
//$AllowedByTree =
// (is_array($r1) && count($r1)>0 && $r1[0]['type']=='A');
//$DeniedByTree =
// (is_array($r1) && count($r1)>0 && $r1[0]['type']=='D');
if (!USE_ALIB_CLASSES) {
return $AllowedbyTree;
}
// joins for solving object classes:
$q_flds = $q_flds0.", c.cname ";
$q_join = $q_join0."LEFT JOIN ".$CC_CONFIG['classTable']." c ON c.id=p.obj ";
$q_join .= "LEFT JOIN ".$CC_CONFIG['cmembTable']." cm ON cm.cid=p.obj ";
$q_cond = $q_cond0." AND (c.id=$oid OR cm.objid=$oid)";
$q_ordb = $q_ordb0;
// query by class:
$query2 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
$r2 = $CC_DBC->getAll($query2);
if (PEAR::isError($r2)) {
return $r2;
}
$AllowedByClass =
(is_array($r2) && count($r2)>0 && $r2[0]['type']=='A');
// not used now:
// $DeniedByClass =
// (is_array($r2) && count($r2)>0 && $r2[0]['type']=='D');
$res = ($AllowedByTree || (!$DeniedByTree && $AllowedByClass));
return $res;
// // query construction
// // shortcuts:
// // p: permTable,
// // s: subjTable, m smembTable,
// // t: treeTable ts: structTable,
// // c: classTable, cm: cmembTable
// // main query elements:
// $q_flds = "m.level , p.subj, s.login, action, p.type, p.obj";
// $q_from = $CC_CONFIG['permTable']." p ";
// // joins for solving users/groups:
// $q_join = "LEFT JOIN ".$CC_CONFIG['subjTable']." s ON s.id=p.subj ";
// $q_join .= "LEFT JOIN ".$CC_CONFIG['smembTable']." m ON m.gid=p.subj ";
// $q_cond = "p.action in('_all', '$action') AND
// (s.id=$sid OR m.uid=$sid) ";
// // coalesce -1 for higher priority of nongroup rows:
// // action DESC order for lower priority of '_all':
// $q_ordb = "ORDER BY coalesce(m.level,-1), action DESC, p.type DESC";
// $q_flds0 = $q_flds;
// $q_from0 = $q_from;
// $q_join0 = $q_join;
// $q_cond0 = $q_cond;
// $q_ordb0 = $q_ordb;
// // joins for solving object tree:
// $q_flds .= ", t.name, ts.level as tlevel";
// //$q_join .= "LEFT JOIN ".$CC_CONFIG['treeTable']." t ON t.id=p.obj ";
// //$q_join .= "LEFT JOIN ".$CC_CONFIG['structTable']." ts ON ts.parid=p.obj ";
// //$q_cond .= " AND (t.id=$oid OR ts.objid=$oid)";
// // action DESC order is hack for lower priority of '_all':
// $q_ordb = "ORDER BY coalesce(ts.level,0), m.level, action DESC, p.type DESC";
// // query by tree:
// $query1 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
// $r1 = $CC_DBC->getAll($query1);
// if (PEAR::isError($r1)) {
// return($r1);
// }
// // if there is row with type='A' on the top => permit
// //$AllowedByTree =
// // (is_array($r1) && count($r1)>0 && $r1[0]['type']=='A');
// //$DeniedByTree =
// // (is_array($r1) && count($r1)>0 && $r1[0]['type']=='D');
//
// if (!USE_ALIB_CLASSES) {
// return $AllowedbyTree;
// }
//
// // joins for solving object classes:
// $q_flds = $q_flds0.", c.cname ";
// $q_join = $q_join0."LEFT JOIN ".$CC_CONFIG['classTable']." c ON c.id=p.obj ";
// $q_join .= "LEFT JOIN ".$CC_CONFIG['cmembTable']." cm ON cm.cid=p.obj ";
// $q_cond = $q_cond0." AND (c.id=$oid OR cm.objid=$oid)";
// $q_ordb = $q_ordb0;
// // query by class:
// $query2 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
// $r2 = $CC_DBC->getAll($query2);
// if (PEAR::isError($r2)) {
// return $r2;
// }
// $AllowedByClass =
// (is_array($r2) && count($r2)>0 && $r2[0]['type']=='A');
// // not used now:
// // $DeniedByClass =
// // (is_array($r2) && count($r2)>0 && $r2[0]['type']=='D');
// $res = ($AllowedByTree || (!$DeniedByTree && $AllowedByClass));
// return $res;
} // fn CheckPerm
@ -306,10 +306,7 @@ class Alib {
public static function RemoveObj($id)
{
$r = Alib::RemovePerm(NULL, NULL, $id);
if (PEAR::isError($r)) {
return $r;
}
return ObjClasses::RemoveObj($id);
return $r;
} // fn removeObj
/* --------------------------------------------------------- users/groups */
@ -411,21 +408,14 @@ class Alib {
public static function GetSubjPerms($sid)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT t.name, t.type as otype , p.*"
." FROM ".$CC_CONFIG['permTable']." p, ".$CC_CONFIG['treeTable']." t"
." WHERE t.id=p.obj AND p.subj=$sid";
$sql = "SELECT *"
." FROM ".$CC_CONFIG['permTable']
." WHERE p.subj=$sid";
// $sql = "SELECT t.name, t.type as otype , p.*"
// ." FROM ".$CC_CONFIG['permTable']." p, ".$CC_CONFIG['treeTable']." t"
// ." WHERE t.id=p.obj AND p.subj=$sid";
$a1 = $CC_DBC->getAll($sql);
if (PEAR::isError($a1)) {
return $a1;
}
$sql2 = "SELECT c.cname as name, 'C'as otype, p.*"
." FROM ".$CC_CONFIG['permTable']." p, ".$CC_CONFIG['classTable']." c"
." WHERE c.id=p.obj AND p.subj=$sid";
$a2 = $CC_DBC->getAll($sql2);
if (PEAR::isError($a2)) {
return $a2;
}
return array_merge($a1, $a2);
return $a1;
} // fn GetSubjPerms

View File

@ -1,302 +0,0 @@
<?php
//require_once("M2tree.php");
/**
* ObjClass class
*
* A class for 'object classes' handling - i.e. groups of object in tree
*
* @package Campcaster
* @subpackage Alib
* @copyright 2010 Sourcefabric O.P.S.
* @license http://www.gnu.org/licenses/gpl.txt
*/
class ObjClasses {
/* ======================================================= public methods */
/**
* Add new class of objects
*
* @param string $cname
* @return id|PEAR_Error
*/
public static function AddClass($cname)
{
global $CC_CONFIG, $CC_DBC;
$id = $CC_DBC->nextId($CC_CONFIG['treeTable']."_id_seq");
if (PEAR::isError($id)) {
return $id;
}
$r = $CC_DBC->query("
INSERT INTO ".$CC_CONFIG['classTable']." (id, cname)
VALUES ($id, '$cname')
");
if (PEAR::isError($r)) {
return $r;
}
return $id;
}
/**
* Remove class by name
*
* @param string $cname
* @return boolean|PEAR_Error
*/
// public static function RemoveClass($cname)
// {
// $cid = ObjClasses::GetClassId($cname);
// if (PEAR::isError($cid)) {
// return($cid);
// }
// return ObjClasses::RemoveClassById($cid);
// }
/**
* Remove class by id
*
* @param int $cid
* @return boolean|PEAR_Error
*/
public static function RemoveClassById($cid)
{
global $CC_CONFIG, $CC_DBC;
$sql = "DELETE FROM ".$CC_CONFIG['cmembTable']
." WHERE cid=$cid";
$r = $CC_DBC->query($sql);
if (PEAR::isError($r)) {
return $r;
}
$sql = "DELETE FROM ".$CC_CONFIG['classTable']
." WHERE id=$cid";
$r = $CC_DBC->query($sql);
if (PEAR::isError($r)) {
return $r;
}
return TRUE;
}
/**
* Add object to class
*
* @param int $cid
* @param int $oid
* @return TRUE|PEAR_Error
*/
public static function AddObjectToClass($cid, $oid)
{
global $CC_CONFIG, $CC_DBC;
$sql = "INSERT INTO ".$CC_CONFIG['cmembTable']." (cid, objid)"
." VALUES ($cid, $oid)";
$r = $CC_DBC->query($sql);
if (PEAR::isError($r)) {
return $r;
}
return TRUE;
}
/**
* Remove object from class
*
* @param int $oid
* @param int $cid, default: remove obj from all classes
* @return TRUE|PEAR_Error
*/
public static function RemoveObjectFromClass($oid, $cid=NULL)
{
global $CC_CONFIG, $CC_DBC;
$sql = "DELETE FROM ".$CC_CONFIG['cmembTable']
." WHERE objid=$oid".(is_null($cid)? '':" AND cid=$cid");
$r = $CC_DBC->query($sql);
if (PEAR::isError($r)) {
return $r;
}
return TRUE;
}
/* ---------------------------------------------------------- object tree */
/**
* Remove object from all classes and remove object itself
*
* @param int $id
* @return boolean|PEAR_Error
*/
public static function RemoveObj($id)
{
return ObjClasses::RemoveObjectFromClass($id);
}
/* --------------------------------------------------------- info methods */
/**
* Get class id from name
*
* @param string $cname
* @return int|PEAR_Error
*/
public static function GetClassId($cname)
{
global $CC_CONFIG, $CC_DBC;
$cname = pg_escape_string($cname);
$sql = "SELECT id FROM ".$CC_CONFIG['classTable']
." WHERE cname='$cname'";
return $CC_DBC->getOne($sql);
}
/**
* Get class name from id
*
* @param int $id
* @return string|PEAR_Error
*/
public static function GetClassName($id)
{
global $CC_DBC, $CC_CONFIG;
$sql = "SELECT cname FROM ".$CC_CONFIG['classTable']." WHERE id=$id";
return $CC_DBC->getOne($sql);
}
/**
* Return true is object is class
*
* @param int $id
* @return boolean|PEAR_Error
*/
public static function IsClass($id)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT count(*) FROM ".$CC_CONFIG['classTable']
." WHERE id=$id";
$r = $CC_DBC->getOne($sql);
if (PEAR::isError($r)) {
return $r;
}
return ($r > 0);
}
/**
* Return all classes
*
* @return array|PEAR_Error
*/
public static function GetClasses()
{
global $CC_CONFIG, $CC_DBC;
return $CC_DBC->getAll("SELECT * FROM ".$CC_CONFIG['classTable']);
}
/**
* Return all objects in class
*
* @param int $id
* @return array|PEAR_Error
*/
public static function ListClass($id)
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT t.* FROM ".$CC_CONFIG['cmembTable']." cm, ".$CC_CONFIG['treeTable']." t"
." WHERE cm.cid=$id AND cm.objid=t.id";
return $CC_DBC->getAll($sql);
}
/* =============================================== test and debug methods */
/**
* Dump all classes for debug
*
* @param string $indstr
* indentation string
* @param string $ind
* actual indentation
* @return string
*/
public static function DumpClasses($indstr=' ', $ind='')
{
global $CC_CONFIG, $CC_DBC;
$sql = "SELECT cname, count(cm.objid)as cnt FROM ".$CC_CONFIG['classTable']." c"
." LEFT JOIN ".$CC_CONFIG['cmembTable']." cm ON c.id=cm.cid"
." GROUP BY cname, c.id ORDER BY c.id";
$r = $ind.join(', ', array_map(
create_function('$v', 'return "{$v[\'cname\']} ({$v[\'cnt\']})";'),
$CC_DBC->getAll($sql)
))."\n";
return $r;
}
/**
* Delete all classes and membership records.
* @return void
*/
public static function DeleteData()
{
global $CC_CONFIG, $CC_DBC;
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['cmembTable']);
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['classTable']);
}
/**
* Insert test data
*
*/
public static function TestData()
{
// $tdata = M2tree::testData();
// $o['cl_sa'] = ObjClasses::AddClass('Sections a');
// $o['cl2'] = ObjClasses::AddClass('Class 2');
// ObjClasses::AddObjectToClass($o['cl_sa'], $tdata['tree']['s1a']);
// ObjClasses::AddObjectToClass($o['cl_sa'], $tdata['tree']['s2a']);
// ObjClasses::AddObjectToClass($o['cl2'], $tdata['tree']['t1']);
// ObjClasses::AddObjectToClass($o['cl2'], $tdata['tree']['pb']);
// $tdata['classes'] = $o;
// return $tdata;
}
/**
* Make basic test
*
*/
public static function Test()
{
// $p = M2tree::test();
// if (PEAR::isError($p)) {
// return $p;
// }
// ObjClasses::DeleteData();
// ObjClasses::TestData();
// $test_correct = "Sections a (2), Class 2 (2)\n";
// $test_dump = ObjClasses::DumpClasses();
// //$this->removeClass('Sections a');
// ObjClasses::RemoveObjectFromClass($tdata['tree']['pb'],
// $tdata['classes']['cl2']);
// $test_correct .= "Class 2 (1)\n";
// $test_dump .= ObjClasses::DumpClasses();
// ObjClasses::DeleteData();
// if ($test_dump == $test_correct) {
// $test_log .= "class: OK\n";
// return TRUE;
// } else {
// return PEAR::raiseError(
// 'ObjClasses::test:', 1, PEAR_ERROR_DIE, '%s'.
// "<pre>\ncorrect:\n{$test_correct}\n".
// "dump:\n{$test_dump}\n</pre>\n");
// }
}
} // class ObjClasses
?>

View File

@ -1,5 +1,5 @@
<?php
require_once("ObjClasses.php");
//require_once("ObjClasses.php");
define('ALIBERR_NOTGR', 20);
define('ALIBERR_BADSMEMB', 21);
@ -612,7 +612,7 @@ class Subjects {
global $CC_CONFIG, $CC_DBC;
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['subjTable']);
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['smembTable']);
ObjClasses::DeleteData();
//ObjClasses::DeleteData();
} // fn deleteData
@ -623,26 +623,26 @@ class Subjects {
*/
public function TestData()
{
$tdata = ObjClasses::TestData();
$o['root'] = Subjects::AddSubj('root', 'q');
$o['test1'] = Subjects::AddSubj('test1', 'a');
$o['test2'] = Subjects::AddSubj('test2', 'a');
$o['test3'] = Subjects::AddSubj('test3', 'a');
$o['test4'] = Subjects::AddSubj('test4', 'a');
$o['test5'] = Subjects::AddSubj('test5', 'a');
$o['gr1'] = Subjects::AddSubj('gr1');
$o['gr2'] = Subjects::AddSubj('gr2');
$o['gr3'] = Subjects::AddSubj('gr3');
$o['gr4'] = Subjects::AddSubj('gr4');
Subjects::AddSubjectToGroup('test1', 'gr1');
Subjects::AddSubjectToGroup('test2', 'gr2');
Subjects::AddSubjectToGroup('test3', 'gr3');
Subjects::AddSubjectToGroup('test4', 'gr4');
Subjects::AddSubjectToGroup('test5', 'gr1');
Subjects::AddSubjectToGroup('gr4', 'gr3');
Subjects::AddSubjectToGroup('gr3', 'gr2');
$tdata['subjects'] = $o;
return $tdata;
// $tdata = ObjClasses::TestData();
// $o['root'] = Subjects::AddSubj('root', 'q');
// $o['test1'] = Subjects::AddSubj('test1', 'a');
// $o['test2'] = Subjects::AddSubj('test2', 'a');
// $o['test3'] = Subjects::AddSubj('test3', 'a');
// $o['test4'] = Subjects::AddSubj('test4', 'a');
// $o['test5'] = Subjects::AddSubj('test5', 'a');
// $o['gr1'] = Subjects::AddSubj('gr1');
// $o['gr2'] = Subjects::AddSubj('gr2');
// $o['gr3'] = Subjects::AddSubj('gr3');
// $o['gr4'] = Subjects::AddSubj('gr4');
// Subjects::AddSubjectToGroup('test1', 'gr1');
// Subjects::AddSubjectToGroup('test2', 'gr2');
// Subjects::AddSubjectToGroup('test3', 'gr3');
// Subjects::AddSubjectToGroup('test4', 'gr4');
// Subjects::AddSubjectToGroup('test5', 'gr1');
// Subjects::AddSubjectToGroup('gr4', 'gr3');
// Subjects::AddSubjectToGroup('gr3', 'gr2');
// $tdata['subjects'] = $o;
// return $tdata;
} // fn TestData
@ -652,32 +652,32 @@ class Subjects {
*/
public static function Test()
{
$p = ObjClasses::Test();
if (PEAR::isError($p)) {
return $p;
}
Subjects::DeleteData();
Subjects::TestData();
$test_correct = "root(0), test1(0), test2(0), test3(0),".
" test4(0), test5(0), gr1(2), gr2(2), gr3(2), gr4(1)\n";
$test_dump = Subjects::DumpSubjects();
Subjects::RemoveSubj('test1');
Subjects::RemoveSubj('test3');
Subjects::RemoveSubjectFromGroup('test5', 'gr1');
Subjects::RemoveSubjectFromGroup('gr3', 'gr2');
$test_correct .= "root(0), test2(0), test4(0), test5(0),".
" gr1(0), gr2(1), gr3(1), gr4(1)\n";
$test_dump .= Subjects::DumpSubjects();
Subjects::DeleteData();
if ($test_dump == $test_correct) {
$test_log .= "subj: OK\n";
return TRUE;
} else {
return PEAR::raiseError(
'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'.
"<pre>\ncorrect:\n{$test_correct}\n".
"dump:\n{$test_dump}\n</pre>\n");
}
// $p = ObjClasses::Test();
// if (PEAR::isError($p)) {
// return $p;
// }
// Subjects::DeleteData();
// Subjects::TestData();
// $test_correct = "root(0), test1(0), test2(0), test3(0),".
// " test4(0), test5(0), gr1(2), gr2(2), gr3(2), gr4(1)\n";
// $test_dump = Subjects::DumpSubjects();
// Subjects::RemoveSubj('test1');
// Subjects::RemoveSubj('test3');
// Subjects::RemoveSubjectFromGroup('test5', 'gr1');
// Subjects::RemoveSubjectFromGroup('gr3', 'gr2');
// $test_correct .= "root(0), test2(0), test4(0), test5(0),".
// " gr1(0), gr2(1), gr3(1), gr4(1)\n";
// $test_dump .= Subjects::DumpSubjects();
// Subjects::DeleteData();
// if ($test_dump == $test_correct) {
// $test_log .= "subj: OK\n";
// return TRUE;
// } else {
// return PEAR::raiseError(
// 'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'.
// "<pre>\ncorrect:\n{$test_correct}\n".
// "dump:\n{$test_dump}\n</pre>\n");
// }
} // fn test
} // class Subjects

View File

@ -69,31 +69,28 @@ $CC_CONFIG = array(
#'archiveUrlHost' => 'localhost',
#'archiveUrlPort' => 80,
/* ==================================== aplication-specific configuration */
/* ==================================== application-specific configuration */
'objtypes' => array(
'RootNode' => array('Folder'),
'Storage' => array('Folder', 'File', 'Replica'),
'Folder' => array('Folder', 'File', 'Replica'),
'Storage' => array(/*'Folder',*/ 'File' /*, 'Replica'*/),
// 'Folder' => array('Folder', 'File', 'Replica'),
'File' => array(),
'audioclip' => array(),
'playlist' => array(),
'Replica' => array(),
// 'Replica' => array(),
),
'allowedActions'=> array(
'RootNode' => array('classes', 'subjects'),
'Folder' => array('editPrivs', 'write', 'read'),
// 'Folder' => array('editPrivs', 'write', 'read'),
'File' => array('editPrivs', 'write', 'read'),
'audioclip' => array('editPrivs', 'write', 'read'),
'playlist' => array('editPrivs', 'write', 'read'),
'Replica' => array('editPrivs', 'write', 'read'),
'_class' => array('editPrivs', 'write', 'read'),
// 'Replica' => array('editPrivs', 'write', 'read'),
// '_class' => array('editPrivs', 'write', 'read'),
),
'allActions' => array(
'editPrivs', 'write', 'read', 'classes', 'subjects'
'editPrivs', 'write', 'read', /*'classes',*/ 'subjects'
),
/* ============================================== auxiliary configuration */
'RootNode' => 'RootNode',
'tmpRootPass' => 'q',
);
@ -105,10 +102,6 @@ $CC_CONFIG['permTable'] = $CC_CONFIG['tblNamePrefix'].'perms';
$CC_CONFIG['sessTable'] = $CC_CONFIG['tblNamePrefix'].'sess';
$CC_CONFIG['subjTable'] = $CC_CONFIG['tblNamePrefix'].'subjs';
$CC_CONFIG['smembTable'] = $CC_CONFIG['tblNamePrefix'].'smemb';
$CC_CONFIG['classTable'] = $CC_CONFIG['tblNamePrefix'].'classes';
$CC_CONFIG['cmembTable'] = $CC_CONFIG['tblNamePrefix'].'cmemb';
$CC_CONFIG['treeTable'] = $CC_CONFIG['tblNamePrefix'].'tree';
$CC_CONFIG['structTable'] = $CC_CONFIG['tblNamePrefix'].'struct';
$CC_CONFIG['transTable'] = $CC_CONFIG['tblNamePrefix'].'trans';
$CC_CONFIG['prefTable'] = $CC_CONFIG['tblNamePrefix'].'pref';

View File

@ -1344,7 +1344,6 @@ class BasicStor {
/* ---------------------------------------------------- redefined methods */
/**
* Get object type by id.
* (RootNode, Folder, File, )
*
* @param int $oid
* Local object id
@ -1369,7 +1368,7 @@ class BasicStor {
/**
* Add new user with home folder
* Add new user
*
* @param string $login
* @param string $pass
@ -1404,7 +1403,7 @@ class BasicStor {
/**
* Remove user by login and remove also his home folder
* Remove user by login
*
* @param string $login
* @return boolean|PEAR_Error
@ -1699,8 +1698,8 @@ class BasicStor {
$storedFile->delete();
break;
case "File":
case "Folder":
case "Replica":
// case "Folder":
// case "Replica":
break;
default:
return PEAR::raiseError(

View File

@ -6,37 +6,37 @@ require_once('install/installInit.php');
require_once ('StoredFile.php');
function printUsage() {
global $CC_CONFIG;
echo "Usage:\n";
echo " ./CleanStor [OPTION] \n";
echo "\n";
echo "Options:\n";
echo " -c, --clean Removes all broken links from the storage server\n";
echo " and empties all missing file information from the database.\n";
echo " and empties all missing file information from the database.\n";
echo "\n";
echo " -e, --empty Removes all files from the storage server \n";
echo " and empties all relevant information from the database.\n\n";
echo " and empties all relevant information from the database.\n\n";
echo "Storage server: ". $CC_CONFIG["storageDir"] ."\n\n\n";
}
function camp_clean_files($p_path) {
if (!empty($p_path) && (strlen($p_path) > 4)) {
list($dirList,$fileList) = File_Find::maptree($p_path);
$array_mus;
foreach ($fileList as $filepath) {
if (@substr($filepath, strlen($filepath) - 3) != "xml") {
$array_mus[] = $filepath;
}
}
foreach ($array_mus as $audio_file) {
if (@is_link($audio_file) && !@stat($audio_file)) {
//filesystem clean up.
@unlink($audio_file);
echo "unlinked $audio_file\n";
@ -44,31 +44,31 @@ function camp_clean_files($p_path) {
echo "unlinked " . $audio_file . ".xml\n";
@rmdir(@dirname($audio_file));
echo "removed dir " . @dirname($audio_file) . "\n";
//database clean up.
$stored_audio_file = StoredFile::RecallByGunid(@basename($audio_file));
$stored_audio_file->delete();
}
}
}
}
}
function camp_remove_files($p_path) {
if (!empty($p_path) && (strlen($p_path) > 4)) {
list($dirList,$fileList) = File_Find::maptree($p_path);
foreach ($fileList as $filepath) {
echo " * Removing $filepath\n";
@unlink($filepath);
echo "done.\n";
}
}
foreach ($dirList as $dirpath) {
echo " * Removing $dirpath\n";
@rmdir($dirpath);
echo "done.\n";
}
}
}
}
@ -84,22 +84,14 @@ function camp_empty_db($db) {
else {
echo " * Skipping: database table ".$CC_CONFIG['prefTable']."\n";
}
if (camp_db_table_exists($CC_CONFIG['treeTable'])) {
echo " * Deleting from database table ".$CC_CONFIG['treeTable']."\n";
$sql = "DELETE FROM ".$CC_CONFIG['treeTable'];
camp_install_query($sql, false);
}
else {
echo " * Skipping: database table ".$CC_CONFIG['treeTable']."\n";
}
if (camp_db_table_exists($CC_CONFIG['mdataTable'])) {
echo " * Deleting from database table ".$CC_CONFIG['mdataTable']."\n";
echo " * Deleting from database table ".$CC_CONFIG['mdataTable']."\n";
$sql = "DELETE FROM ".$CC_CONFIG['mdataTable'];
camp_install_query($sql, false);
}
else {
echo " * Skipping: database table ".$CC_CONFIG['mdataTable']."\n";
}
}
}
}
@ -108,9 +100,9 @@ global $CC_CONFIG;
$CC_DBC = DB::connect($CC_CONFIG['dsn'], TRUE);
$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC);
switch($argv[1]){
case '-e':
case '--empty':
camp_empty_db($CC_DBC);
@ -122,7 +114,7 @@ switch($argv[1]){
break;
default:
printUsage();
}
?>

View File

@ -67,13 +67,11 @@ class M3uPlaylist {
* hash relation from filenames to gunids
* @param string $plid
* playlist gunid
* @param int $parid
* destination folder local id
* @param int $subjid
* local subject (user) id (id of user doing the import)
* @return Playlist
*/
function import(&$gb, $aPath, $rPath, &$gunids, $plid, $parid, $subjid=NULL)
function import(&$gb, $aPath, $rPath, &$gunids, $plid, $subjid=NULL)
{
$path = realpath("$aPath/$rPath");
if (FALSE === $path) {
@ -86,7 +84,7 @@ class M3uPlaylist {
return $arr;
}
require_once("Playlist.php");
$pl =& Playlist::create($gb, $plid, "imported_M3U", $parid);
$pl =& Playlist::create($gb, $plid, "imported_M3U");
if (PEAR::isError($pl)) {
return $pl;
}
@ -111,7 +109,7 @@ class M3uPlaylist {
case "xml":
case "smil":
case "m3u":
$acId = $gb->bsImportPlaylistRaw($parid, $gunid,
$acId = $gb->bsImportPlaylistRaw($gunid,
$aPath, $uri, $ext, $gunids, $subjid);
if (PEAR::isError($acId)) {
break;

View File

@ -30,11 +30,9 @@ class Playlist extends StoredFile {
* unique id
* @param string $fname
* name of new file
* @param int $parid
* local object id of parent folder
* @return instance of Playlist object
*/
public function create(&$gb, $plid, $fname=NULL, $parid=NULL)
public function create(&$gb, $plid, $fname=NULL)
{
$tmpFname = uniqid('');
$values = array(

View File

@ -212,10 +212,6 @@ class Renderer
$realOgg = $r['realFname'];
$owner = $r['owner'];
$gunid = $r['gunid'];
// $parid = $gb->_getHomeDirId($owner);
// if (PEAR::isError($parid)) {
// return $parid;
// }
$fileName = 'rendered_playlist';
$id = BasicStor::IdFromGunid($gunid);
if (PEAR::isError($id)) {

View File

@ -43,15 +43,13 @@ class SmilPlaylist {
* hash relation from filenames to gunids
* @param string $plid
* playlist gunid
* @param int $parid
* destination folder local id
* @param int $subjid
* local subject (user) id (id of user doing the import)
* @return Playlist
*/
public static function &import(&$gb, $aPath, $rPath, &$gunids, $plid, $parid, $subjid=NULL)
public static function &import(&$gb, $aPath, $rPath, &$gunids, $plid, $subjid=NULL)
{
$parr = compact('parid', 'subjid', 'aPath', 'plid', 'rPath');
$parr = compact('subjid', 'aPath', 'plid', 'rPath');
$path = realpath("$aPath/$rPath");
if (FALSE === $path) {
return PEAR::raiseError(
@ -63,7 +61,7 @@ class SmilPlaylist {
return $lspl;
}
require_once("Playlist.php");
$pl =& Playlist::create($gb, $plid, "imported_SMIL", $parid);
$pl =& Playlist::create($gb, $plid, "imported_SMIL");
if (PEAR::isError($pl)) {
return $pl;
}
@ -92,7 +90,7 @@ class SmilPlaylist {
* @param hasharray $gunids
* hash relation from filenames to gunids
* @param array $parr
* array of parid, subjid, aPath, plid, rPath
* array of subjid, aPath, plid, rPath
* @return string
* XML of playlist in Campcaster playlist format
*/
@ -239,7 +237,7 @@ class SmilPlaylistAudioElement {
case "smil":
case "m3u":
$type = 'playlist';
$acId = $gb->bsImportPlaylistRaw($parid, $gunid,
$acId = $gb->bsImportPlaylistRaw($gunid,
$aPath, $uri, $ext, $gunids, $subjid);
if (PEAR::isError($acId)) {
return $r;

View File

@ -11,7 +11,6 @@
* <dt>AdminsGr <dd>name of admin group
* <dt>StationPrefsGr <dd>name of station preferences group
* <dt>AllGr <dd>name of 'all users' group
* <dt>TrashName <dd>name of trash folder (subfolder of the storageRoot)
* <dt>storageDir <dd>main directory for storing binary media files
* <dt>bufferDir <dd>directory for temporary files
* <dt>transDir <dd>directory for incomplete transferred files
@ -85,29 +84,24 @@ $CC_CONFIG = array(
/* ==================================== aplication-specific configuration */
'objtypes' => array(
'RootNode' => array('Folder'),
'Storage' => array('Folder', 'File', 'Replica'),
'Folder' => array('Folder', 'File', 'Replica'),
'Storage' => array(/*'Folder',*/ 'File' /*, 'Replica'*/),
'File' => array(),
'audioclip' => array(),
'playlist' => array(),
'Replica' => array(),
// 'Replica' => array(),
),
'allowedActions'=> array(
'RootNode' => array('classes', 'subjects'),
'Folder' => array('editPrivs', 'write', 'read'),
'File' => array('editPrivs', 'write', 'read'),
'audioclip' => array('editPrivs', 'write', 'read'),
'playlist' => array('editPrivs', 'write', 'read'),
'Replica' => array('editPrivs', 'write', 'read'),
'_class' => array('editPrivs', 'write', 'read'),
// 'Replica' => array('editPrivs', 'write', 'read'),
// '_class' => array('editPrivs', 'write', 'read'),
),
'allActions' => array(
'editPrivs', 'write', 'read', 'classes', 'subjects'
'editPrivs', 'write', 'read', /*'classes',*/ 'subjects'
),
/* ============================================== auxiliary configuration */
'RootNode' => 'RootNode',
'tmpRootPass' => 'q',
/* =================================================== cron configuration */
@ -126,10 +120,6 @@ $CC_CONFIG['permTable'] = $CC_CONFIG['tblNamePrefix'].'perms';
$CC_CONFIG['sessTable'] = $CC_CONFIG['tblNamePrefix'].'sess';
$CC_CONFIG['subjTable'] = $CC_CONFIG['tblNamePrefix'].'subjs';
$CC_CONFIG['smembTable'] = $CC_CONFIG['tblNamePrefix'].'smemb';
$CC_CONFIG['classTable'] = $CC_CONFIG['tblNamePrefix'].'classes';
$CC_CONFIG['cmembTable'] = $CC_CONFIG['tblNamePrefix'].'cmemb';
$CC_CONFIG['treeTable'] = $CC_CONFIG['tblNamePrefix'].'tree';
$CC_CONFIG['structTable'] = $CC_CONFIG['tblNamePrefix'].'struct';
$CC_CONFIG['transTable'] = $CC_CONFIG['tblNamePrefix'].'trans';
$CC_CONFIG['prefTable'] = $CC_CONFIG['tblNamePrefix'].'pref';
$CC_CONFIG['playlogTable'] = 'playlog';

View File

@ -21,126 +21,6 @@ if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
//------------------------------------------------------------------------------
// Install database tables
//------------------------------------------------------------------------------
if (!camp_db_table_exists($CC_CONFIG['treeTable'])) {
echo " * Creating database table ".$CC_CONFIG['treeTable']."...";
$sql = "CREATE TABLE ".$CC_CONFIG['treeTable']." (
id int not null PRIMARY KEY,
name varchar(255) not null default'',
-- parid int,
type varchar(255) not null default'',
param varchar(255))";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['treeTable']."_id_seq");
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['treeTable']."_id_idx
ON ".$CC_CONFIG['treeTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['treeTable']."_name_idx
ON ".$CC_CONFIG['treeTable']." (name)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['treeTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['structTable'])) {
echo " * Creating database table ".$CC_CONFIG['structTable']."...";
$sql = "CREATE TABLE ".$CC_CONFIG['structTable']." (
rid int not null PRIMARY KEY,
objid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
parid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
level int)";
camp_install_query($sql, false);
$CC_DBC->createSequence($CC_CONFIG['structTable']."_id_seq");
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_rid_idx
ON ".$CC_CONFIG['structTable']." (rid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_objid_idx
ON ".$CC_CONFIG['structTable']." (objid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_parid_idx
ON ".$CC_CONFIG['structTable']." (parid)";
camp_install_query($sql, false);
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_level_idx
ON ".$CC_CONFIG['structTable']." (level)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_level_idx
ON ".$CC_CONFIG['structTable']." (objid, level)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_parid_idx
ON ".$CC_CONFIG['structTable']." (objid, parid)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['structTable']."\n";
}
//
// Insert the RootNode if its not there yet.
//
$sql = "SELECT * FROM ".$CC_CONFIG['treeTable']
." WHERE name='".$CC_CONFIG['RootNode']."'"
." AND type='RootNode'";
$row = $CC_DBC->GetRow($sql);
if (!PEAR::isError($row) && !$row) {
echo " * Creating ROOT NODE in ".$CC_CONFIG['treeTable']."...";
$oid = $CC_DBC->nextId($CC_CONFIG['treeTable']."_id_seq");
if (PEAR::isError($oid)) {
echo $oid->getMessage()."\n";
//print_r($oid);
exit();
}
$CC_DBC->query("
INSERT INTO ".$CC_CONFIG['treeTable']."
(id, name, type)
VALUES
($oid, '".$CC_CONFIG['RootNode']."', 'RootNode')
");
echo "done.\n";
} else {
echo " * Skipping: Root node already exists in ".$CC_CONFIG['treeTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['classTable'])) {
echo " * Creating database table ".$CC_CONFIG['classTable']."...";
$sql = "CREATE TABLE ".$CC_CONFIG['classTable']." (
id int not null PRIMARY KEY,
cname varchar(20))";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_id_idx
ON ".$CC_CONFIG['classTable']." (id)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_cname_idx
ON ".$CC_CONFIG['classTable']." (cname)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['classTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['cmembTable'])) {
echo " * Creating database table ".$CC_CONFIG['cmembTable']."...";
$sql = "CREATE TABLE ".$CC_CONFIG['cmembTable']." (
objid int not null,
cid int not null)";
camp_install_query($sql, false);
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['cmembTable']."_idx
ON ".$CC_CONFIG['cmembTable']." (objid, cid)";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['cmembTable']."\n";
}
if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
echo " * Creating database table ".$CC_CONFIG['subjTable']."...";
$sql = "CREATE TABLE ".$CC_CONFIG['subjTable']." (
@ -292,6 +172,15 @@ if (!camp_db_table_exists($CC_CONFIG['filesTable'])) {
$sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_md5_idx
ON ls_files (md5)";
camp_install_query($sql);
$sql = "CREATE SEQUENCE file_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1000000
CACHE 1";
camp_install_query($sql);
} else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['filesTable']."\n";
}