oodt-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From skhud...@apache.org
Subject svn commit: r1350013 [1/5] - in /oodt/trunk: ./ balance/modules/puny/ balance/modules/puny/classes/ balance/modules/puny/classes/data/ balance/modules/puny/classes/parsers/ balance/modules/puny/data/ balance/modules/puny/data/resources/ balance/modules...
Date Wed, 13 Jun 2012 20:50:37 GMT
Author: skhudiky
Date: Wed Jun 13 20:50:35 2012
New Revision: 1350013

URL: http://svn.apache.org/viewvc?rev=1350013&view=rev
Log:
OODT-446: Addition of Puny module to Balance 

Added:
    oodt/trunk/balance/modules/puny/
    oodt/trunk/balance/modules/puny/README.txt
    oodt/trunk/balance/modules/puny/classes/
    oodt/trunk/balance/modules/puny/classes/Puny.class.php
    oodt/trunk/balance/modules/puny/classes/Puny_Container.class.php
    oodt/trunk/balance/modules/puny/classes/Puny_Resource.class.php
    oodt/trunk/balance/modules/puny/classes/data/
    oodt/trunk/balance/modules/puny/classes/data/Puny_DataStore.class.php
    oodt/trunk/balance/modules/puny/classes/data/Puny_LocalFileDataStore.class.php
    oodt/trunk/balance/modules/puny/classes/data/Puny_MongoDataStore.class.php
    oodt/trunk/balance/modules/puny/classes/data/Puny_PdoDataStore.class.php
    oodt/trunk/balance/modules/puny/classes/parsers/
    oodt/trunk/balance/modules/puny/classes/parsers/Puny_MarkdownParser.class.php
    oodt/trunk/balance/modules/puny/classes/parsers/Puny_Parser.class.php
    oodt/trunk/balance/modules/puny/config.ini
    oodt/trunk/balance/modules/puny/data/
    oodt/trunk/balance/modules/puny/data/resources/
    oodt/trunk/balance/modules/puny/hooks.php
    oodt/trunk/balance/modules/puny/libs/
    oodt/trunk/balance/modules/puny/libs/markdown.php
    oodt/trunk/balance/modules/puny/schemas/
    oodt/trunk/balance/modules/puny/schemas/schema.pdo.mysql
    oodt/trunk/balance/modules/puny/scripts/
    oodt/trunk/balance/modules/puny/scripts/login.php
    oodt/trunk/balance/modules/puny/scripts/logout.php
    oodt/trunk/balance/modules/puny/scripts/store.php
    oodt/trunk/balance/modules/puny/static/
    oodt/trunk/balance/modules/puny/static/css/
    oodt/trunk/balance/modules/puny/static/css/defaults.css
    oodt/trunk/balance/modules/puny/static/css/dialog.css
    oodt/trunk/balance/modules/puny/static/css/editor.css
    oodt/trunk/balance/modules/puny/static/css/github.css
    oodt/trunk/balance/modules/puny/static/css/puny.css
    oodt/trunk/balance/modules/puny/static/img/
    oodt/trunk/balance/modules/puny/static/img/icon-sprite.png   (with props)
    oodt/trunk/balance/modules/puny/static/js/
    oodt/trunk/balance/modules/puny/static/js/editable.js
    oodt/trunk/balance/modules/puny/static/js/editor/
    oodt/trunk/balance/modules/puny/static/js/editor/gollum.editor.js
    oodt/trunk/balance/modules/puny/static/js/editor/langs/
    oodt/trunk/balance/modules/puny/static/js/editor/langs/markdown.js
    oodt/trunk/balance/modules/puny/static/js/gollum.dialog.js
    oodt/trunk/balance/modules/puny/static/js/gollum.js
    oodt/trunk/balance/modules/puny/static/js/gollum.placeholder.js
    oodt/trunk/balance/modules/puny/static/js/jquery-1.7.2.min.js
    oodt/trunk/balance/modules/puny/static/js/puny.js
    oodt/trunk/balance/modules/puny/views/
    oodt/trunk/balance/modules/puny/views/edit.php
    oodt/trunk/balance/modules/puny/views/error.php
    oodt/trunk/balance/modules/puny/views/login.php
    oodt/trunk/balance/modules/puny/views/logout.php
    oodt/trunk/balance/modules/puny/views/preview.php
Modified:
    oodt/trunk/CHANGES.txt

