documentation.php 33.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
<?php
require_once("highlight.php");
error_reporting(E_ALL);
include("top.php");
$h = new PHP_Highlight();

function render($title,$t,$e) {
    global $h;
    print $e." <a name=\"$e\"><u>".$t."</u></a><br><br>\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) == "<?php") {
            include("docs/$title - $t.php");
        } else
            print $c."<br><br>";
    }
    $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 "<table border=1 class='dashed' cellpadding=0 cellspacing=0>";
        print "<tr><td>";
         $c = file_get_contents("codes/$title - $t.php");
        $c = trim($c);

        $h->loadString($c);
        print $h->toHtml();
        print "</td></tr>";
        print "</table>";
    }
    print "<br>";
}

function render_block($name) {

    if(file_exists("docs/$name.php")) {
        $c = file_get_contents("docs/$name.php");
        if(substr($c,0,5) == "<?php") {
            include("docs/$name.php");
        } else {
            print $c."<br><br>";
        }
    }
    if(file_exists("codes/$name.php")) {
        $c = file_get_contents("codes/$name.php");
        $c = trim($c);
        renderCode($c);
    }
}
zYne's avatar
zYne committed
62

63
function renderCode($c = null) {
zYne's avatar
zYne committed
64
    global $h;
65
    if( ! empty($c)) {
zYne's avatar
zYne committed
66

67 68 69
        $h->loadString($c);

        print "<table width=500 border=1 class='dashed' cellpadding=0 cellspacing=0>";
zYne's avatar
zYne committed
70
        print "<tr><td><b>";
71

zYne's avatar
zYne committed
72
        $h->toHtml();
zYne's avatar
zYne committed
73
        print "</b></td></tr>";
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
        print "</table>";
    }
}
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;
}
zYne's avatar
zYne committed
95
$menu = array('Getting started' =>
96
                        array(
zYne's avatar
zYne committed
97 98 99 100 101 102 103 104
                        'Requirements',
                        'Installation',
                        'Compiling',
                        'Starting new project',
                        'Setting table definition' => array(
                                        'Introduction',
                                        'Table and class naming',
                                        'Field(Column) naming',
zYne's avatar
zYne committed
105
                                        'Table options',
zYne's avatar
zYne committed
106 107 108 109
                                        'Data types and lengths',
                                        'Constraints and validators',
                                        'Default values',
                                        'Enum emulation',
110 111
                                        ),

zYne's avatar
zYne committed
112 113 114 115 116
                        'Record identifiers' => array(
                                        'Introduction',
                                        'Autoincremented',
                                        'Natural',
                                        'Composite',
zYne's avatar
zYne committed
117
                                        'Sequence')
118
                        ),
zYne's avatar
zYne committed
119
           'Connection management' =>
zYne's avatar
zYne committed
120
                        array(
zYne's avatar
zYne committed
121 122 123 124
                        'Opening a new connection',
                        'Lazy-connecting to database',
                        'Managing connections',
                        'Connection-component binding'
zYne's avatar
zYne committed
125
                        ),
zYne's avatar
zYne committed
126
           'Schema reference' =>
127
                        array(
zYne's avatar
zYne committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
                        'Data types' => array(
                                        'Introduction',
                                        'Type modifiers',
                                        'Boolean',
                                        'Integer',
                                        'Float',
                                        'String',
                                        'Array',
                                        'Object',
                                        'Blob',
                                        'Clob',
                                        'Timestamp',
                                        'Time',
                                        'Date',
                                        'Enum',
                                        'Gzip',
144
                        ),
zYne's avatar
zYne committed
145
/**
zYne's avatar
zYne committed
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
                        'Column attributes' => array(
                                        'Introduction',
                                        'Primary',
                                        'Autoincrement',
                                        'Default',
                                        'Zerofill',
                                        'Collation',
                                        'Charset',
                                        'Unsigned',
                                        'Fixed',
                                        'Enum',
                                        'Unique',
                                        'Nospace',
                                        'Notblank',
                                        'Notnull',
                                        'Email',
                                        'Date',
                                        'Range',
                                        'Numeric',
                                        'Regexp',
                                        'Ip',
                                        'Usstate',
zYne's avatar
zYne committed
168 169
                                        ),

zYne's avatar
zYne committed
170 171 172 173 174
                        'Identifiers' => array(
                                        'Introduction',
                                        'Autoincremented',
                                        'Natural',
                                        'Composite',
zYne's avatar
zYne committed
175
                                        'Sequential')*/
176 177

                        ),
zYne's avatar
zYne committed
178
           'Basic Components' =>
179
                        array(
zYne's avatar
zYne committed
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
                        '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',
215 216
                                         ),

zYne's avatar
zYne committed
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
                        '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',
                                         'HAVING conditions',
                                         'ORDER BY - sorting query results',
                                         ),
                        'RawSql' => array(
                                         'Introduction',
                                         'Using SQL',
                                         'Adding components',
                                         'Method overloading'),
                        'Db'     => array(
                                         'Introduction',
                                         'Connecting to a database',
                                         'Using event listeners',
                                         'Chaining listeners'),
