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; } }; ?>