/** * createResource() * * @param \Zend\Tool\Project\Profile\Profile $profile * @param string $actionName * @param string $controllerName * @param string $moduleName * @return \Zend\Tool\Project\Profile\Resource\Resource */ public static function createResource(ProjectProfile $profile, $actionName, $controllerName, $moduleName = null) { if (!is_string($actionName)) { throw new Exception\RuntimeException('Zend\\Tool\\Project\\Provider\\View::createResource() expects \\"actionName\\" is the name of a controller resource to create.'); } if (!is_string($controllerName)) { throw new Exception\RuntimeException('Zend\\Tool\\Project\\Provider\\View::createResource() expects \\"controllerName\\" is the name of a controller resource to create.'); } $profileSearchParams = array(); if ($moduleName) { $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => array('moduleName' => $moduleName)); $noModuleSearch = null; } else { $noModuleSearch = array('modulesDirectory'); } $profileSearchParams[] = 'viewsDirectory'; $profileSearchParams[] = 'viewScriptsDirectory'; if (($viewScriptsDirectory = $profile->search($profileSearchParams, $noModuleSearch)) === false) { throw new Exception\RuntimeException('This project does not have a viewScriptsDirectory resource.'); } $profileSearchParams['viewControllerScriptsDirectory'] = array('forControllerName' => $controllerName); // @todo check if below is failing b/c of above search params if (($viewControllerScriptsDirectory = $viewScriptsDirectory->search($profileSearchParams)) === false) { $viewControllerScriptsDirectory = $viewScriptsDirectory->createResource('viewControllerScriptsDirectory', array('forControllerName' => $controllerName)); } $newViewScriptFile = $viewControllerScriptsDirectory->createResource('ViewScriptFile', array('forActionName' => $actionName)); return $newViewScriptFile; }
/** * _getFormsDirectoryResource() * * @param \Zend\Tool\Project\Profile\Profile $profile * @param string $moduleName * @return \Zend\Tool\Project\Profile\Resource\Resource */ protected static function _getFormsDirectoryResource(ProjectProfile $profile, $moduleName = null) { $profileSearchParams = array(); if ($moduleName != null && is_string($moduleName)) { $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => array('moduleName' => $moduleName)); } $profileSearchParams[] = 'formsDirectory'; return $profile->search($profileSearchParams); }
/** * createResource() * * @param \Zend\Tool\Project\Profile\Profile $profile * @param string $projectProviderName * @param string $actionNames * @return \Zend\Tool\Project\Profile\Resource\Resource */ public static function createResource(ProjectProfile $profile, $projectProviderName, $actionNames = null) { if (!is_string($projectProviderName)) { throw new Exception\RuntimeException('Zend\\Tool\\Project\\Provider\\Controller::createResource() expects \\"projectProviderName\\" is the name of a project provider resource to create.'); } $profileSearchParams = array(); $profileSearchParams[] = 'projectProvidersDirectory'; $projectProvider = $profile->createResourceAt($profileSearchParams, 'projectProviderFile', array('projectProviderName' => $projectProviderName, 'actionNames' => $actionNames)); return $projectProvider; }
public static function createResources(ProjectProfile $profile, $moduleName, Resource $targetModuleResource = null) { // find the appliction directory, it will serve as our module skeleton if ($targetModuleResource == null) { $targetModuleResource = $profile->search('applicationDirectory'); $targetModuleEnabledResources = array('ControllersDirectory', 'ModelsDirectory', 'ViewsDirectory', 'ViewScriptsDirectory', 'ViewHelpersDirectory', 'ViewFiltersDirectory'); } // find the actual modules directory we will use to house our module $modulesDirectory = $profile->search('modulesDirectory'); // if there is a module directory already, except if ($modulesDirectory->search(array('moduleDirectory' => array('moduleName' => $moduleName)))) { throw new Exception\RuntimeException('A module named "' . $moduleName . '" already exists.'); } // create the module directory $moduleDirectory = $modulesDirectory->createResource('moduleDirectory', array('moduleName' => $moduleName)); // create a context filter so that we can pull out only what we need from the module skeleton $moduleContextFilterIterator = new ContextFilter($targetModuleResource, array('denyNames' => array('ModulesDirectory', 'ViewControllerScriptsDirectory'), 'denyType' => 'Zend\\Tool\\Project\\Context\\Filesystem\\File')); // the iterator for the module skeleton $targetIterator = new \RecursiveIteratorIterator($moduleContextFilterIterator, \RecursiveIteratorIterator::SELF_FIRST); // initialize some loop state information $currentDepth = 0; $parentResources = array(); $currentResource = $moduleDirectory; $currentChildResource = null; // loop through the target module skeleton foreach ($targetIterator as $targetSubResource) { $depthDifference = $targetIterator->getDepth() - $currentDepth; $currentDepth = $targetIterator->getDepth(); if ($depthDifference === 1) { // if we went down into a child, make note array_push($parentResources, $currentResource); // this will have always been set previously by another loop $currentResource = $currentChildResource; } elseif ($depthDifference < 0) { // if we went up to a parent, make note $i = $depthDifference; do { // if we went out more than 1 parent, get to the correct parent $currentResource = array_pop($parentResources); } while ($i-- > 0); } // get parameters for the newly created module resource $params = $targetSubResource->getAttributes(); $currentChildResource = $currentResource->createResource($targetSubResource->getName(), $params); // based of the provided list (Currently up top), enable specific resources if (isset($targetModuleEnabledResources)) { $currentChildResource->setEnabled(in_array($targetSubResource->getName(), $targetModuleEnabledResources)); } else { $currentChildResource->setEnabled($targetSubResource->isEnabled()); } } return $moduleDirectory; }
public static function hasResource(ProjectProfile $profile, $dbTableName, $moduleName = null) { $profileSearchParams = array(); if ($moduleName != null && is_string($moduleName)) { $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => array('moduleName' => $moduleName)); } $profileSearchParams[] = 'modelsDirectory'; $modelsDirectory = $profile->search($profileSearchParams); if (!$modelsDirectory instanceof ProjectProfile\Resource || !($dbTableDirectory = $modelsDirectory->search('DbTableDirectory'))) { return false; } $dbTableFile = $dbTableDirectory->search(array('DbTableFile' => array('dbTableName' => $dbTableName))); return $dbTableFile instanceof ProjectProfile\Resource ? true : false; }
/** * _storeProfile() * * This method will store the profile into its proper location * */ protected function _storeProfile() { $projectProfileFile = $this->_loadedProfile->search('ProjectProfileFile'); $name = $projectProfileFile->getContext()->getPath(); $this->_registry->getResponse()->appendContent('Updating project profile \'' . $name . '\''); $projectProfileFile->getContext()->save(); }
public static function createResource(ProjectProfile $profile, $layoutName = 'layout') { $applicationDirectory = $profile->search('applicationDirectory'); $layoutDirectory = $applicationDirectory->search('layoutsDirectory'); if ($layoutDirectory == false) { $layoutDirectory = $applicationDirectory->createResource('layoutsDirectory'); } $layoutScriptsDirectory = $layoutDirectory->search('layoutScriptsDirectory'); if ($layoutScriptsDirectory == false) { $layoutScriptsDirectory = $layoutDirectory->createResource('layoutScriptsDirectory'); } $layoutScriptFile = $layoutScriptsDirectory->search('layoutScriptFile', array('layoutName' => 'layout')); if ($layoutScriptFile == false) { $layoutScriptFile = $layoutScriptsDirectory->createResource('layoutScriptFile', array('layoutName' => 'layout')); } return $layoutScriptFile; }
/** * 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) { throw new 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) { throw new 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 ProjectProfile(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 testProfileThrowsExceptionOnLoadFromFileWithBadPathForProfileFile() { $profile = new Profile(); $profile->setAttribute('projectProfileFile', '/path/should/not/exist'); // missing file path or project path $this->setExpectedException('Zend\\Tool\\Project\\Profile\\Exception\\RuntimeException'); $profile->loadFromFile(); }
/** * _getControllerFileResource() * * @param \Zend\Tool\Project\Profile\Profile $profile * @param string $controllerName * @param string $moduleName * @return \Zend\Tool\Project\Profile\Resource\Resource */ protected static function _getControllerFileResource(ProjectProfile $profile, $controllerName, $moduleName = null) { $profileSearchParams = array(); if ($moduleName != null && is_string($moduleName)) { $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => array('moduleName' => $moduleName)); } $profileSearchParams[] = 'controllersDirectory'; $profileSearchParams['controllerFile'] = array('controllerName' => $controllerName); return $profile->search($profileSearchParams); }
protected function _getApplicationConfigResource(ProjectProfile $profile) { $applicationConfigResource = $profile->search('ApplicationConfigFile'); if (!$applicationConfigResource) { throw new ProjectRuntimeException('A project with an application config file is required to use this provider.'); } return $applicationConfigResource; }
/** * createLibraryResource() * * @param \Zend\Tool\Project\Profile\Profile $profile * @param string $libraryClassName * @return \Zend\Tool\Project\Profile\Resource\Resource */ public static function createLibraryResource(ProjectProfile $profile, $libraryClassName) { $testLibraryDirectoryResource = $profile->search(array('TestsDirectory', 'TestLibraryDirectory')); $fsParts = explode('_', $libraryClassName); $currentDirectoryResource = $testLibraryDirectoryResource; while ($nameOrNamespacePart = array_shift($fsParts)) { if (count($fsParts) > 0) { if (($libraryDirectoryResource = $currentDirectoryResource->search(array('TestLibraryNamespaceDirectory' => array('namespaceName' => $nameOrNamespacePart)))) === false) { $currentDirectoryResource = $currentDirectoryResource->createResource('TestLibraryNamespaceDirectory', array('namespaceName' => $nameOrNamespacePart)); } else { $currentDirectoryResource = $libraryDirectoryResource; } } else { if (($libraryFileResource = $currentDirectoryResource->search(array('TestLibraryFile' => array('forClassName' => $libraryClassName)))) === false) { $libraryFileResource = $currentDirectoryResource->createResource('TestLibraryFile', array('forClassName' => $libraryClassName)); } } } return $libraryFileResource; }