/** * 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 \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(); } }
/** * _getProject is designed to find if there is project file in the context of where * the client has been called from.. The search order is as follows.. * - traversing downwards from (PWD) - current working directory * - if an enpoint variable has been registered in teh client registry - key=workingDirectory * - if an ENV variable with the key ZFPROJECT_PATH is found * * @param $loadProfileFlag bool Whether or not to throw an exception when no profile is found * @param $projectDirectory string The project directory to use to search * @param $searchParentDirectories bool Whether or not to search upper level direcotries * @return \Zend\Tool\Project\Profile */ protected function _loadProfile($loadProfileFlag = self::NO_PROFILE_THROW_EXCEPTION, $projectDirectory = null, $searchParentDirectories = true) { // use the cwd if no directory was provided if ($projectDirectory == null) { $projectDirectory = getcwd(); } elseif (realpath($projectDirectory) == false) { throw new Exception('The $projectDirectory supplied does not exist.'); } $profile = new \Zend\Tool\Project\Profile(); $parentDirectoriesArray = explode(DIRECTORY_SEPARATOR, ltrim($projectDirectory, DIRECTORY_SEPARATOR)); while ($parentDirectoriesArray) { $projectDirectoryAssembled = implode(DIRECTORY_SEPARATOR, $parentDirectoriesArray); if (DIRECTORY_SEPARATOR !== "\\") { $projectDirectoryAssembled = DIRECTORY_SEPARATOR . $projectDirectoryAssembled; } $profile->setAttribute('projectDirectory', $projectDirectoryAssembled); if ($profile->isLoadableFromFile()) { chdir($projectDirectoryAssembled); $profile->loadFromFile(); $this->_loadedProfile = $profile; break; } // break after first run if we are not to check upper directories if ($searchParentDirectories == false) { break; } array_pop($parentDirectoriesArray); } if ($this->_loadedProfile == null) { if ($loadProfileFlag == self::NO_PROFILE_THROW_EXCEPTION) { throw new Exception('A project profile was not found.'); } elseif ($loadProfileFlag == self::NO_PROFILE_RETURN_FALSE) { return false; } } return $profile; }