241
                                         /**
zYne's avatar
zYne committed
242 243 244 245 246
                        'Statement - <font color='red'>UNDER CONSTRUCTION</font>' => array('Introduction',
                                             'Setting parameters',
                                             'Getting parameters',
                                             'Getting row count',
                                             'Executing the statement'),
247
                                            */
zYne's avatar
zYne committed
248 249 250
                        'Exceptions' => array(
                                    'Overview',
                                    'List of exceptions'
251 252
                                    )
                        ),
zYne's avatar
zYne committed
253
           'Mapping object relations' =>
254
                        array(
zYne's avatar
zYne committed
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
                        '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'
278 279
                                        ),
                        ),
zYne's avatar
zYne committed
280
           'Hierarchical data' => array(
281 282
                        'Introduction' => array(
								'About', 'Setting up', 'Node interface', 'Tree interface', 'Traversing or Walking Trees', 'Read me'),
zYne's avatar
zYne committed
283 284
                        'Adjacency list' => array(
                                'Introduction'),
285 286
                        'Nested set' => array(
                                'Introduction', 'Setting up', 'Tree options', 'Node support', 'Tree support', 'Read me'),
zYne's avatar
zYne committed
287 288 289
                        'Materialized path' => array(
                                'Introduction',
                                    ),
290
						'Examples'
zYne's avatar
zYne committed
291 292 293
                        ),


zYne's avatar
zYne committed
294
           'Configuration' =>
295
                        array(
zYne's avatar
zYne committed
296 297 298 299 300 301 302 303 304 305 306 307
                        'Introduction',
                        'Levels of configuration',
                        'Setting attributes'    => array(
                            'Portability',
                            'Identifier quoting',
                            'Table creation',
                            'Fetching strategy',
                            'Batch size',
                            'Session lockmode',
                            'Event listener',
                            'Validation',
                            'Offset collection limit'
308 309 310 311 312
                            )
                        ),



