Beispiel #1
0
 /**
  * Process a SQL update file.
  *
  * @param EcrProjectBase $project        The project.
  * @param string         $installPath    Path to the project root.
  *
  * @return mixed
  */
 private function processSQLUpdate(EcrProjectBase $project, $installPath)
 {
     $dbType = 'mysql';
     $updater = new EcrDbUpdater($project, $dbType, $this->logger);
     if ($updater->versions) {
         $this->logger->log('Updating...');
         if ($updater->buildFromECRBuildDir()) {
             EcrHtml::message(jgettext('Update sql file has been written'));
         } else {
             EcrHtml::message(jgettext('Can not create the update sql file'), 'error');
         }
         return;
     }
     $this->logger->log('Initing...');
     $fileName = $project->version . '.sql';
     $fullPath = $installPath . '/sql/updates/' . $dbType . '/' . $fileName;
     if (JFile::exists($fullPath)) {
         EcrHtml::message(jgettext('Update sql already exists'), 'error');
         $this->logger->log('Update sql already exists in ' . $fullPath);
         return;
     }
     $contents = '';
     if (JFile::write($fullPath, $contents)) {
         EcrHtml::message(jgettext('Update sql file has been written'));
         $this->logger->logFileWrite('dbUpdate', $fullPath, $contents);
     } else {
         EcrHtml::message(jgettext('Can not create the update sql file'), 'error');
         $this->logger->logFileWrite('dbUpdate', $fullPath, $contents, 'Can not create the update sql file');
     }
 }
Beispiel #2
0
 /**
  * Register an existing project.
  *
  * @param string $type  Project type
  * @param string $name  Project name
  * @param string $scope Project scope e.g. admin, site
  *
  * @return EcrProjectBase on success | false on error
  */
 public function registerProject($type, $name, $scope = '')
 {
     //--Get component parameters
     $comParams = JComponentHelper::getParams('com_easycreator');
     //-- Setup logging
     $options = array();
     $opts = array('logging', 'hotlogging', 'files', 'profile');
     foreach ($opts as $o) {
         if ($comParams->get($o)) {
             $options[] = $o;
         }
     }
     $options['fileName'] = date('ymd_Hi') . '_register.log';
     $this->logger = EcrLogger::getInstance('ecr', $options);
     if (false == array_key_exists($type, EcrProjectHelper::getProjectTypes())) {
         JFactory::getApplication()->enqueueMessage(sprintf(jgettext('The project type %s is not defined yet'), $type), 'error');
         $this->setError(sprintf(jgettext('The project type %s is not defined yet'), $type));
         return false;
     }
     $project = EcrProjectHelper::newProject($type);
     $project->comName = $name;
     $project->scope = $scope;
     foreach (EcrEasycreator::$packFormats as $name => $ext) {
         if ($comParams->get($name)) {
             $project->buildOpts[$name] = '1';
         }
     }
     for ($i = 1; $i < 5; $i++) {
         $project->buildOpts['custom_name_' . $i] = $comParams->get('custom_name_' . $i);
     }
     //-- Set the Joomla! compatibility version to the version we are actually running on
     $project->JCompat = ECR_JVERSION;
     $xmlPath = EcrProjectHelper::findManifest($project);
     if (false == $xmlPath) {
         JFactory::getApplication()->enqueueMessage(jgettext('No manifest file found'), 'error');
         $this->setError(jgettext('No manifest file found'));
         return false;
     }
     $data = EcrProjectHelper::parseXMLInstallFile(JPATH_ROOT . DS . $xmlPath);
     $project->name = $data->name;
     $this->logger->log('Registering: ' . $project->type . ' - ' . $project->name . '<br />' . 'aka "' . $project->comName . '"<br />scope: ' . $project->scope);
     $pXml = $project->update();
     if (false == $pXml) {
         $this->logger->log('', 'Unable to create EasyCreator manifest');
         $this->logger->writeLog();
         return false;
     } else {
         $this->logger->log('EasyCreator manifest created');
         $this->logger->logFileWrite('', '', $pXml);
     }
     $this->logger->log('FINISHED');
     $this->logger->writeLog();
     return $project;
 }
