From 6d72afb46228e185201671c62aaf7f254d7a7bd9 Mon Sep 17 00:00:00 2001 From: "Jonathan.Wage" Date: Thu, 6 Sep 2007 15:51:12 +0000 Subject: [PATCH] INitial entry. --- .../modules/manual/actions/actions.class.php | 331 ++++++++++++++++++ .../modules/manual/templates/indexSuccess.php | 17 + .../modules/manual/templates/xhtml.tpl.php | 62 ++++ website/config/doctrine/blog_post.yml | 22 ++ website/lib/model/doctrine/BlogPost.class.php | 10 + .../model/doctrine/BlogPostTable.class.php | 10 + .../doctrine/generated/BaseBlogPost.class.php | 30 ++ 7 files changed, 482 insertions(+) create mode 100644 website/apps/frontend/modules/manual/actions/actions.class.php create mode 100644 website/apps/frontend/modules/manual/templates/indexSuccess.php create mode 100644 website/apps/frontend/modules/manual/templates/xhtml.tpl.php create mode 100644 website/config/doctrine/blog_post.yml create mode 100644 website/lib/model/doctrine/BlogPost.class.php create mode 100644 website/lib/model/doctrine/BlogPostTable.class.php create mode 100644 website/lib/model/doctrine/generated/BaseBlogPost.class.php diff --git a/website/apps/frontend/modules/manual/actions/actions.class.php b/website/apps/frontend/modules/manual/actions/actions.class.php new file mode 100644 index 000000000..0165f53b7 --- /dev/null +++ b/website/apps/frontend/modules/manual/actions/actions.class.php @@ -0,0 +1,331 @@ + $conn, + 'tableName' => 'cache' + ); + + $this->_cache = new Doctrine_Cache_Db($options); + + try { + $this->_cache->createTable(); + } catch (Doctrine_Connection_Exception $e) { + if ($e->getPortableCode() !== Doctrine::ERR_ALREADY_EXISTS) { + $this->_cache = null; + } + } + + } catch (Exception $e) { + $this->_cache = null; + } + } + + /** + * Fetches a cache record from cache. + * + * @param $id string the id of the cache record + * @return string fetched cache record, or false on failure + */ + public function fetch($id) + { + if ($this->_cache !== null) { + try { + return $this->_cache->fetch($id); + } catch (Exception $e) { + return false; + } + } + + return false; + } + + /** + * Saves a cache record to cache. + * + * @param $data mixed the data to be saved to cache + * @param $id string the id of the cache record + * @return bool True on success, false on failure + */ + public function save($data, $id) + { + if ($this->_cache !== null) { + try { + return $this->_cache->save($data, $id); + } catch (Exception $e) { + return false; + } + } + + return false; + } + + /** + * Deletes all cached records from cache. + * + * @return True on success, false on failure + */ + public function deleteAll() + { + if ($this->_cache !== null) { + try { + return $this->_cache->deleteAll(); + } catch (Exception $e) { + return false; + } + } + + return false; + } +} + +/** + * manual actions. + * + * @package doctrine_website + * @subpackage manual + * @author Your name here + * @version SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $ + */ +class manualActions extends sfActions +{ + /** + * Executes index action + * + */ + public function executeIndex() + { + error_reporting(E_ALL); + + $trunk = dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))); + $vendorPath = $trunk.DIRECTORY_SEPARATOR.'vendor'; + $manualPath = $trunk.DIRECTORY_SEPARATOR.'manual'; + $doctrinePath = $trunk.DIRECTORY_SEPARATOR.'lib'; + + $includePath = $doctrinePath.PATH_SEPARATOR.$vendorPath.PATH_SEPARATOR.$manualPath.DIRECTORY_SEPARATOR.'new'.DIRECTORY_SEPARATOR.'lib'; + + set_include_path($includePath); + + require_once('Sensei/Sensei.php'); + + spl_autoload_register(array('Doctrine', 'autoload')); + spl_autoload_register(array('Sensei', 'autoload')); + spl_autoload_register('autoload'); + + // Temporary directory used by cache and LaTeX to Pdf conversion + $tempDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tmp'; + + // The file where cached data is saved + $cacheFile = $tempDir . DIRECTORY_SEPARATOR . 'cache.sq3'; + + $cache = new Cache($cacheFile); + + // Fetch the revision of cached data + $cacheRev = $cache->fetch('revision'); + + // Check the revision of documentation files + $revision = getSvnRevision('.'); + + // Is current SVN revision greater than the revision of cached data? + if ($revision > $cacheRev) { + $cache->deleteAll(); // cached data is not valid anymore + $cache->save($revision, 'revision'); + } + + // Load table of contents from cache + $this->toc = $cache->fetch('toc'); + + // If table of contents was not cached, parse it from documentation files + if ( ! $this->toc instanceof Sensei_Doc_Toc) { + $this->toc = new Sensei_Doc_Toc($manualPath.'/new/docs/en.txt'); + $cache->save($this->toc, 'toc'); + } + + // Which format to output docs + if (isset($_GET['format'])) { + $format = ucfirst(strtolower($_GET['format'])); + + switch ($format) { + case 'Xhtml': + case 'Latex': + case 'Pdf': + break; + default: + $format = 'Xhtml'; // default if invalid format is specified + break; + } + + } else { + $format = 'Xhtml'; // default if no format is specified + } + + $this->rendererClass = 'Sensei_Doc_Renderer_' . $format; + $this->renderer = new $this->rendererClass($this->toc); + + $this->renderer->setOptions(array( + 'title' => 'Doctrine Manual', + 'author' => 'Konsta Vesterinen', + 'version' => 'Rev. ' . $revision, + 'subject' => 'Object relational mapping', + 'keywords' => 'PHP, ORM, object relational mapping, Doctrine, database' + )); + + $cacheId = $format; + + switch ($format) { + case 'Latex': + $this->renderer->setOption('template', file_get_contents($manualPath.'/new/templates/latex.tpl.php')); + + $headers = array( + 'Content-Type: application/latex', + 'Content-Disposition: attachment; filename=doctrine-manual.tex' + ); + break; + + case 'Pdf': + $this->renderer->setOption('template', file_get_contents($manualPath.'/new/templates/latex.tpl.php')); + + $this->renderer->setOptions(array( + 'temp_dir' => $tempDir, + 'pdflatex_path' => '/usr/bin/pdflatex', + 'lock' => true + )); + + $headers = array( + 'Content-Type: application/pdf', + 'Content-Disposition: attachment; filename=doctrine-manual.pdf' + ); + break; + + case 'Xhtml': + default: + $viewIndex = true; + + if (isset($_GET['one-page'])) { + $viewIndex = false; + } + + if (isset($_GET['chapter'])) { + $section = $this->toc->findByPath($_GET['chapter']); + + if ($section && $section->getLevel() === 1) { + $title = $this->renderer->getOption('title') . ' - Chapter ' + . $section->getIndex() . ' ' . $section->getName(); + + $this->renderer->setOptions(array( + 'section' => $section, + 'url_prefix' => '?chapter=', + 'title' => $title + )); + + $cacheId .= '-' . $section->getPath(); + $viewIndex = false; + } + } + break; + + } + + if (isset($viewIndex) && $viewIndex) { + + $title = $this->renderer->getOption('title'); + $this->title = $title; + } else { + $this->output = $cache->fetch($cacheId); + + if ($this->output === false) { + try { + $this->output = $this->renderer->render(); + } catch (Exception $e) { + die($e->getMessage()); + } + $cache->save($this->output, $cacheId); + } + + if (isset($headers)) { + foreach ($headers as $header) { + header($header); + } + } + } + + if( $format == 'Latex' OR $format == 'Pdf' ) + { + echo $this->output; + exit; + } + } +} diff --git a/website/apps/frontend/modules/manual/templates/indexSuccess.php b/website/apps/frontend/modules/manual/templates/indexSuccess.php new file mode 100644 index 000000000..ff8d41682 --- /dev/null +++ b/website/apps/frontend/modules/manual/templates/indexSuccess.php @@ -0,0 +1,17 @@ +