zYne's avatar
zYne committed
313 314
           'Advanced components' => array(
                      'Eventlisteners' =>
315
                                      array(
zYne's avatar
zYne committed
316 317 318 319 320 321 322
                                      'Introduction',
                                      'Creating new listener',
                                      'List of events',
                                      'Listening events',
                                      'Chaining',
                                      'AccessorInvoker',
                                      'Creating a logger',
323
                                      ),
zYne's avatar
zYne committed
324 325 326 327 328
                      'Validators' => array(
                                      'Introduction',
                                      'More Validation',
                                      'Valid or Not Valid',
                                      'List of predefined validators'
329
                                      ),
zYne's avatar
zYne committed
330 331 332 333
                      'View'        => array(
                                      'Intoduction',
                                      'Managing views',
                                      'Using views'
334
                                      ),
zYne's avatar
zYne committed
335 336 337 338 339 340 341 342 343
                      'Cache'       => array(
                                      'Introduction',
                                      'Query cache'),

                      'Locking Manager' => array(
                                        'Introduction',
                                        'Examples',
                                        'Planned',
                                        'Technical Details',
zYne's avatar
zYne committed
344 345 346 347 348 349
                                        'Maintainer'), 
                      'Db_Profiler'  => array(
                                        'Introduction',
                                        'Basic usage',
                                        'Advanced usage',
                                        ),
350 351 352 353 354 355
                      'Hook' => array(
                                        'Introduction',
                                        'Building queries',
                                        'List of parsers',

                         ),
356
                      /**
zYne's avatar
zYne committed
357 358 359 360 361 362 363 364 365 366 367
                      'Debugger' => array(
                                        'Introduction',
                                        'Debugging actions'),
                      'Library' => array(
                                        'Introduction',
                                        'Using library functions'),
                      'Iterator' => array(
                                        'Introduction',
                                        'BatchIterator',
                                        'ExpandableIterator',
                                        'OffsetIterator')
368 369
                        */
                    ),
370

zYne's avatar
zYne committed
371
           'DQL (Doctrine Query Language)' =>
372

373 374 375 376 377
                            array(
                                  'Introduction',
                                  'SELECT queries',
                                  'UPDATE queries',
                                  'DELETE queries',
378 379 380 381 382
                                  'FROM clause',
                                  'WHERE clause',
                                  'Conditional expressions' =>
                                        array('Literals',
                                              'Input parameters',
zYne's avatar
zYne committed
383

384 385 386 387 388 389 390 391
                                              'Operators and operator precedence',
                                              'Between expressions',
                                              'In expressions',
                                              'Like Expressions',
                                              'Null Comparison Expressions',
                                              'Empty Collection Comparison Expressions',
                                              'Collection Member Expressions',
                                              'Exists Expressions',
392
                                              'All and Any Expressions',
393 394 395 396 397 398 399 400 401
                                              'Subqueries'),
                                  'Functional Expressions' =>
                                        array('String functions',
                                              'Arithmetic functions',
                                              'Datetime functions',
                                              'Collection functions'),

                                  'GROUP BY, HAVING clauses',
                                  'ORDER BY clause',
zYne's avatar
zYne committed
402 403 404 405 406 407
                                  'LIMIT and OFFSET clauses' =>
                                        array('Introduction',
                                              'Driver portability',
                                              'The limit-subquery-algorithm',
                                        ),

408 409 410
                                  'Examples',
                                  'BNF'),

zYne's avatar
zYne committed
411 412 413 414 415 416 417 418
           'Transactions' => array(
                        'Introduction',
                        'Unit of work',
                        'Nesting',
                        'Savepoints',
                        'Locking strategies' =>
                            array('Pessimistic locking',
                                  'Optimistic locking'),
419

zYne's avatar
zYne committed
420 421 422
                        'Lock modes',
                        'Isolation levels',
                        'Deadlocks',
423

zYne's avatar
zYne committed
424
                        ),
zYne's avatar
zYne committed
425 426 427 428
           'Native SQL' => array(
                        'Scalar queries',
                        'Component queries',
                        'Fetching multiple components',
429 430
                        ),
            /**
zYne's avatar
zYne committed
431 432 433 434
            'Developer components' => array(
                        'DataDict'  => array(
                                        'Introduction',
                                        'Usage'
435
                                        ),
zYne's avatar
zYne committed
436
                        'IndexGenerator' =>
437
                                       array(
zYne's avatar
zYne committed
438 439 440 441 442
                                        'Introduction',
                                        'Usage'),
                        'Relation'  => array(
                                        'Introduction',
                                        'Types of relations',
443
                                        ),
zYne's avatar
zYne committed
444 445 446
                        'Null'      => array(
                                        'Introduction',
                                        'Extremely fast null value checking'
447
                                        ),
zYne's avatar
zYne committed
448 449 450
                        'Access'    => array(
                                        'Introduction',
                                        'Usage'
451
                                        ),
zYne's avatar
zYne committed
452 453 454
                        'Configurable' => array(
                                        'Introduction',
                                        'Usage'
455 456 457
                                        ),
                        ),
            */
