web/lib/Zend/Tool/Project/Provider/Project.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Tool/Project/Provider/Project.php	Fri Mar 11 15:05:35 2011 +0100
@@ -0,0 +1,239 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Tool
+ * @subpackage Framework
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Project.php 20898 2010-02-04 07:03:46Z ralph $
+ */
+
+/**
+ * @see Zend_Tool_Project_Provider_Abstract
+ */
+require_once 'Zend/Tool/Project/Provider/Abstract.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Tool
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Tool_Project_Provider_Project
+    extends Zend_Tool_Project_Provider_Abstract
+    //implements Zend_Tool_Framework_Provider_DocblockManifestInterface
+{
+
+    protected $_specialties = array('Info');
+
+    /**
+     * create()
+     *
+     * @param string $path
+     * @param string $nameOfProfile shortName=n
+     * @param string $fileOfProfile shortName=f
+     */
+    public function create($path, $nameOfProfile = null, $fileOfProfile = null)
+    {
+        if ($path == null) {
+            $path = getcwd();
+        } else {
+            $path = trim($path);
+            if (!file_exists($path)) {
+                $created = mkdir($path);
+                if (!$created) {
+                    require_once 'Zend/Tool/Framework/Client/Exception.php';
+                    throw new Zend_Tool_Framework_Client_Exception('Could not create requested project directory \'' . $path . '\'');
+                }
+            }
+            $path = str_replace('\\', '/', realpath($path));
+        }
+
+        $profile = $this->_loadProfile(self::NO_PROFILE_RETURN_FALSE, $path);
+
+        if ($profile !== false) {
+            require_once 'Zend/Tool/Framework/Client/Exception.php';
+            throw new Zend_Tool_Framework_Client_Exception('A project already exists here');
+        }
+
+        $profileData = null;
+
+        if ($fileOfProfile != null && file_exists($fileOfProfile)) {
+            $profileData = file_get_contents($fileOfProfile);
+        }
+
+        $storage = $this->_registry->getStorage();
+        if ($profileData == '' && $nameOfProfile != null && $storage->isEnabled()) {
+            $profileData = $storage->get('project/profiles/' . $nameOfProfile . '.xml');
+        }
+
+        if ($profileData == '') {
+            $profileData = $this->_getDefaultProfile();
+        }
+
+        $newProfile = new Zend_Tool_Project_Profile(array(
+            'projectDirectory' => $path,
+            'profileData' => $profileData
+            ));
+
+        $newProfile->loadFromData();
+
+        $response = $this->_registry->getResponse();
+        
+        $response->appendContent('Creating project at ' . $path);
+        $response->appendContent('Note: ', array('separator' => false, 'color' => 'yellow'));
+        $response->appendContent(
+            'This command created a web project, '
+            . 'for more information setting up your VHOST, please see docs/README');
+
+        foreach ($newProfile->getIterator() as $resource) {
+            $resource->create();
+        }
+    }
+
+    public function show()
+    {
+        $this->_registry->getResponse()->appendContent('You probably meant to run "show project.info".', array('color' => 'yellow'));
+    }
+
+    public function showInfo()
+    {
+        $profile = $this->_loadProfile(self::NO_PROFILE_RETURN_FALSE);
+        if (!$profile) {
+            $this->_registry->getResponse()->appendContent('No project found.');
+        } else {
+            $this->_registry->getResponse()->appendContent('Working with project located at: ' . $profile->getAttribute('projectDirectory'));
+        }
+    }
+
+    protected function _getDefaultProfile()
+    {
+        $data = <<<EOS
+<?xml version="1.0" encoding="UTF-8"?>
+<projectProfile type="default" version="1.10">
+    <projectDirectory>
+        <projectProfileFile />
+        <applicationDirectory>
+            <apisDirectory enabled="false" />
+            <configsDirectory>
+                <applicationConfigFile type="ini" />
+            </configsDirectory>
+            <controllersDirectory>
+                <controllerFile controllerName="Index">
+                    <actionMethod actionName="index" />
+                </controllerFile>
+                <controllerFile controllerName="Error" />
+            </controllersDirectory>
+            <formsDirectory enabled="false" />
+            <layoutsDirectory enabled="false" />
+            <modelsDirectory />
+            <modulesDirectory enabled="false" />
+            <viewsDirectory>
+                <viewScriptsDirectory>
+                    <viewControllerScriptsDirectory forControllerName="Index">
+                        <viewScriptFile forActionName="index" />
+                    </viewControllerScriptsDirectory>
+                    <viewControllerScriptsDirectory forControllerName="Error">
+                        <viewScriptFile forActionName="error" />
+                    </viewControllerScriptsDirectory>
+                </viewScriptsDirectory>
+                <viewHelpersDirectory />
+                <viewFiltersDirectory enabled="false" />
+            </viewsDirectory>
+            <bootstrapFile />
+        </applicationDirectory>
+        <dataDirectory enabled="false">
+            <cacheDirectory enabled="false" />
+            <searchIndexesDirectory enabled="false" />
+            <localesDirectory enabled="false" />
+            <logsDirectory enabled="false" />
+            <sessionsDirectory enabled="false" />
+            <uploadsDirectory enabled="false" />
+        </dataDirectory>
+        <docsDirectory>
+            <file filesystemName="README.txt" defaultContentCallback="Zend_Tool_Project_Provider_Project::getDefaultReadmeContents"/>
+        </docsDirectory>
+        <libraryDirectory>
+            <zfStandardLibraryDirectory enabled="false" />
+        </libraryDirectory>
+        <publicDirectory>
+            <publicStylesheetsDirectory enabled="false" />
+            <publicScriptsDirectory enabled="false" />
+            <publicImagesDirectory enabled="false" />
+            <publicIndexFile />
+            <htaccessFile />
+        </publicDirectory>
+        <projectProvidersDirectory enabled="false" />
+        <temporaryDirectory enabled="false" />
+        <testsDirectory>
+            <testPHPUnitConfigFile />
+            <testApplicationDirectory>
+                <testApplicationBootstrapFile />
+            </testApplicationDirectory>
+            <testLibraryDirectory>
+                <testLibraryBootstrapFile />
+            </testLibraryDirectory>
+        </testsDirectory>
+    </projectDirectory>
+</projectProfile>
+EOS;
+        return $data;
+    }
+    
+    public static function getDefaultReadmeContents($caller = null)
+    {
+        $projectDirResource = $caller->getResource()->getProfile()->search('projectDirectory');
+        if ($projectDirResource) {
+            $name = ltrim(strrchr($projectDirResource->getPath(), DIRECTORY_SEPARATOR), DIRECTORY_SEPARATOR);
+            $path = $projectDirResource->getPath() . '/public';
+        } else {
+            $path = '/path/to/public';
+        }
+        
+        return <<< EOS
+README
+======
+
+This directory should be used to place project specfic documentation including
+but not limited to project notes, generated API/phpdoc documentation, or 
+manual files generated or hand written.  Ideally, this directory would remain
+in your development environment only and should not be deployed with your
+application to it's final production location.
+
+
+Setting Up Your VHOST
+=====================
+
+The following is a sample VHOST you might want to consider for your project.
+
+<VirtualHost *:80>
+   DocumentRoot "$path"
+   ServerName $name.local
+
+   # This should be omitted in the production environment
+   SetEnv APPLICATION_ENV development
+    
+   <Directory "$path">
+       Options Indexes MultiViews FollowSymLinks
+       AllowOverride All
+       Order allow,deny
+       Allow from all
+   </Directory>
+    
+</VirtualHost>
+
+EOS;
+    }
+}
\ No newline at end of file