public static function createResources(\Zend\Tool\Project\Profile $profile, $moduleName, \Zend\Tool\Project\Profile\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('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 \Zend\Tool\Project\Profile\Iterator\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; }
/** * createResource() * * @param \Zend\Tool\Project\Profile $profile * @param string $actionName * @param string $controllerName * @param string $moduleName * @return \Zend\Tool\Project\Profile\Resource */ public static function createResource(\Zend\Tool\Project\Profile $profile, $actionName, $controllerName, $moduleName = null) { if (!is_string($actionName)) { throw new Exception('Zend_Tool_Project_Provider_View::createResource() expects \\"actionName\\" is the name of a controller resource to create.'); } if (!is_string($controllerName)) { throw new Exception('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('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; }
/** * _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(); }
/** * _getModelsDirectoryResource() * * @param \Zend\Tool\Project\Profile $profile * @param string $moduleName * @return \Zend\Tool\Project\Profile\Resource */ protected static function _getModelsDirectoryResource(ProjectProfile $profile, $moduleName = null) { $profileSearchParams = array(); if ($moduleName != null && is_string($moduleName)) { $profileSearchParams = array('modulesDirectory', 'moduleDirectory' => array('moduleName' => $moduleName)); } $profileSearchParams[] = 'modelsDirectory'; return $profile->search($profileSearchParams); }
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; }
public static function createResource(\Zend\Tool\Project\Profile $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; }
/** * _getControllerFileResource() * * @param \Zend\Tool\Project\Profile $profile * @param string $controllerName * @param string $moduleName * @return \Zend\Tool\Project\Profile\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); }
public function testProfileCanFindResource() { $profile = new Profile(array('projectProfileFile' => $this->_projectProfileFile, 'projectDirectory' => $this->_projectDirectory)); $profile->loadFromFile(); $modelsDirectoryResource = $profile->search('modelsDirectory'); $this->assertEquals('Zend\\Tool\\Project\\Profile\\Resource', get_class($modelsDirectoryResource)); $this->assertEquals('Zend\\Tool\\Project\\Context\\Zf\\ModelsDirectory', get_class($modelsDirectoryResource->getContext())); $publicIndexFile = $profile->search(array('publicDirectory', 'publicIndexFile')); $this->assertEquals('Zend\\Tool\\Project\\Profile\\Resource', get_class($publicIndexFile)); $this->assertEquals('Zend\\Tool\\Project\\Context\\Zf\\PublicIndexFile', get_class($publicIndexFile->getContext())); }
/** * createLibraryResource() * * @param \Zend\Tool\Project\Profile $profile * @param string $libraryClassName * @return \Zend\Tool\Project\Profile\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; }