zYne's avatar
zYne committed
458
            /**
zYne's avatar
zYne committed
459 460 461
            'Improving performance' => array(
                            'Introduction',
                            'Data types' =>
zYne's avatar
zYne committed
462
                                array(
zYne's avatar
zYne committed
463
                                    'Enum',
zYne's avatar
zYne committed
464
                                ),
zYne's avatar
zYne committed
465 466
                            'Primary keys' => array(
                                'When to use surrogate primary keys',
zYne's avatar
zYne committed
467
                            ),
zYne's avatar
zYne committed
468 469 470 471
                            'Constraints' => array(
                                'General tips',
                                'Foreign keys',
                                'Triggers',
zYne's avatar
zYne committed
472
                            ),
zYne's avatar
zYne committed
473 474 475 476
                            'Data manipulation' => array(
                                'INSERT queries',
                                'UPDATE queries',
                                'DELETE queries',
zYne's avatar
zYne committed
477
                            ),
zYne's avatar
zYne committed
478 479 480
                            'Indexes' => array(
                                'General tips',
                                'Using compound indexes',
zYne's avatar
zYne committed
481
                            ),
zYne's avatar
zYne committed
482 483 484 485
                            'Transactions' => array(
                                'General tips',
                                'Locks',
                                'Isolation',
zYne's avatar
zYne committed
486
                            ),
zYne's avatar
zYne committed
487 488
                            'Data fetching' => array(
                                'General tips',
zYne's avatar
zYne committed
489
                            ),
zYne's avatar
zYne committed
490
                            'Normalization' => array(
zYne's avatar
zYne committed
491 492

                            ),
zYne's avatar
zYne committed
493 494
                            'Caching' => array(
                                'General tips'
zYne's avatar
zYne committed
495
                            ),
zYne's avatar
zYne committed
496
                            'Performance monitoring' => array( 'Using the database profiler') 
zYne's avatar
zYne committed
497 498
                            
                            ),
zYne's avatar
zYne committed
499
            */
zYne's avatar
zYne committed
500 501 502 503
            'Connection modules' => array(
                            'Export' => array('Introduction',
                                              'Creating new table',
                                              'Altering table'
zYne's avatar
zYne committed
504
                                              ),
zYne's avatar
zYne committed
505 506 507 508
                            'Import'    => array('Introduction',
                                                 'Getting table info',
                                                 'Getting foreign key info',
                                                 'Getting view info',
zYne's avatar
zYne committed
509
                                                ),
zYne's avatar
zYne committed
510 511 512 513
                            'Util'      => array('Using explain'),
                            'DataDict'  => array('Getting portable type',
                                                'Getting database declaration',
                                                'Reserved keywords'),
zYne's avatar
zYne committed
514
                            ),
zYne's avatar
zYne committed
515 516 517 518 519 520
            'Drivers' =>
                array('Oracle' 
                            => array('Making unsuported functions work'),
                      'Mysql' 
                            => array('Tips and tricks'),
                      ),
zYne's avatar
zYne committed
521 522 523 524 525 526 527 528 529
            'Technology' => array(
                'Architecture',
                'Design patterns used',
                'Speed',
                'Internal optimizations' =>

                        array('DELETE',
                              'INSERT',
                              'UPDATE'),
530
                ),
zYne's avatar
zYne committed
531
            'Real world examples' => array('User management system','Forum application','Album lister'),
532
            