Modified: oodt/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/oodt/trunk/CHANGES.txt?rev=1350013&r1=1350012&r2=1350013&view=diff
==============================================================================
--- oodt/trunk/CHANGES.txt (original)
+++ oodt/trunk/CHANGES.txt Wed Jun 13 20:50:35 2012
@@ -4,6 +4,8 @@ Apache OODT Change Log
 Release 0.4: Current Development
 --------------------------------------------
 
+* OODT-446 Addition of Puny module to Balance (skhudiky)
+
 * OODT-462: Include support for special processing instructions in opendap-ps configuration
file (luca)
 
 * OODT-463: Ignore container-type DAS attributes when parsing metadata in opendap-ps module
(luca)

Added: oodt/trunk/balance/modules/puny/README.txt
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/README.txt?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/README.txt (added)
+++ oodt/trunk/balance/modules/puny/README.txt Wed Jun 13 20:50:35 2012
@@ -0,0 +1,115 @@
+Puny - Lightweight content editor for Balance applications
+==========================================================
+
+Puny is a lightweight content editing module for Balance applications. Puny makes
+it easy for developers to add user-editable sections of content to their application
+views and supports real-time, in-place editing of the content.
+
+Overview
+--------
+
+Puny makes it easier to separate content from presentation and separate the 
+role of the site developer and the content manager. As its name implies, it
+provides the bare minimum necessary to accomplish this -- based on the 
+understanding that excellent, full-fledged Content Management System options
+are readily available and more appropriate for content-heavy sites. Puny simply 
+provides a way for sites that are not generally suited to a CMS to nevertheless
+reap the benefits of real-time, in-browser content editing by a user not 
+intimately familiar with HTML.
+
+How it Works
+------------
+
+Developers embed 'containers' in their views, and content editors provide the
+content that get displayed in the containers. Puny loads up the most recent 
+version of the content from the data store, renders it using the specified 
+parser, and places the rendered text into the view container. 
+
+By logging in with the editor credentials, a user can visually see the editable
+'containers' on the application views, and, using a javascript-enabled browser,
+can provide inline, real-time edits, creating a new version of the content.
+
+
+
+### Flexibility ###
+
+Puny has been designed so that it is easy to plug in custom back end data
+stores (MySql, MongoDB, SQLite, etc) and template engines (Markdown, Textile,
+bbcode, etc). If a driver for <insert data store or parser here> doesn't exist, 
+there are two primary extension points: Puny_DataStore (a base class for developing 
+drivers for data stores), and Puny_Parser (a base class for interfacing with text 
+parsers and template engines). Using the examples in the /classes/data and 
+/classes/parsers, it should be relatively easy to develop additional drivers.
+
+
+Installation
+------------
+
+Copy the Puny module (this directory) to the /modules directory of
+your Balance application. 
+
+
+Configuration
+-------------
+
+All configuration for Puny takes place in the module's 'config.ini' file. See
+the inline documentation in 'config.ini' for detailed information about each
+configuration option. 
+
+
+Developer Guide
+---------------
+
+### Including Puny in your application
+
+In general, Puny needs to be available on each application view. To avoid having to load

+the module at the top of each view, it is possible to include the module once,in the 
+Balance index.php at the root of your application. Simply add the following lines to the

+'index.php' file where it says 'Initialize any globally required modules here':
+
+// Puny initialization
+App::Get()->loadModule('puny');
+require_once(App::Get()->settings['puny_module_path'] . '/classes/Puny.class.php');
+
+
+### Installing your data store ###
+
+Look in the /schemas folder in the Puny module for a schema compatible with your datastore
+driver. Install the schema using whatever method is most appropriate for the technology.
The
+default driver is the PDO driver implemented in ./classes/data/Puny_PdoDataStore.class.php.
+The MySQL schema compatible with this driver is in ./schemas/puny.pdo.mysql.sql. Copy this
+file and import it into the database you configured in the configuration step above.
+
+
+### Including Puny containers in your application views ### 
+
+The easiest way to include Puny containers in your application views is:
+
+<?php echo Puny::container()->load('resourceid');?>
+
+By default, container creates a '<div>' element and loads the content into it. To use
+something other than a '<div>' simply specify the html element to the container() function:
+
+<?php echo Puny::container('span')->load('resourceid');?>
+
+It is also possible to specify arbitrary attributes to attach to your container. Examples

