".$t."

\n"; $c = ""; if(file_exists("docs/$e.php")) { rename("docs/$e.php","docs/$title - $t.php"); } if(file_exists("docs/$t.php")) { rename("docs/$t.php","docs/$title - $t.php"); } if(file_exists("docs/$title - $t.php")) { $c = file_get_contents("docs/$title - $t.php"); if(substr($c,0,5) == "
"; } $c = ""; if(file_exists("codes/$e.php")) { rename("codes/$e.php","codes/$title - $t.php"); } if(file_exists("codes/$t.php")) { rename("codes/$t.php","codes/$title - $t.php"); } if(file_exists("codes/$title - $t.php")) { print ""; print ""; print "
"; $c = file_get_contents("codes/$title - $t.php"); $c = trim($c); $h->loadString($c); print $h->toHtml(); print "
"; } print "
"; } function render_block($name) { if(file_exists("docs/$name.php")) { $c = file_get_contents("docs/$name.php"); if(substr($c,0,5) == "
"; } } if(file_exists("codes/$name.php")) { $c = file_get_contents("codes/$name.php"); $c = trim($c); renderCode($c); } } function renderCode($c = null) { if( ! empty($c)) { $h = new PHP_Highlight; $h->loadString($c); print ""; print ""; print "
"; print $h->toHtml(); print "
"; } } function array2path($array, $path = '') { $arrayValues = array(); $index = 1; foreach ($array as $k => $value) { $p = ($path !== '')?$path.".".$index:$index; if (is_scalar($value) || is_resource($value)) { $arrayValues[$p] = $value; } elseif (is_array($value)) { $arrayValues[$p] = $k; $arrayValues = $arrayValues + array2path($value, $p); } $index++; } return $arrayValues; } $menu = array("Getting started" => array( "Requirements", "Installation", "Compiling", "Starting new project", "Setting table definition" => array( "Introduction", "Table and class naming", "Field(Column) naming", "Data types and lengths", "Constraints and validators", "Default values", "Enum emulation", ), "Record identifiers" => array( "Introduction", "Autoincremented", "Natural", "Composite", "Sequential") ), /** "Schema reference" => array( "Data types" => array( "Boolean", "Integer", "Float", "String", "Array", "Object", "Blob", "Clob", "Timestamp", "Date", "Enum", "Gzip", ), ), */ "Basic Components" => array( "Manager" => array("Introduction", "Opening a new connection", "Managing connections"), "Record" => array("Introduction", "Creating new records", "Retrieving existing records", "Accessing properties", "Updating records", "Deleting records", "Getting record state", "Getting object copy", "Serializing", "Checking Existence", "Callbacks"), "Connection" => array("Introduction", "Available drivers", "Getting a table object", "Flushing the connection", "Querying the database", "Getting connection state"), "Collection" => array("Introduction", "Accessing elements", "Adding new elements", "Getting collection count", "Saving the collection", "Deleting collection", //"Fetching strategies", "Key mapping", "Loading related records", "Collection expanding", ), "Table" => array("Introduction", "Getting table information", "Finder methods", "Custom table classes", "Custom finders", "Getting relation objects"), "Query" => array("Introduction", "FROM - selecting tables", "LIMIT and OFFSET - limiting the query results", "WHERE - setting query conditions", "ORDER BY - sorting query results", //"Fetching strategies", //"Lazy property fetching", "Method overloading", "Relation operators", "Bound parameters", "Aggregate functions", "DQL - SQL conversion"), "RawSql" => array( "Introduction", "Using SQL", "Adding components", "Method overloading"), "DB" => array( "Introduction", "Connecting to a database", "Using event listeners", "Chaining listeners"), /** "Statement - UNDER CONSTRUCTION" => array("Introduction", "Setting parameters", "Getting parameters", "Getting row count", "Executing the statement"), */ "Exceptions" => array( "Overview", "List of exceptions" ) ), "Mapping object relations" => array( "Introduction", "Composites and aggregates", "Relation aliases", "Foreign key associations" => array( "One-to-One", "One-to-Many, Many-to-One", "Tree structure"), "Join table associations" => array( "One-to-One", "One-to-Many, Many-to-One", "Many-to-Many", "Self-referencing"), "Dealing with relations" => array( "Creating related records", "Retrieving related records", "Updating related records", "Deleting related records", "Working with associations"), "Inheritance" => array("One table many classes", "One table one class", "Column aggregation" ), ), "Configuration" => array( "Introduction", "Levels of configuration", "Setting attributes" => array( "Table creation", "Fetching strategy", "Batch size", "Session lockmode", "Event listener", "Validation", "Offset collection limit" ) ), "Advanced components" => array( "Eventlisteners" => array( "Introduction", "Creating new listener", "List of events", "Listening events", "Chaining", "AccessorInvoker", "Creating a logger", ), "Validators" => array( "Introduction", "More Validation", "Valid or Not Valid", "List of predefined validators" ), "View" => array( "Intoduction", "Managing views", "Using views" ), "Cache" => array( "Introduction", "Query cache"), "Locking Manager" => array( "Introduction", "Examples", "Planned", "Technical Details", "Maintainer"), /** "Debugger" => array( "Introduction", "Debugging actions"), "Library" => array( "Introduction", "Using library functions"), "Iterator" => array( "Introduction", "BatchIterator", "ExpandableIterator", "OffsetIterator") */ ), "DQL (Doctrine Query Language)" => array('Introduction', 'FROM clause', 'WHERE clause', 'Conditional expressions' => array('Literals', 'Identification variables', 'Path expressions', 'Input parameters', 'Contidional expression composition', 'Operators and operator precedence', 'Between expressions', 'In expressions', 'Like Expressions', 'Null Comparison Expressions', 'Empty Collection Comparison Expressions', 'Collection Member Expressions', 'Exists Expressions', 'All or Any Expressions', 'Subqueries'), 'Functional Expressions' => array('String functions', 'Arithmetic functions', 'Datetime functions', 'Collection functions'), 'GROUP BY, HAVING clauses', 'ORDER BY clause', 'LIMIT and OFFSET clauses', 'Examples', 'BNF'), /** 'Functions' => array( 'Contains', 'Regexp', 'Like'), 'Operators' => array( 'Logical operators') */ "Transactions" => array( "Introduction", "Unit of work", "Locking strategies" => array("Pessimistic locking", "Optimistic locking"), "Nesting" ), /** "Developer components" => array( "DataDict" => array( "Introduction", "Usage" ), "IndexGenerator" => array( "Introduction", "Usage"), "Relation" => array( "Introduction", "Types of relations", ), "Null" => array( "Introduction", "Extremely fast null value checking" ), "Access" => array( "Introduction", "Usage" ), "Configurable" => array( "Introduction", "Usage" ), ), */ "Technology" => array( "Architecture", "Design patterns used", "Speed", "Internal optimizations" => array("DELETE", "INSERT", "UPDATE"), ), "Real world examples" => array("User management system","Forum application","Album lister"), "Coding standards" => array( "Overview" => array( "Scope", "Goals" ), "PHP File Formatting" => array( "General", "Indentation", "Maximum line length", "Line termination" ), "Naming Conventions" => array( "Classes", "Interfaces", "Filenames", "Functions and methods", "Variables", "Constants", "Record columns", ), "Coding Style" => array( "PHP code demarcation", "Strings", "Arrays", "Classes", "Functions and methods", "Control statements", "Inline documentation" ), ) ); ?>
Doctrine - PHP Data Persistence and ORM Tool
$titles) { print $i.". ".$title."
\n"; $i2 = 1; foreach($titles as $k => $t) { $e = "$i.".$i2.""; if(is_array($t)) { print "
".$e." ".$k."
\n"; $i3 = 1; foreach($t as $k2 => $v2) { $str = ""; if( ! file_exists("docs/$title - $k - $v2.php")) { $missing[0]++; $str .= " [ doc ] "; touch("docs/$title - $k - $v2.php"); } if( ! file_exists("codes/$title - $k - $v2.php")) { $missing[1]++; $str .= " [ code ] "; touch("codes/$title - $k - $v2.php"); } $e = implode(".",array($i,$i2,$i3)); print "
".$e." ".$v2."$str
\n"; $i3++; } } else { $str = ""; if( ! file_exists("docs/$title - $t.php")) { $missing[0]++; $str .= " [ doc ] "; touch("docs/$title - $t.php"); } if( ! file_exists("codes/$title - $t.php")) { $missing[1]++; $str .= " [ code ] "; touch("codes/$title - $t.php"); } print "
".$e." ".$t."$str
\n"; } $i2++; } $i++; } } else { $i = 1; $ex = explode(".",$_REQUEST["index"]); $paths = array2path($menu); if( ! isset($paths[$ex[0]])) exit; $break = false; $tmp = $paths; foreach($tmp as $path => $title) { $e = explode(".", $path); if(count($e) > 2) { unset($tmp[$path]); } } $prev = 1; foreach($tmp as $path => $title) { if($break) break; if($path == $_REQUEST["index"]) { $break = true; } else { $prev = $path; } } $index = $_REQUEST['index']; print ""; print ""; print ""; print ""; print ""; print ""; print "
".$paths[$ex[0]]."
PrevNext
 
"; $tmp = $ex; if(count($tmp) > 2) { //array_pop($tmp); } foreach($tmp as $k => $v) { $numbers[] = $v; $curr = implode(".",$numbers); $stack[] = $paths[$curr]; } if(isset($ex[1])) { $name = implode(" - ", $stack); print "".$paths[$curr]."
"; $n = $numbers; $o = $paths[$n[0]]; $numpath = implode(".", array($n[0], $n[1])); $o2 = $paths[$numpath]; $value = $menu[$o]; if( ! is_array($value)) exit; if(in_array($o2, $value)) { render_block($name); } else { $value = $menu[$o][$o2]; if(is_array($value)) { foreach($value as $k => $title) { $numpath2 = $numpath . '.' . ($k + 1); print "
".$title."
"; $s = $name." - ".$title; render_block($s); } } } } else { //if( ! isset($menu[$ex[0]])) // exit; $tmp = $paths[$ex[0]]; $i = 1; foreach($menu[$tmp] as $title => $value) { $n = $ex[0].".".$i; if(is_scalar($value)) { print "
".$n.". ".$value."
\n"; } else { print "
".$n.". ".$title."
\n"; } $i++; } } } ?>
-- index
\n"; foreach($menu as $title => $titles) { print "
".$i.". ".$title."
\n"; $i++; } ?>
$titles) { if($i == $ex[0]) { print $i.". ".$title."

\n"; $i2 = 1; foreach($titles as $k => $t) { $e = "$i.".$i2; if(is_array($t)) { $tmp = "$title - $k"; if( ! isset($ex[1]) || $i2 != $ex[1]) { $i2++; continue; } print $e." ".$k."


\n"; foreach($t as $k2 => $t2) { if( ! isset($ex[1]) || $i2 != $ex[1]) break; $e = "$i.".$i2.".".($k2+1); render($tmp,$t2,$e); } } else { if( ! isset($ex[1])) { render($title,$t,$e); } } $i2++; } } $i++; } */ ?>