zYne's avatar
zYne committed
533 534
            'Coding standards' => array(
                            'Overview' => 
535
                                array(
zYne's avatar
zYne committed
536 537
                                    'Scope',
                                    'Goals'
538
                                    ),
zYne's avatar
zYne committed
539 540 541 542 543
                            'PHP File Formatting' => array(
                                    'General',
                                    'Indentation',
                                    'Maximum line length',
                                    'Line termination'
544 545
                                    ),

zYne's avatar
zYne committed
546 547 548 549 550 551 552 553
                            'Naming Conventions' => array(
                                    'Classes',
                                    'Interfaces',
                                    'Filenames',
                                    'Functions and methods',
                                    'Variables',
                                    'Constants',
                                    'Record columns',
554 555 556
                                    ),


zYne's avatar
zYne committed
557 558 559 560 561 562 563 564
                            'Coding Style' => array(
                                    'PHP code demarcation',
                                    'Strings',
                                    'Arrays',
                                    'Classes',
                                    'Functions and methods',
                                    'Control statements',
                                    'Inline documentation'
565
                                    ),
zYne's avatar
zYne committed
566 567 568
                            'Testing' => array(
                                    'Writing tests',
                                ))
569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
            );


?>


<table width="100%" cellspacing=0 cellpadding=0>
    <tr>
        <td width=50>
        <td>
        <td align="left" valign="top">
            <table width="100%" cellspacing=1 cellpadding=1>
            <tr>
                <td colspan=2 bgcolor="white">
                <img src="images/logo.jpg" align="left"><b class="title">Doctrine - PHP Data Persistence and ORM Tool</b>
                <hr>
                </td>
            </tr>
            <tr>
                <td bgcolor="white" valign="top">
zYne's avatar
zYne committed
589

