All pastes #238894 Raw Edit

Stuff

public text v1 · immutable
·published 2006-11-05 04:04 UTC
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;
	}
};

?>