+include a DOM id, CSS class(es), style attribute, alt, rel, or anything else. This is 
+accomplished by passing an associative array as the second parameter to container() where
+the array keys are the attribute names, and the values are the attribute values. 
+
+<?php echo Puny::container('div',array('id'=>'mydiv','class'=>'foo bar'))->load('resourceid');?>
+
+
+### Allowing editors to log in and edit ###
+
+Somewhere in your application, there should be a login link that allows editors to log in
+and make edits to content. This is easily accomplished by adding the following line wherever
+you want the login link to appear:
+
+<?php echo Puny::status();?>
+
+This will display either a login or logout link, depending on whether or not an editor
+is currently logged in. 
+
+
+That's all there is to it, it lives up to its name.
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/Puny.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/Puny.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/Puny.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/Puny.class.php Wed Jun 13 20:50:35 2012
@@ -0,0 +1,165 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once( dirname(__FILE__) . '/Puny_Container.class.php');
+require_once( dirname(__FILE__) . '/Puny_Resource.class.php');
+
+/**
+ * Puny
+ * 
+ * Light-weight content editing for Balance applications. Puny makes it easy
+ * to add editable sections of content to your application views and supports
+ * real-time, in-place editing.
+ * 
+ * Puny has been designed so that it is easy to plug in custom back end data
+ * stores (MySql, MongoDB, SQLite, etc) and template engines (Markdown, Textile,
+ * bbcode, etc). Use what makes sense for your project, and if what you want
+ * is not yet supported, writing a Puny driver for a datastore or template 
+ * engine is a piece of cake. There are examples of each in the /classes/data and 
+ * /classes/parsers directories.
+ * 
+ * @author ahart
+ */
+
+class Puny {
+	
+	protected static $datastore = null;
+	
+	protected static $commonResourcesLoaded = false;
+
+	protected static $editorResourcesLoaded = false;
+	
+	protected static function init() {
+		
+		// Only if the datastore has not yet been initialized...
+		if (!self::$datastore) {
+			try {
+				// Obtain datastore configuration details
+				$datastoreClass = App::Get()->settings['puny_datastore_classname'];
+				require_once( App::Get()->settings['puny_datastore_classpath'] );
+		
+				// Create an instance of the datastore connector
+				self::$datastore = new $datastoreClass();
+		
+				// Connect to the datastore
+				self::$datastore->connect();
+			} catch ( Exception $e ) {
+				throw new Exception("Error instantiating Puny. "
+				. "The underlying cause was: " . $e->getMessage());
+			}
+		}
+		
+		self::injectCommonResources();
+		self::injectEditorResources();
+	}
+	
+	public static function load( $resourceId, $version = null, $parseContent = true ) {
+
+		self::init();
+		
+		// Load the raw data from the data store...
+		if (false !== ($resource = self::$datastore->load( $resourceId, $version ))) {
+			
+			// If a valid resource was found, return it
+			return ($parseContent) ? $resource->parse() : $resource;
+			
+		} else {
+			
+			// Otherwise, return an empty resource with the requested id
+			return new Puny_Resource( array("resourceId" => $resourceId, "content" => $resourceId)
);
+		
+		}
+	}
+	
+	public static function store (Puny_Resource $resource ) {
+		
+		self::init();
+		
+		// Persist the resource to the datastore
+		self::$datastore->store( $resource );
+		
+	}
+	
+	public static function isEditing() {
+		return ( isset($_SESSION['puny']) && $_SESSION['puny']['editing'] === true );
+	}
+	
+	public function initializeEditorSession() {
+		$_SESSION['puny'] = array('editing' => true, 'sessionStart' => time());
+	}
+	
+	public static function destroyEditorSession() {
+		unset($_SESSION['puny']);
+	}
+	
+	public static function status() {
+		if (self::isEditing()) {
+			return "<a href='".App::Get()->settings['puny_module_root']."/logout'>Logout</a>";
+		} else {
+			return "<a href='".App::Get()->settings['puny_module_root']."/login'>Login</a>";
+		}
+	}
+	
+	protected static function injectCommonResources() {
+	  // Inject the environmental information needed for the javascript libraries
+	  // to function as expected...
+	  if ( !self::$commonResourcesLoaded ) {
+	    $js = "\r\n"
+	      . "var puny_module_root   = '" . trim(App::Get()->settings['puny_module_root'])
. "'\r\n"
+	      . "    puny_module_static = '" . trim(App::Get()->settings['puny_module_static'])
."';\r\n";
+	    App::Get()->response->addJavascript( $js, true ); // raw Javascript
+	    
+	    // Add puny default styles
+	    $staticPath = trim(App::Get()->settings['puny_module_static']);
+		App::Get()->response->addStylesheet($staticPath . '/css/defaults.css');
+		App::Get()->response->addJavascript($staticPath . '/js/jquery-1.7.2.min.js');
+		self::$commonResourcesLoaded = true;
+	  }
+	}
+
+	protected static function injectEditorResources() {
+		// Only inject resources if we are editing and they have not already been loaded...
+		$segments = App::Get()->request->uri;
+		$staticPath = trim(App::Get()->settings['puny_module_static']);
+		if ( self::isEditing() && strstr($segments,'edit') != false) {
+			
+			App::Get()->response->addJavascript($staticPath . '/js/gollum.js');
+			App::Get()->response->addJavascript($staticPath . '/js/gollum.dialog.js');
+			App::Get()->response->addJavascript($staticPath . '/js/gollum.placeholder.js');
+			App::Get()->response->addJavascript($staticPath . '/js/editor/gollum.editor.js');
+			
+			App::Get()->response->addStylesheet($staticPath . '/css/github.css');
+			App::Get()->response->addStylesheet($staticPath . '/css/editor.css');
+			App::Get()->response->addStylesheet($staticPath . '/css/dialog.css');
+		}
+		if ( self::isEditing() && !self::$editorResourcesLoaded ) {
+			
+			App::Get()->response->addJavascript($staticPath . '/js/puny.js');
+			App::Get()->response->addStylesheet($staticPath . '/css/puny.css');
+			self::$editorResourcesLoaded = true;
+		}
+	}
+	
+	public static function container( $htmlElmt = 'div' , $extra = array()) {
+		
+		self::init();
+		
+		// Create a new Puny_Container object according to the provided info
+		return new Puny_Container($htmlElmt, $extra);
+	}
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/Puny_Container.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/Puny_Container.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/Puny_Container.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/Puny_Container.class.php Wed Jun 13 20:50:35 2012
@@ -0,0 +1,85 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require_once(dirname(__FILE__) . '/Puny.class.php');
+
+/**
+ * Puny_Container
+ * 
+ * This class provides convenience methods for creating an HTML container
+ * around a Puny_Resource. Puny_Container removes the need for developers
+ * to manually annotate HTML with the puny="..." attribute (so that the 
+ * Puny javascript in-place editor functions on the resource).
+ * 
+ * @author ahart
+ */
+class Puny_Container {
+	
+	protected $htmlElement;
+	protected $attributes;
+	
+	/**
+	 * Constructor
+	 * 
+	 * @param string $elmt  The html element to use as a container (e.g.: 'div','span')
+	 * @param array  $attributes (optional) an associative array of attributes to 
+	 *                     attach to the html container element. e.g:
+	 *                     array("id" => 'foo', "class" => "bar baz");
+	 */
+	public function __construct( $elmt = 'div', $attributes = array() ) {
+		
+		$this->htmlElement = $elmt;
+		$this->attributes  = $attributes;
+	}
+	
+	/**
+	 * Load a resource into this container
+	 * 
+	 * This function simply calls the Puny::load function and returns
+	 * wraps the result in the container html
+	 * 
+	 * @param string $resourceId The unique id of the resource to load
+	 * @param int $version (optional) The version to load (default = latest)
+	 * @returns string
+	 */
+	public function load( $resourceId, $version = null ) {
+		return $this->render( Puny::load( $resourceId, $version, false ));
+	}
+	
+	
+	/**
+	 * Helper function for rendering a resource inside this container
+	 * 
+	 * @param unknown_type $resource
+	 * @access protected
+	 */
+	protected function render($resource) {
+		
+		$html = "<{$this->htmlElement}";
+		
+		foreach ($this->attributes as $k => $v) {
+			$html .= " {$k}=\"{$v}\"";
+		}
+		
+		$html .= " puny=\"{$resource->getId()}\">"
+			  .  "{$resource->parse()->getContent()}"
+			  .  "</{$this->htmlElement}>";
+		
+		return $html;
+	}
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/Puny_Resource.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/Puny_Resource.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/Puny_Resource.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/Puny_Resource.class.php Wed Jun 13 20:50:35 2012
@@ -0,0 +1,163 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Puny_Resource
+ * 
+ * Represents a piece of content being managed by Puny. 
+ * 
+ * The Puny_Resource class is a wrapper around a piece of editable
+ * content (a resource). The class provides a number of convenience 
+ * functions for interacting with content.
+ * 
+ * @author ahart
+ */
+class Puny_Resource {
+
+	protected $id;						// The unique id for this resource
+	protected $version = 0;				// The version number for this resource
+	protected $content;					// The resource raw content
+	protected $parser  = 'markdown';	// The parser label for this resource
+	protected $parsedContent;			// The resource parsed content
+	
+	/**
+	 * Constructor
+	 * 
+	 * Optionally provide an associative array containing 
+	 * the data to use when initializing this object. 
+	 * 
+	 * @param array $data (optional) data to use when initializing the object
+	 */
+	public function __construct($data = array()) {
+		$this->id      = isset($data['resourceId']) ? $data['resourceId'] : false;
+		$this->version = isset($data['version'])    ? $data['version']    : 0;
+		$this->content = isset($data['content'])    ? $data['content']    : '';
+		$this->parser  = isset($data['parser'])     ? $data['parser']     : 'markdown';
+		$this->parsedContent = isset($data['parsedContent']) ? $data['parsedContent'] : '';
+	}
+	
+	/**
+	 * Get the unique id for this resource
+	 * @returns String
+	 */
+	public function getId() {
+		return $this->id;
+	}
+	
+	/**
+	 * Increment the version number for this resource
+	 * @returns Puny_Resource
+	 */
+	public function incrementVersion() {
+		$this->version += 1;
+		return $this;	// allow method chaining
+	}
+	
+	/**
+	 * Return the version number for this resource
+	 * @returns int
+	 */
+	public function getVersion() {
+		return $this->version;
+	}
+	
+	/**
+	 * Get the parser label for this resource. The parser
+	 * label is a text label which should correspond to 
+	 * one of the entries in the 'parsers' section of the
+	 * Puny module's config.ini file.
+	 */
+	public function getParser() {
+		return $this->parser;
+	}
+	
+	/**
+	 * Set the parser label for this resource. 
+	 * 
+	 * @param string $label The parser label to use
+	 */
+	public function setParser( $label ) {
+		$this->parser = $label;
+		return $this;	// allow method chaining
+	}
+	
+	/**
+	 * Get either the parsed or raw resource content. 
+	 * 
+	 * @param boolean $raw (default=false) return raw content?
+	 * @returns string
+	 */
+	public function getContent( $raw = false ) {
+		return ($raw) ? $this->content : $this->parsedContent;
+	}
+	
+	/**
+	 * set the raw content for this resource.
+	 * @param string $val The raw content for this resource
+	 * @returns Puny_Resource
+	 */
+	public function setContent( $val ) {
+		$this->content = $val;
+		return $this;	// allow method chaining
+	}
+	
+	/**
+	 * Parse the raw contents of this resourse
+	 * 
+	 * This function uses the parser label associated with this
+	 * resource to determine the parser to use, instantiates a
+	 * parser instance, and parses the raw content. The result
+	 * is stored in $this->parsedContent. 
+	 * 
+	 * @throws Exception
+	 * @returns Puny_Resource
+	 */
+	public function parse() {
+		// Determine the parser to use
+		$parserLabel = $this->getParser();
+			
+		// Ensure the appropriate parser has been required
+		$parsers = App::Get()->settings['puny_parser'];
+		if ( !in_array( $parserLabel, array_keys( $parsers ) ) ) {
+			throw new Exception("Error instantiating parser: "
+			. "label '{$parserLabel}' not configured. ");
+		} else {
+			require_once( $parsers[$parserLabel] );
+		}
+		
+		// Load the parser
+		$parserClassName = 'Puny_' . ucfirst($parserLabel) . 'Parser';
+		$parser = new $parserClassName();
+		
+		// Expand Balance constants:
+		// ([SITE_ROOT], [MODULE_ROOT], [MODULE_PATH], [MODULE_STATIC])
+		$content = str_replace('[SITE_ROOT]',SITE_ROOT, stripslashes($this->content));
+		$moduleInfo = App::Get()->loadModule();
+		if ($moduleInfo) {
+			$content = str_replace('[MODULE_ROOT]',$moduleInfo->moduleRoot, $content);
+			$content = str_replace('[MODULE_PATH]',$moduleInfo->modulePath, $content);
+			$content = str_replace('[MODULE_STATIC]',$moduleInfo->moduleStatic, $content);
+		}
+	
+		// Store the parsed contents
+		$this->parsedContent = $parser->parse( $content );
+		
+		// Allow method chaining
+		return $this;
+	}
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/data/Puny_DataStore.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/data/Puny_DataStore.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/data/Puny_DataStore.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/data/Puny_DataStore.class.php Wed Jun 13 20:50:35
2012
@@ -0,0 +1,69 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Puny_DataStore
+ * 
+ * Base class for Puny data store implementations
+ * 
+ * @abstract 
+ * 
+ * @author ahart
+ */
+abstract class Puny_DataStore {
+	
+	protected $host;
+	protected $username;
+	protected $password;
+	protected $dbname;
+	
+	protected $link;
+	
+	/**
+	 * Connect to the data store
+	 * 
+	 */	
+	public abstract function connect();
+	
+	/**
+	 * Disconnect from the data store
+	 */
+	public abstract function disconnect();
+	
+	/**
+	 * Request a resource from the data store. Optionally
+	 * specify a particular version of the resource to fetch.
+	 * 
+	 * @param string $resourceId The unique id of the resource
+	 * @param integer $version   (Optional) the version to retrieve. Default = latest.
+	 */
+	public abstract function load( $resourceId, $version = null );
+	
+	/**
+	 * Store a new version of a resource. For simplicity, versions are 
+	 * immutable. That is, every time a resource is stored, its version is
+	 * first incremented and a new record is created. Implemenations should
+	 * take care to automatically increment the version number of the
+	 * resource before persisting to the datastore.
+	 * 
+	 * @param string $resourceId The unique id of the resource
+	 * @param string $content The content to store 
+	 */
+	public abstract function store( Puny_Resource $resource );
+
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/data/Puny_LocalFileDataStore.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/data/Puny_LocalFileDataStore.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/data/Puny_LocalFileDataStore.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/data/Puny_LocalFileDataStore.class.php Wed Jun
13 20:50:35 2012
@@ -0,0 +1,79 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Require the abstract parent class definition
+require_once( dirname(__FILE__) . '/Puny_DataStore.class.php');
+
+/**
+ * An implementation of the Puny_DataStore class that persists
+ * content to ascii text files.
+ *
+ * @author ahart
+ */
+class Puny_LocalFileDataStore extends Puny_DataStore {
+
+  protected $dataDirectory;
+
+  public function connect() {
+    $this->dataDirectory = App::Get()->settings['puny_datastore_localfile_dir'];
+
+    // Ensure we can write to the directory
+    if (!is_writeable($this->dataDirectory)) {
+      throw new Exception("Puny can not write to the specified data directory");
+    }
+  }
+
+  public function disconnect() {
+    //noop
+  }
+
+  public function load( $resourceId, $version = null ) {
+
+    // The LocalFile data store does not currently support
+    // the concept of 'versions'. It could, but is the 
+    // added complexity really worth it? This is really 
+    // intended as a development tool, with the assumption
+    // that one of the more full-featured data store
+    // implementations (e.g.: PDO, Mongo) will ultimately
+    // be used. 
+
+    // Build the full path from the resourceId
+    $path = $this->dataDirectory . '/' . $resourceId . ".txt";
+
+    if (file_exists( $path ) ) {
+      $content  = file_get_contents($path);
+      $resource = array(
+			"resourceId" => $resourceId
+			, "content"  => $content
+			);
+      return new Puny_Resource($resource);
+    } else {
+      return false;
+    }
+  }
+
+  public function store ( Puny_Resource $resource ) {
+
+    // Build the full path from the resourceId
+    $path = $this->dataDirectory . '/' . $resource->getId() . ".txt";
+
+    // Store the latest content
+    file_put_contents($path, $resource->getContent(true)); // raw, unparsed content
+
+  }
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/data/Puny_MongoDataStore.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/data/Puny_MongoDataStore.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/data/Puny_MongoDataStore.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/data/Puny_MongoDataStore.class.php Wed Jun 13
20:50:35 2012
@@ -0,0 +1,75 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Require the abstract parent class definition
+require_once( dirname(__FILE__) . '/Puny_DataStore.class.php');
+
+/**
+ * A MongoDB implementation of the Puny_DataStore class.
+ *
+ * @author ahart
+ */
+class Puny_MongoDataStore extends Puny_DataStore {
+
+  protected $collection;
+
+  public function connect() {
+    $dbname = App::Get()->settings['puny_datastore_mongo_db'];
+    $coll   = App::Get()->settings['puny_datastore_mongo_collection'];
+    $this->link = new Mongo();
+    $this->dbname = $this->link->selectDB($dbname);
+    $this->collection = $this->dbname->$coll;
+  }
+
+  public function disconnect() {
+    if ($this->link) {
+      $this->link->close();
+    }
+  }
+
+  public function load( $resourceId, $version = null ) {
+    // Build criteria for loading...
+    $criteria = array("resourceId" => $resourceId);
+    
+    // If a version is specified...
+    if ($version !== null) { 
+      $criteria['version'] = $version;
+      $doc = $this->collection->findOne( $criteria );
+    } 
+
+    // Otherwise...
+    else {
+      $cursor = $this->collection->find(array("resourceId" => $resourceId));
+      $cursor->sort(array('version' => -1));
+      $doc = $cursor->getNext();
+    }
+
+    // Return whatever was found...
+    return ($doc) ? new Puny_Resource( $doc ) : false;
+  }
+
+  public function store ( Puny_Resource $resource ) {
+    $doc = array(
+		 "resourceId" => $resource->getId()
+		 , "version"  => time()
+		 , "parser"   => $resource->getParser()
+		 , "content"  => $resource->getContent( true )); // raw, unparsed content
+
+    $this->collection->insert( $doc );
+  }
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/data/Puny_PdoDataStore.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/data/Puny_PdoDataStore.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/data/Puny_PdoDataStore.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/data/Puny_PdoDataStore.class.php Wed Jun 13 20:50:35
2012
@@ -0,0 +1,111 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Require the abstract parent class definition
+require_once( dirname(__FILE__) . '/Puny_DataStore.class.php');
+
+
+/**
+ * A PDO implementation of the Puny_DataStore class.
+ * 
+ * @author ahart
+ */
+class Puny_PdoDataStore extends Puny_DataStore {
+	
+	protected $driver      = 'mysql';
+	protected $tablePrefix = 'puny_';
+	
+	/**
+	 * (non-PHPdoc)
+	 * @see Puny_DataStore::connect()
+	 * @throws PDOException
+	 */
+	public function connect() {
+		$this->host = App::Get()->settings['puny_datastore_pdo_host'];
+		$this->username = App::Get()->settings['puny_datastore_pdo_username'];
+		$this->password = App::Get()->settings['puny_datastore_pdo_password'];
+		$this->dbname   = App::Get()->settings['puny_datastore_pdo_dbname'];
+		$this->driver   = App::Get()->settings['puny_datastore_pdo_driver'];
+		$this->tablePrefix = App::Get()->settings['puny_datastore_pdo_tablePrefix'];
+		
+		$dsn = $this->driver . ':host=' . $this->host . ';dbname=' . $this->dbname;
+		$this->link = new PDO( $dsn, $this->username, $this->password );
+	}
+	
+	/**
+	 * (non-PHPdoc)
+	 * @see Puny_DataStore::disconnect()
+	 */
+	public function disconnect() {
+		if ($this->link)
+			$this->link = null;
+	}
+	
+	public function load( $resourceId, $version = null) {
+		
+		// Request the specified resource...
+		$sql  = "SELECT * FROM `{$this->tablePrefix}resource` WHERE `resourceId`=:resourceId
";
+		$data = array('resourceId' => $resourceId); 
+		
+		// If a version is specified, explicitly request that version...
+		if ($version != null) {
+			$sql .= " AND `version`=:version ";
+			$data['version'] = $version;
+		} 
+		
+		// Otherwise, simply get the latest version...
+		else {
+			$sql .= " ORDER BY `version` DESC ";
+		}
+		
+		// Limit our results to at most one result...
+		$sql .= " LIMIT 1 ";
+		
+		// Prepare and execute the query using the provided data...
+		$stmt = $this->link->prepare( $sql );
+		$stmt->execute( $data );
+
+		// Return the single result, or return false if no match...
+		if (false != ($resource = $stmt->fetch())) {
+			return new Puny_Resource($resource);
+		} else {
+			return false;
+		}
+	}
+	
+	public function store( Puny_Resource $resource ) {
+		
+		// Increment the resource version id... (see note in Puny_DataStore.class.php)
+		$resource->incrementVersion();
+		
+		// Create sql for storing this new resource version...
+		$sql = "INSERT INTO `{$this->tablePrefix}resource` (`resourceId`,`version`,`parser`,`content`)
"
+			.  "VALUES (:resourceId, :version, :parser, :content) ";
+		
+		// Prepare and execute the statement using the provided data
+		$stmt = $this->link->prepare($sql);
+		$stmt->execute ( array (
+			'resourceId' => $resource->getId()
+			, 'version'  => $resource->getVersion()
+			, 'parser'   => $resource->getParser()
+			, 'content'  => $resource->getContent(true) // raw, unparsed content
+		));
+		
+	}
+	
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/parsers/Puny_MarkdownParser.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/parsers/Puny_MarkdownParser.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/parsers/Puny_MarkdownParser.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/parsers/Puny_MarkdownParser.class.php Wed Jun
13 20:50:35 2012
@@ -0,0 +1,36 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Require the markdown php library (https://github.com/michelf/php-markdown/)
+require_once( App::Get()->settings['puny_module_path'] . '/libs/markdown.php');
+
+/**
+ * Markdown implementation of the Puny_Parser class
+ * 
+ * @author ahart
+ */
+
+class  Puny_MarkdownParser {
+	
+	public function parse ( $content ) {
+		
+		return Markdown( $content );
+		
+	}
+	
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/classes/parsers/Puny_Parser.class.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/classes/parsers/Puny_Parser.class.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/classes/parsers/Puny_Parser.class.php (added)
+++ oodt/trunk/balance/modules/puny/classes/parsers/Puny_Parser.class.php Wed Jun 13 20:50:35
2012
@@ -0,0 +1,40 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Puny_Parser
+ * 
+ * Base class for Puny parser implementations. 
+ * 
+ * @abstract
+ * 
+ * @author ahart
+ */
+abstract class Puny_Parser {
+	
+	/**
+	 * Implementations of this function should return the 
+	 * final (display-ready) version of the provided content.
+	 * 
+	 * @param string $content The content to parse
+	 * @returns string
+	 * @abstract
+	 */
+	public abstract function parse( $content );
+	
+}
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/config.ini
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/config.ini?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/config.ini (added)
+++ oodt/trunk/balance/modules/puny/config.ini Wed Jun 13 20:50:35 2012
@@ -0,0 +1,75 @@
+ # Licensed to the Apache Software Foundation (ASF) under one or more
+ # contributor license agreements.  See the NOTICE file distributed with
+ # this work for additional information regarding copyright ownership.
+ # The ASF licenses this file to You under the Apache License, Version 2.0
+ # (the "License"); you may not use this file except in compliance with
+ # the License.  You may obtain a copy of the License at
+ #
+ #     http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+
+#
+# Puny - Lightweight content editor for Balance applications
+#
+# ------------------------------------------------------------------------
+#
+
+[ADMINISTRATION CONFIGURATION]
+#
+# Editor login credentials
+# -------------------------------------
+# The editor is the user authorized to make content changes to the site
+#
+puny_editor_username = ''
+puny_editor_password = ''
+
+
+[DATASTORE CONFIGURATION]
+#
+# Which class will provide connection to the data store?
+puny_datastore_classname = Puny_LocalFileDataStore;
+
+# Where is this class in the filesystem?
+puny_datastore_classpath = [MODULE_PATH]/classes/data/Puny_LocalFileDataStore.class.php;

+
+# Connection parameters specific to the Puny_LocalFileDataStore connector
+puny_datastore_localfile_dir   = '[MODULE_PATH]/data/resources';
+
+# Connection parameters specific to the Puny_PdoDataStore connector
+puny_datastore_pdo_host = 'localhost';
+puny_datastore_pdo_username    = '';
+puny_datastore_pdo_password    = '';
+puny_datastore_pdo_dbname      = '';
+puny_datastore_pdo_driver      = 'mysql';
+puny_datastore_pdo_tablePrefix = 'puny_';
+
+# Connection parameters specific to the Puny_MongoDataStore connector
+puny_datastore_mongo_db         = '';
+puny_datastore_mongo_collection = '';
+
+[PARSER CONFIGURATION]
+#
+# Puny supports an unlimited number of parsers. The only requirement is that
+# there be a driver that conforms to ./classes/parsers/Puny_Parser.class.php.
+# 
+# This array provides a mapping between parser labels and the corresponding
+# parser class that will do the work.
+#
+puny_parser[ 'markdown' ] = [MODULE_PATH]/classes/parsers/Puny_MarkdownParser.class.php
+
+
+
+[INTERNAL ROUTING]
+#
+# These variables are here to provide location independence (so that you can 
+# install Puny in ./modules/puny or ./modules/somethingelse without having 
+# to change any code. You should never have to edit these.
+#
+puny_module_path   = [MODULE_PATH]
+puny_module_root   = [MODULE_ROOT]
+puny_module_static = [MODULE_STATIC] 
\ No newline at end of file

Added: oodt/trunk/balance/modules/puny/hooks.php
URL: http://svn.apache.org/viewvc/oodt/trunk/balance/modules/puny/hooks.php?rev=1350013&view=auto
==============================================================================
--- oodt/trunk/balance/modules/puny/hooks.php (added)
+++ oodt/trunk/balance/modules/puny/hooks.php Wed Jun 13 20:50:35 2012
@@ -0,0 +1,17 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
\ No newline at end of file



Mime
View raw message