Doctrine Manual

+ +

There are several different versions of this manual available online: +

+

+ + + + + + + renderToc(); ?> + \ No newline at end of file diff --git a/website/apps/frontend/modules/manual/templates/xhtml.tpl.php b/website/apps/frontend/modules/manual/templates/xhtml.tpl.php new file mode 100644 index 000000000..5fff596d1 --- /dev/null +++ b/website/apps/frontend/modules/manual/templates/xhtml.tpl.php @@ -0,0 +1,62 @@ + + + + + +%TITLE% + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +%CONTENT% + +
+ +
+ + + + diff --git a/website/config/doctrine/blog_post.yml b/website/config/doctrine/blog_post.yml new file mode 100644 index 000000000..ecbcbf8af --- /dev/null +++ b/website/config/doctrine/blog_post.yml @@ -0,0 +1,22 @@ +--- +BlogPost: + tableName: blog_post + columns: + id: + type: integer + size: 4 + primary: true + autoincrement: true + created_at: + type: timestamp + updated_at: + type: timestamp + name: + type: string + size: 255 + slug: + type: string + size: 255 + unique: true + body: + type: clob \ No newline at end of file diff --git a/website/lib/model/doctrine/BlogPost.class.php b/website/lib/model/doctrine/BlogPost.class.php new file mode 100644 index 000000000..1ef985d94 --- /dev/null +++ b/website/lib/model/doctrine/BlogPost.class.php @@ -0,0 +1,10 @@ +setTableName('blog_post'); + + $this->hasColumn('id', 'integer', 4, array ( 'primary' => true, 'autoincrement' => true,)); + $this->hasColumn('created_at', 'timestamp', null, array ()); + $this->hasColumn('updated_at', 'timestamp', null, array ()); + $this->hasColumn('name', 'string', 255, array ()); + $this->hasColumn('slug', 'string', 255, array ( 'unique' => true,)); + $this->hasColumn('body', 'clob', null, array ()); + } + + + + public function setUp() + { + + } + +}