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 ALTER COLUMN id
SET DEFAULT NEXTVAL('file_id_seq'); SET DEFAULT NEXTVAL('file_id_seq');
DROP TABLE ls_struct; DROP TABLE ls_struct CASCADE;
DROP TABLE ls_tree; 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) public static function CheckPerm($sid, $action, $oid=NULL)
{ {
return TRUE; return TRUE;
global $CC_DBC; // global $CC_DBC;
global $CC_CONFIG; // global $CC_CONFIG;
if (!is_numeric($sid)) { // if (!is_numeric($sid)) {
return FALSE; // return FALSE;
}
// if (is_null($oid) or $oid=='') {
// $oid = M2tree::GetRootNode();
// } // }
// if (PEAR::isError($oid)) { //// if (is_null($oid) or $oid=='') {
// return $oid; //// $oid = M2tree::GetRootNode();
//// }
//// if (PEAR::isError($oid)) {
//// return $oid;
//// }
// if (!is_numeric($oid)) {
// return FALSE;
// } // }
if (!is_numeric($oid)) { // // query construction
return FALSE; // // shortcuts:
} // // p: permTable,
// query construction // // s: subjTable, m smembTable,
// shortcuts: // // t: treeTable ts: structTable,
// p: permTable, // // c: classTable, cm: cmembTable
// s: subjTable, m smembTable, // // main query elements:
// t: treeTable ts: structTable, // $q_flds = "m.level , p.subj, s.login, action, p.type, p.obj";
// c: classTable, cm: cmembTable // $q_from = $CC_CONFIG['permTable']." p ";
// main query elements: // // joins for solving users/groups:
$q_flds = "m.level , p.subj, s.login, action, p.type, p.obj"; // $q_join = "LEFT JOIN ".$CC_CONFIG['subjTable']." s ON s.id=p.subj ";
$q_from = $CC_CONFIG['permTable']." p "; // $q_join .= "LEFT JOIN ".$CC_CONFIG['smembTable']." m ON m.gid=p.subj ";
// joins for solving users/groups: // $q_cond = "p.action in('_all', '$action') AND
$q_join = "LEFT JOIN ".$CC_CONFIG['subjTable']." s ON s.id=p.subj "; // (s.id=$sid OR m.uid=$sid) ";
$q_join .= "LEFT JOIN ".$CC_CONFIG['smembTable']." m ON m.gid=p.subj "; // // coalesce -1 for higher priority of nongroup rows:
$q_cond = "p.action in('_all', '$action') AND // // action DESC order for lower priority of '_all':
(s.id=$sid OR m.uid=$sid) "; // $q_ordb = "ORDER BY coalesce(m.level,-1), action DESC, p.type DESC";
// coalesce -1 for higher priority of nongroup rows: // $q_flds0 = $q_flds;
// action DESC order for lower priority of '_all': // $q_from0 = $q_from;
$q_ordb = "ORDER BY coalesce(m.level,-1), action DESC, p.type DESC"; // $q_join0 = $q_join;
$q_flds0 = $q_flds; // $q_cond0 = $q_cond;
$q_from0 = $q_from; // $q_ordb0 = $q_ordb;
$q_join0 = $q_join; // // joins for solving object tree:
$q_cond0 = $q_cond; // $q_flds .= ", t.name, ts.level as tlevel";
$q_ordb0 = $q_ordb; // //$q_join .= "LEFT JOIN ".$CC_CONFIG['treeTable']." t ON t.id=p.obj ";
// joins for solving object tree: // //$q_join .= "LEFT JOIN ".$CC_CONFIG['structTable']." ts ON ts.parid=p.obj ";
$q_flds .= ", t.name, ts.level as tlevel"; // //$q_cond .= " AND (t.id=$oid OR ts.objid=$oid)";
//$q_join .= "LEFT JOIN ".$CC_CONFIG['treeTable']." t ON t.id=p.obj "; // // action DESC order is hack for lower priority of '_all':
//$q_join .= "LEFT JOIN ".$CC_CONFIG['structTable']." ts ON ts.parid=p.obj "; // $q_ordb = "ORDER BY coalesce(ts.level,0), m.level, action DESC, p.type DESC";
//$q_cond .= " AND (t.id=$oid OR ts.objid=$oid)"; // // query by tree:
// action DESC order is hack for lower priority of '_all': // $query1 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
$q_ordb = "ORDER BY coalesce(ts.level,0), m.level, action DESC, p.type DESC"; // $r1 = $CC_DBC->getAll($query1);
// query by tree: // if (PEAR::isError($r1)) {
$query1 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb"; // return($r1);
$r1 = $CC_DBC->getAll($query1); // }
if (PEAR::isError($r1)) { // // if there is row with type='A' on the top => permit
return($r1); // //$AllowedByTree =
} // // (is_array($r1) && count($r1)>0 && $r1[0]['type']=='A');
// if there is row with type='A' on the top => permit // //$DeniedByTree =
//$AllowedByTree = // // (is_array($r1) && count($r1)>0 && $r1[0]['type']=='D');
// (is_array($r1) && count($r1)>0 && $r1[0]['type']=='A'); //
//$DeniedByTree = // if (!USE_ALIB_CLASSES) {
// (is_array($r1) && count($r1)>0 && $r1[0]['type']=='D'); // return $AllowedbyTree;
// }
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 ";
// joins for solving object classes: // $q_join .= "LEFT JOIN ".$CC_CONFIG['cmembTable']." cm ON cm.cid=p.obj ";
$q_flds = $q_flds0.", c.cname "; // $q_cond = $q_cond0." AND (c.id=$oid OR cm.objid=$oid)";
$q_join = $q_join0."LEFT JOIN ".$CC_CONFIG['classTable']." c ON c.id=p.obj "; // $q_ordb = $q_ordb0;
$q_join .= "LEFT JOIN ".$CC_CONFIG['cmembTable']." cm ON cm.cid=p.obj "; // // query by class:
$q_cond = $q_cond0." AND (c.id=$oid OR cm.objid=$oid)"; // $query2 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb";
$q_ordb = $q_ordb0; // $r2 = $CC_DBC->getAll($query2);
// query by class: // if (PEAR::isError($r2)) {
$query2 = "SELECT $q_flds FROM $q_from $q_join WHERE $q_cond $q_ordb"; // return $r2;
$r2 = $CC_DBC->getAll($query2); // }
if (PEAR::isError($r2)) { // $AllowedByClass =
return $r2; // (is_array($r2) && count($r2)>0 && $r2[0]['type']=='A');
} // // not used now:
$AllowedByClass = // // $DeniedByClass =
(is_array($r2) && count($r2)>0 && $r2[0]['type']=='A'); // // (is_array($r2) && count($r2)>0 && $r2[0]['type']=='D');
// not used now: // $res = ($AllowedByTree || (!$DeniedByTree && $AllowedByClass));
// $DeniedByClass = // return $res;
// (is_array($r2) && count($r2)>0 && $r2[0]['type']=='D');
$res = ($AllowedByTree || (!$DeniedByTree && $AllowedByClass));
return $res;
} // fn CheckPerm } // fn CheckPerm
@ -306,10 +306,7 @@ class Alib {
public static function RemoveObj($id) public static function RemoveObj($id)
{ {
$r = Alib::RemovePerm(NULL, NULL, $id); $r = Alib::RemovePerm(NULL, NULL, $id);
if (PEAR::isError($r)) { return $r;
return $r;
}
return ObjClasses::RemoveObj($id);
} // fn removeObj } // fn removeObj
/* --------------------------------------------------------- users/groups */ /* --------------------------------------------------------- users/groups */
@ -411,21 +408,14 @@ class Alib {
public static function GetSubjPerms($sid) public static function GetSubjPerms($sid)
{ {
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
$sql = "SELECT t.name, t.type as otype , p.*" $sql = "SELECT *"
." FROM ".$CC_CONFIG['permTable']." p, ".$CC_CONFIG['treeTable']." t" ." FROM ".$CC_CONFIG['permTable']
." WHERE t.id=p.obj AND p.subj=$sid"; ." 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); $a1 = $CC_DBC->getAll($sql);
if (PEAR::isError($a1)) { return $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);
} // fn GetSubjPerms } // 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 <?php
require_once("ObjClasses.php"); //require_once("ObjClasses.php");
define('ALIBERR_NOTGR', 20); define('ALIBERR_NOTGR', 20);
define('ALIBERR_BADSMEMB', 21); define('ALIBERR_BADSMEMB', 21);
@ -612,7 +612,7 @@ class Subjects {
global $CC_CONFIG, $CC_DBC; global $CC_CONFIG, $CC_DBC;
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['subjTable']); $CC_DBC->query("DELETE FROM ".$CC_CONFIG['subjTable']);
$CC_DBC->query("DELETE FROM ".$CC_CONFIG['smembTable']); $CC_DBC->query("DELETE FROM ".$CC_CONFIG['smembTable']);
ObjClasses::DeleteData(); //ObjClasses::DeleteData();
} // fn deleteData } // fn deleteData
@ -623,26 +623,26 @@ class Subjects {
*/ */
public function TestData() public function TestData()
{ {
$tdata = ObjClasses::TestData(); // $tdata = ObjClasses::TestData();
$o['root'] = Subjects::AddSubj('root', 'q'); // $o['root'] = Subjects::AddSubj('root', 'q');
$o['test1'] = Subjects::AddSubj('test1', 'a'); // $o['test1'] = Subjects::AddSubj('test1', 'a');
$o['test2'] = Subjects::AddSubj('test2', 'a'); // $o['test2'] = Subjects::AddSubj('test2', 'a');
$o['test3'] = Subjects::AddSubj('test3', 'a'); // $o['test3'] = Subjects::AddSubj('test3', 'a');
$o['test4'] = Subjects::AddSubj('test4', 'a'); // $o['test4'] = Subjects::AddSubj('test4', 'a');
$o['test5'] = Subjects::AddSubj('test5', 'a'); // $o['test5'] = Subjects::AddSubj('test5', 'a');
$o['gr1'] = Subjects::AddSubj('gr1'); // $o['gr1'] = Subjects::AddSubj('gr1');
$o['gr2'] = Subjects::AddSubj('gr2'); // $o['gr2'] = Subjects::AddSubj('gr2');
$o['gr3'] = Subjects::AddSubj('gr3'); // $o['gr3'] = Subjects::AddSubj('gr3');
$o['gr4'] = Subjects::AddSubj('gr4'); // $o['gr4'] = Subjects::AddSubj('gr4');
Subjects::AddSubjectToGroup('test1', 'gr1'); // Subjects::AddSubjectToGroup('test1', 'gr1');
Subjects::AddSubjectToGroup('test2', 'gr2'); // Subjects::AddSubjectToGroup('test2', 'gr2');
Subjects::AddSubjectToGroup('test3', 'gr3'); // Subjects::AddSubjectToGroup('test3', 'gr3');
Subjects::AddSubjectToGroup('test4', 'gr4'); // Subjects::AddSubjectToGroup('test4', 'gr4');
Subjects::AddSubjectToGroup('test5', 'gr1'); // Subjects::AddSubjectToGroup('test5', 'gr1');
Subjects::AddSubjectToGroup('gr4', 'gr3'); // Subjects::AddSubjectToGroup('gr4', 'gr3');
Subjects::AddSubjectToGroup('gr3', 'gr2'); // Subjects::AddSubjectToGroup('gr3', 'gr2');
$tdata['subjects'] = $o; // $tdata['subjects'] = $o;
return $tdata; // return $tdata;
} // fn TestData } // fn TestData
@ -652,32 +652,32 @@ class Subjects {
*/ */
public static function Test() public static function Test()
{ {
$p = ObjClasses::Test(); // $p = ObjClasses::Test();
if (PEAR::isError($p)) { // if (PEAR::isError($p)) {
return $p; // return $p;
} // }
Subjects::DeleteData(); // Subjects::DeleteData();
Subjects::TestData(); // Subjects::TestData();
$test_correct = "root(0), test1(0), test2(0), test3(0),". // $test_correct = "root(0), test1(0), test2(0), test3(0),".
" test4(0), test5(0), gr1(2), gr2(2), gr3(2), gr4(1)\n"; // " test4(0), test5(0), gr1(2), gr2(2), gr3(2), gr4(1)\n";
$test_dump = Subjects::DumpSubjects(); // $test_dump = Subjects::DumpSubjects();
Subjects::RemoveSubj('test1'); // Subjects::RemoveSubj('test1');
Subjects::RemoveSubj('test3'); // Subjects::RemoveSubj('test3');
Subjects::RemoveSubjectFromGroup('test5', 'gr1'); // Subjects::RemoveSubjectFromGroup('test5', 'gr1');
Subjects::RemoveSubjectFromGroup('gr3', 'gr2'); // Subjects::RemoveSubjectFromGroup('gr3', 'gr2');
$test_correct .= "root(0), test2(0), test4(0), test5(0),". // $test_correct .= "root(0), test2(0), test4(0), test5(0),".
" gr1(0), gr2(1), gr3(1), gr4(1)\n"; // " gr1(0), gr2(1), gr3(1), gr4(1)\n";
$test_dump .= Subjects::DumpSubjects(); // $test_dump .= Subjects::DumpSubjects();
Subjects::DeleteData(); // Subjects::DeleteData();
if ($test_dump == $test_correct) { // if ($test_dump == $test_correct) {
$test_log .= "subj: OK\n"; // $test_log .= "subj: OK\n";
return TRUE; // return TRUE;
} else { // } else {
return PEAR::raiseError( // return PEAR::raiseError(
'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'. // 'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'.
"<pre>\ncorrect:\n{$test_correct}\n". // "<pre>\ncorrect:\n{$test_correct}\n".
"dump:\n{$test_dump}\n</pre>\n"); // "dump:\n{$test_dump}\n</pre>\n");
} // }
} // fn test } // fn test
} // class Subjects } // class Subjects

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -21,126 +21,6 @@ if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Install database tables // 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'])) { if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
echo " * Creating database table ".$CC_CONFIG['subjTable']."..."; echo " * Creating database table ".$CC_CONFIG['subjTable']."...";
$sql = "CREATE 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 $sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_md5_idx
ON ls_files (md5)"; ON ls_files (md5)";
camp_install_query($sql); 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 { } else {
echo " * Skipping: database table already exists: ".$CC_CONFIG['filesTable']."\n"; echo " * Skipping: database table already exists: ".$CC_CONFIG['filesTable']."\n";
} }