rendered paste body<?php
class folder
{
function folder($id, $db)
{
// var_dump($id);
$this->id = $id;
$this->db = $db;
}
function exists()
{
$result = critical_query("SELECT COUNT(*) FROM tinycore_folders WHERE id = $this->id", $this->db);
$arr = mysql_fetch_assoc($result);
return $arr['COUNT(*)'] ? true : false;
}
function get_id()
{
return $this->id;
}
function get_db()
{
return $this->db;
}
function get_name()
{
$result = critical_query("SELECT name FROM tinycore_folders WHERE id = $this->id", $this->db);
$arr = mysql_fetch_assoc($result);
return $arr['name'];
}
function get_parent()
{
if(!$this->id)
return false;
$result = critical_query("SELECT parent_id FROM tinycore_folders WHERE id = $this->id", $this->db);
$arr = mysql_fetch_assoc($result);
return new folder($arr['parent_id'], $this->db);
}
function get_offset($offset)
{
if($arr = $this->enum_children($offset, 1, false))
return $arr[0];
return false;
}
function enum_children($start=0, $limit=-1, $descending=false)
{
$start = prep_input($start);
$limit = prep_input($limit);
$ret = array();
$sql = "SELECT id FROM tinycore_folders WHERE parent_id = $this->id";
if($descending)
$sql .= " ORDER BY id DESC";
$sql .= " LIMIT $start, $limit";
//if($only) $sql .= " AND name = " . prep_input($only);
$result = critical_query($sql, $this->db);
while($fid = mysql_fetch_assoc($result))
{
$ret[] = new folder((int)$fid['id'], $this->db);
}
return $ret;
}
function find_folder($like)
{
$kids = $this->enum_children();
foreach($kids as $i)
{
$found = false;
foreach($like as $key=>$val)
{
if($i->get_element($key) == $val)
$found = true;
else
break;
}
if($found)
return $i;
}
}
/*
$array
function find_children($attrs)
{
$result = critical_query("SELECT id FROM tinycore_folders WHERE parent_id = $this->id", $this->db);
$arr = mysql_fetch_assoc($result);
foreach()
{
}
}
function find_child($attrs)
{
$arr = $this->find_children($attrs);
if(!$arr)
return false;
return $arr[0];
}
*/
function size()
{
$result = critical_query("SELECT COUNT(*) FROM tinycore_folders WHERE parent_id = $this->id", $this->db);
$arr = mysql_fetch_assoc($result);
return $arr['COUNT(*)'];
}
function clear()
{
$kids = $this->enum_children();
foreach($kids as $i)
{
$i->delete();
}
}
function delete()
{
critical_query("DELETE FROM tinycore_text WHERE folder_id = $this->id", $this->db);
critical_query("DELETE FROM tinycore_numbers WHERE folder_id = $this->id", $this->db);
critical_query("DELETE FROM tinycore_folders WHERE id = $this->id", $this->db);
}
function delete_element($name)
{
$name = prep_input($name);
critical_query("DELETE FROM tinycore_text WHERE folder_id = $this->id AND name = $name", $this->db);
critical_query("DELETE FROM tinycore_numbers WHERE folder_id = $this->id AND name = $name", $this->db);
}
function get_element($name)
{
$arr = $this->get_contents($name);
if(empty($arr[$name]))
return false;
return $arr[$name];
}
function get_contents(/* arg list */)
{
$ret = array();
$sql = "SELECT name, contents FROM %s WHERE folder_id = $this->id";
if(func_num_args())
{
$sql .= " AND (";
for($i=0;;)
{
$arg = func_get_arg($i);
$sql .= 'name = ' . prep_input($arg);
if(++$i >= func_num_args())
break;
$sql .= ' OR ';
}
$sql .= ")";
}
// Text
$result = critical_query(sprintf($sql, 'tinycore_text'), $this->db);
while($arr = mysql_fetch_assoc($result))
{
$ret[ $arr['name'] ] = (string)$arr['contents'];
}
// Numbers
$result = critical_query(sprintf($sql, 'tinycore_numbers'), $this->db);
while($arr = mysql_fetch_assoc($result))
{
$ret[ $arr['name'] ] = (int)$arr['contents'];
}
// Sub-folders
$kids = $this->enum_children();
foreach($kids as $i)
{
$ret[ $i->get_name() ] = $i->get_contents();
}
return $ret;
}
function set_element($name, $value='')
{
if(is_array($value))
{
$this->create_child($name, $value);
}
else
{
$preped_name = prep_input($name);
$preped_cont = prep_input($value);
$table = is_integer($value) ? 'tinycore_numbers' : 'tinycore_text';
critical_query(
"INSERT INTO $table(folder_id, name, contents) VALUES($this->id, $preped_name, $preped_cont)",
$this->db);
}
}
function set_contents($cont)
{
foreach($cont as $key=>$val)
{
$this->set_element($key, $val);
}
}
function replace_contents($cont)
{
$this->clear();
$this->set_contents($cont);
}
function walk_path($path, $create, $uri)
{
//echo $path;
//exit();
$path = path_to_array($path);
if(empty($path))
return $this;
$fname = array_shift($path);
if($uri)
$fname = urldecode($fname);
if(!($f = $this->get_child($fname)))
{
if($create === true)
$f = $this->create_child($fname);
else
return false;
}
return $f->walk_path($path, $create, $uri);
}
function get_folder($path)
{
return $this->walk_path($path, false, false);
}
function get_folder_uri($path)
{
return $this->walk_path($path, false, true);
}
function create_folder($path)
{
return $this->walk_path($path, true, false);
}
function create_folder_uri($path)
{
return $this->walk_path($path, true, true);
}
function get_child($name)
{
$preped_name = prep_input($name);
$result = critical_query("SELECT id FROM tinycore_folders WHERE parent_id = $this->id AND name = $preped_name LIMIT 1", $this->db);
if($arr = mysql_fetch_assoc($result)) // If folder exists
{
$id = (int)$arr['id'];
return new folder($id, $this->db);
}
return false;
}
function create_child($name, $cont=array())
{
$preped_name = prep_input($name);
critical_query("INSERT INTO tinycore_folders(parent_id, name) VALUES($this->id, $preped_name)", $this->db);
$id = mysql_insert_id($this->db);
$f = new folder($id, $this->db);
$f->set_contents($cont);
return $f;
}
};
?>