Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Sun, Jan 5, 9:21 PM

in-portal

Index: branches/5.2.x/tools/configure_profile.php
===================================================================
--- branches/5.2.x/tools/configure_profile.php (nonexistent)
+++ branches/5.2.x/tools/configure_profile.php (revision 16093)
@@ -0,0 +1,138 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2014 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+define('FULL_PATH', realpath(dirname(__FILE__) . '/..'));
+
+final class ConfigureProfileWorkflow
+{
+
+ /**
+ * Runs the workflow.
+ *
+ * @return void
+ * @throws Exception When some of executed commands fails.
+ */
+ public function run()
+ {
+ $this->checkPrerequisites();
+
+ if ( !chdir(FULL_PATH) ) {
+ throw new Exception('Unable to change working directory to "' . FULL_PATH . '"');
+ }
+
+ $xml = $this->runSvnCommand('info --xml');
+ $info = new SimpleXMLElement($xml);
+
+ $url = 'http://www.in-portal.com/rest/profiles.json';
+ $url_params = array(
+ 'name' => $this->getArgument(1, 'in-portal.community'),
+ 'version' => basename($info->entry->url),
+ );
+
+ $json = file_get_contents($url . '?' . http_build_query($url_params));
+ $profile_data = json_decode($json, true);
+
+ if ( is_null($profile_data) ) {
+ throw new Exception('Something went wrong, while queering for profile information. Please try again later.', 104);
+ }
+
+ if ( isset($profile_data['errors']) ) {
+ $first_error = reset($profile_data['errors']);
+
+ throw new Exception($first_error['message'], 105);
+ }
+
+ $svn_property_file = tempnam(sys_get_temp_dir(), 'svn_externals');
+ file_put_contents($svn_property_file, $profile_data['svn:externals']);
+
+ $this->runSvnCommand('propset svn:externals -F ' . escapeshellarg($svn_property_file) . ' .');
+ echo 'Please run "svn update" on the working copy to finish the process.' . PHP_EOL;
+ }
+
+ /**
+ * Checks prerequisites.
+ *
+ * @return void
+ * @throws Exception When one of prerequisites are not met.
+ */
+ protected function checkPrerequisites()
+ {
+ if ( PHP_SAPI !== 'cli' ) {
+ throw new Exception('This script is intended to be used from command-line only !', 100);
+ }
+
+ try {
+ $this->runSvnCommand('info ' . escapeshellarg(FULL_PATH));
+ }
+ catch ( Exception $e ) {
+ throw new Exception('The "' . FULL_PATH . '" must be an SVN working copy or "svn" binary is not in the PATH', 102);
+ }
+
+ $allow_url_fopen = ini_get('allow_url_fopen');
+
+ if ( strtolower($allow_url_fopen) === 'off' || (int)$allow_url_fopen === 0 ) {
+ throw new Exception('Temporarily enable "allow_url_fopen" setting in "php.ini" for script to work', 103);
+ }
+ }
+
+ /**
+ * Executes SVN command and returns the result.
+ *
+ * @param string $arguments Command arguments.
+ *
+ * @return string
+ * @throws Exception If something goes wrong.
+ */
+ protected function runSvnCommand($arguments)
+ {
+ $exit_code = 0;
+ $output = array();
+ $command = 'svn ' . $arguments . ' 2>&1';
+
+ exec($command, $output, $exit_code);
+
+ if ( $exit_code !== 0 ) {
+ throw new Exception('Command "' . $command . '" failed with ' . $exit_code . ' exit code');
+ }
+
+ return implode("\n", $output);
+ }
+
+ /**
+ * Returns passed argument value.
+ *
+ * @param integer $index Argument index.
+ * @param mixed $default Default value.
+ *
+ * @return mixed
+ */
+ protected function getArgument($index, $default = null)
+ {
+ if ( $index < $_SERVER['argc'] ) {
+ return $_SERVER['argv'][$index];
+ }
+
+ return $default;
+ }
+
+}
+
+
+try {
+ $workflow = new ConfigureProfileWorkflow();
+ $workflow->run();
+}
+catch ( Exception $e ) {
+ echo $e->getMessage().PHP_EOL;
+ exit($e->getCode());
+}
Property changes on: branches/5.2.x/tools/configure_profile.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property

Event Timeline