Beispiel #3
0
 /**
  * Remove the build directory.
  *
  *
  * @throws EcrExceptionZiper
  * @return \EcrProjectZiper
  */
 private function removeBuildDir()
 {
     if (ECR_DEBUG) {
         $this->logger->log('The build folder will not be deleted in debug mode.<br />' . $this->temp_dir, '', JLog::WARNING);
         return $this;
     }
     if (false == JFolder::delete($this->temp_dir)) {
         throw new EcrExceptionZiper(__METHOD__ . 'Unable to delete<br />' . $this->temp_dir);
     }
     $this->logger->log('The build folder has been sucessfully deleted.');
     return $this;
 }
Beispiel #4
0
 /**
  * Insert a part to the project.
  *
  * @param array     $options   Options for inserting
  * @param EcrLogger $logger    The logger
  * @param boolean   $overwrite Overwrite existing files
  *
  * @return boolean
  */
 public function insertPart($options, EcrLogger $logger, $overwrite = false)
 {
     $input = JFactory::getApplication()->input;
     $element_scope = $input->getString('element_scope');
     $element_name = $input->getString('element_name');
     $element = $input->getString('element');
     if (false == isset($options->pathSource) || !$options->pathSource) {
         JFactory::getApplication()->enqueueMessage(jgettext('Invalid options'), 'error');
         $logger->log('Invalid options');
         return false;
     }
     /*
      * Define substitutes
      */
     $this->addSubstitute('ECR_ELEMENT_NAME', $element_name);
     $this->addSubstitute('ECR_LIST_POSTFIX', $this->listPostfix);
     /*
      * Process files
      */
     //-- @TODO ...
     $basePathDest = $element_scope == 'admin' ? JPATH_ADMINISTRATOR : JPATH_SITE;
     $basePathDest .= DS . 'components' . DS . $options->ecr_project;
     $files = JFolder::files($options->pathSource, '.', true, true, array('options', '.svn'));
     foreach ($files as $file) {
         $fName = str_replace($options->pathSource . DS, '', JPath::clean($file));
         $fName = str_replace('ecr_element_name', strtolower($element_name), $fName);
         $fName = str_replace('ecr_list_postfix', strtolower($this->listPostfix), $fName);
         //-- Check if file exists
         if (JFile::exists($basePathDest . DS . $fName) && !$overwrite) {
             //-- Replace AutoCode
             $ACName = "{$element_scope}.{$options->group}.{$options->part}.{$element}";
             if (array_key_exists($ACName, $this->autoCodes)) {
                 //-- Replace AutoCode
                 $fileContents = JFile::read($basePathDest . DS . $fName);
                 foreach ($this->autoCodes as $AutoCode) {
                     foreach ($AutoCode->codes as $key => $code) {
                         $fileContents = $AutoCode->replaceCode($fileContents, $key);
                     }
                 }
             } else {
                 JFactory::getApplication()->enqueueMessage(sprintf(jgettext('Autocode key %s not found'), $ACName), 'error');
                 return false;
             }
         } else {
             //-- Add new file(s)
             $fileContents = JFile::read($file);
             $subPackage = explode(DS, str_replace($options->pathSource . DS, '', $file));
             $subPackage = $subPackage[0];
             $subPackage = str_replace(JFile::getName($file), '', $subPackage);
             $subPackage = $subPackage ? $subPackage : 'Base';
             $this->addSubstitute('ECR_SUBPACKAGE', ucfirst($subPackage));
         }
         $this->substitute($fileContents);
         if (false == JFile::write($basePathDest . DS . $fName, $fileContents)) {
             JFactory::getApplication()->enqueueMessage(jgettext('Unable to write file'), 'error');
             return false;
         }
         $logger->logFileWrite($file, $basePathDest . DS . $fName, $fileContents);
     }
     if (!$this->update()) {
         return false;
     }
     return true;
 }