590 591 592 593 594 595
                <?php
                if( ! isset($_REQUEST["index"])) {
                $i = 1;
                $missing = array();
                $missing[0] = 0;
                $missing[1] = 0;
zYne's avatar
zYne committed
596
                print "<dl>\n";
597
                foreach($menu as $title => $titles) {
zYne's avatar
zYne committed
598 599
                    print "<dt>" . $i . ". <a href=\"".$_SERVER['PHP_SELF']."?index=$i#$i\">".$title."</a></dt>\n";
                    print "<dd><dl>";
600 601 602 603
                    $i2 = 1;
                    foreach($titles as $k => $t) {
                        $e = "$i.".$i2."";
                        if(is_array($t)) {
zYne's avatar
zYne committed
604
                            print "<dt>".$e." <a href=\"".$_SERVER['PHP_SELF']."?index=$i.$i2#$e\">".$k."</a><dt>\n";
605 606

                            $i3 = 1;
zYne's avatar
zYne committed
607
                            print "<dd><dl>";
608 609 610 611 612
                            foreach($t as $k2 => $v2) {
                                $str = "";
                                if( ! file_exists("docs/$title - $k - $v2.php")) {
                                    $missing[0]++;
                                    $str .= " [ <font color='red'>doc</font> ] ";
613
                                    //touch("docs/$title - $k - $v2.php");
614 615 616 617
                                }
                                if( ! file_exists("codes/$title - $k - $v2.php")) {
                                    $missing[1]++;
                                    $str .= " [ <font color='red'>code</font> ] ";
618
                                    //touch("codes/$title - $k - $v2.php");
619 620 621 622

                                }

                                $e = implode(".",array($i,$i2,$i3));
zYne's avatar
zYne committed
623
                                print "<dt>".$e." <a href=\"".$_SERVER['PHP_SELF']."?index=$i.$i2#$e\">".$v2."</a></dt>\n";
624 625
                                $i3++;
                            }
zYne's avatar
zYne committed
626 627
                            print "</dl></dd>";

628 629 630 631 632
                        } else {
                            $str = "";
                            if( ! file_exists("docs/$title - $t.php")) {
                                $missing[0]++;
                                $str .= " [ <font color='red'>doc</font> ] ";
633
                                //touch("docs/$title - $t.php");
634 635 636 637
                            }
                            if( ! file_exists("codes/$title - $t.php")) {
                                $missing[1]++;
                                $str .= " [ <font color='red'>code</font> ] ";
638
                                //touch("codes/$title - $t.php");
639
                            }
zYne's avatar
zYne committed
640
                            print "<dt>".$e." <a href=\"".$_SERVER['PHP_SELF']."?index=$i#$e\">".$t."</a></dt>\n";
641 642
                        }
                        $i2++;
zYne's avatar
zYne committed
643

644 645
                    }
                    $i++;
zYne's avatar
zYne committed
646
                    print "</dl></dd>";
647
                }
zYne's avatar
zYne committed
648 649
                print "</dl>\n";

650 651 652 653 654 655 656 657 658 659 660 661
                } else {
                    $i = 1;
                    $ex = explode(".",$_REQUEST["index"]);


                    $paths = array2path($menu);

                    if( ! isset($paths[$ex[0]]))
                        exit;

                    $break = false;
                    $tmp   = $paths;
zYne's avatar
zYne committed
662

663 664 665 666 667 668
                    foreach($tmp as $path => $title) {
                        $e = explode(".", $path);
                        if(count($e) > 2) {
                            unset($tmp[$path]);
                        }
                    }
zYne's avatar
zYne committed
669

670
                    $prev = 1;
zYne's avatar
zYne committed
671
                    
672 673 674 675
                    foreach($tmp as $path => $title) {
                        if($break)
                            break;

zYne's avatar
zYne committed
676
                        if($path === $_REQUEST["index"]) {
677 678 679 680 681
                            $break = true;
                        } else {
                            $prev = $path;
                        }
                    }
zYne's avatar
zYne committed
682

683
                    $index = $_REQUEST['index'];
zYne's avatar
zYne committed
684

685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735
                    print "<table width='100%'>";
                    print "<tr><td colspan=3 align='center'><b></td></tr>";
                    print "<tr><td colspan=3 align='center'><b class='title'>".$paths[$ex[0]]."</b></td></tr>";
                    print "<tr><td align='left'><b><a href=documentation.php?index=$prev>Prev</a></b></td>";
                    print "<td align='right'><b><a href=documentation.php?index=$path>Next</a></b></td></tr>";
                    print "<tr><td>&nbsp;</td></tr>";
                    print "</table>";


                 $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 "<a name='$path'><b class='title'>".$paths[$curr]."</b></a><hr>";

                        $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 "<br \><a name='".$numpath2."'><b class='title'>".$title."</b></a><hr style='height: 1px' \>";

                                    $s = $name." - ".$title;

                                    render_block($s);
                                }
                            }
                        }
                    } else {
zYne's avatar
zYne committed
736

737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815
                        $tmp = $paths[$ex[0]];
                        $i = 1;
                        foreach($menu[$tmp] as $title => $value) {
                            $n = $ex[0].".".$i;

                            if(is_scalar($value)) {
                                print "<dd>".$n.". <a href=\"documentation.php?index=".$n."\">".$value."</a><br \>\n";
                            } else {
                                print "<dd>".$n.". <a href=\"documentation.php?index=".$n."\">".$title."</a><br \>\n";
                            }
                            $i++;
                        }
                    }
                    }
                ?>
                <td bgcolor="white" align="left" valign="top" width=300>
                <?php
                    $i = 1;
                    print "<dd>-- <b><a href=documentation.php>index</a></b><br>\n";
                    foreach($menu as $title => $titles) {
                        print "<dd>".$i.". <a href=\"".$_SERVER['PHP_SELF']."?index=$i\">".$title."</a><br>\n";
                        $i++;
                    }
                ?>
                </td>
            <td>
            <tr>
            <td bgcolor="white" valign="top" colspan="2">
            <?php






            /**
            foreach($menu as $title => $titles) {
                if($i == $ex[0]) {

                print $i.". <b><a class=\"big\" name=\"$i\">".$title."</a></b><hr><br>\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." <b><a class=\"big\" name=\"$e\">".$k."</a></b><hr><br><br>\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++;

            }
            */
            ?>
            </td>
            </tr>
        </td>
        <td>
        </td>
    </tr>
</table>