Skip to content

Commit

Permalink
Introducing the midgard2-runtime-installer.
Browse files Browse the repository at this point in the history
  • Loading branch information
mdk committed Apr 11, 2010
1 parent af4d5aa commit 6c78e39
Show file tree
Hide file tree
Showing 7 changed files with 1,414 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ MainWindow::MainWindow()
setCentralWidget(&webView);
resize(800, 480);
webView.page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar());
webView.load(QUrl("http://localhost:7070"));
webView.load(QUrl("http://localhost:8080"));
webView.show();
setWindowTitle("Midgard runtime");
boxDelayer.setSingleShot(true);
Expand Down
162 changes: 162 additions & 0 deletions src/midgard2-runtime-installer
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#!/usr/bin/env php5

<?php

require_once 'spyc.php';
require_once 'sfYamlParser.php';

$php_ini_contents = <<<EOF
midgard.http=On
midgard.engine=On
midgard.configuration_file=midgard.conf
midgard.superglobals_compat=On
EOF;

$midgard_conf_contents = <<<EOF
[MidgardDir]
#ShareDir=
#VarDir=
#BlobDir=
#CacheDir=

[MidgardDatabase]
Type=SQLite
Host=
Name=midgard
Username=midgard
Password=midgard

#DefaultLanguage=pl
Loglevel=debug
TableCreate=true
TableUpdate=true
EOF;

// Check if we have param
if ($argc <= 1) {
echo "Usage: midgard2-runtime-installer <BUNDLE PATH>\n";
exit(128);
}

// Check if exists...
if (!file_exists($argv[1])) {
echo "Specified bundle does not exist.\n";
exit(128);
}

// Copied from somewhere... hope it makes sense.
// But well, I'm not a PHP junkie...
function recurse_copy($src, $dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}

function create_random_key($amount) {
$keyset = "abcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$randkey = "";
for ($i=0; $i<$amount; $i++)
$randkey .= substr($keyset, rand(0, strlen($keyset)-1), 1);

return $randkey;
}

$bundle_directory = sys_get_temp_dir() . '/' . create_random_key(10) . '/';
$bundle_manifest = $bundle_directory . "/" . "manifest.yml";
$bundle_name = "unknown";
$base_directory = getenv('HOME') . '/.midgard2/';
$source_share_directory = "/usr/share/midgard2/";
$components = array('midgardmvc_core', 'midgardmvc_helper_datamanager', 'midgardmvc_helper_xsspreventer', 'net_nemein_dasboard', 'org_openpsa_qbpager');

// 1. Extracting the bundle
echo "Extracting the bundle from zip\n";
$bundle_phar = new PharData($argv[1]);
$bundle_phar->extractTo($bundle_directory);

// 2. Verify a bit...
if (!file_exists($bundle_manifest)) {
echo "Not a valid bundle, the manifest.yml is missing [" . $bundle_manifest . "]\n";
exit(128);
}

$yaml = new sfYamlParser();
$data = $yaml->parse(file_get_contents($bundle_manifest));
$bundle_name = $data['name'];
$target_directory = $base_directory . '/' . $bundle_name . "/";
$target_share_directory = $target_directory . "/share/";
$target_views_directory = $target_share_directory . "/views/";
$target_cache_directory = $target_directory . "/cache/";
$target_schema_directory = $target_directory . "/share/schema/";
echo "Installing bundle in: " . $target_directory . "\n";

// 3. Create the directory
if (!file_exists($target_directory))
mkdir($target_directory);

// 4. Create the share
if (!file_exists($target_share_directory))
mkdir($target_share_directory);

// 5. Copy the bundled components...
foreach ($components as $c) {
$source = $bundle_directory . $c;
$target = $target_directory . $c;
echo "Installing component: " . $c . "\n";
recurse_copy($source, $target);
}

// 6. Copy the shemas from components
if (!file_exists($target_schema_directory))
mkdir($target_schema_directory);
foreach ($components as $c) {
$source = $bundle_directory . $c . "/configuration"; // FIXME actually find .xml
$target = $target_schema_directory . $c;
if (file_exists($source))
recurse_copy($source, $target);
}

// 7. Copy the incoming MGD xml pieces
echo "Installing common midgard data\n";
copy($source_share_directory . "MidgardObjects.xml", $target_share_directory . "MidgardObjects.xml");
copy($source_share_directory . "midgard_auth_types.xml", $target_share_directory . "midgard_auth_types.xml");
copy($source_share_directory . "midgard_initial_database.xml", $target_share_directory . "midgard_initial_database.xml");

// 8. Create the views
if (!file_exists($target_views_directory))
mkdir($target_views_directory);

// 9. Create the cache
if (!file_exists($target_cache_directory))
mkdir($target_cache_directory);

// 10. Create the php.ini
echo "Bootstrapping internal php configuration\n";
$f = fopen($target_directory . "php.ini", "w");
fwrite($f, $php_ini_contents);
fclose($f);

// 11. Create the midgard.conf
echo "Bootstrapping internal midgard configuration\n";
$f = fopen($target_directory . "midgard.conf", "w");
fwrite($f, $midgard_conf_contents);
fclose($f);

// 12. Copy TAL
echo "Installing PHPTAL (TODO: via extra dist in bundle)\n";
recurse_copy($bundle_directory . "PHPTAL", $target_directory . "PHPTAL");
copy($bundle_directory . "PHPTAL.php", $target_directory . "PHPTAL.php");

// 13. Prepare the database
echo "Bootstrapping database (TODO: actually do this!)\n"

?>
7 changes: 4 additions & 3 deletions src/phpprocess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ void PhpProcess::start()
QStringList arguments;
QStringList env;

arguments << "public/midgard-root.php";
arguments << "http";

arguments << "-c";
arguments << "php.ini";
arguments << "midgardmvc_core/httpd/midcom-root-mjolnir-appserv.php";

// Standard env
env << ("MIDGARD_ENV_GLOBAL_CACHEDIR=" + baseDir.absoluteFilePath("cache"));
env << ("MIDGARD_ENV_GLOBAL_SHAREDIR=" + baseDir.absoluteFilePath("share"));
Expand Down
135 changes: 135 additions & 0 deletions src/sfYaml.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
<?php

/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

/**
* sfYaml offers convenience methods to load and dump YAML.
*
* @package symfony
* @subpackage yaml
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
*/
class sfYaml
{
static protected
$spec = '1.2';

/**
* Sets the YAML specification version to use.
*
* @param string $version The YAML specification version
*/
static public function setSpecVersion($version)
{
if (!in_array($version, array('1.1', '1.2')))
{
throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
}

self::$spec = $version;
}

/**
* Gets the YAML specification version to use.
*
* @return string The YAML specification version
*/
static public function getSpecVersion()
{
return self::$spec;
}

/**
* Loads YAML into a PHP array.
*
* The load method, when supplied with a YAML stream (string or file),
* will do its best to convert YAML in a file into a PHP array.
*
* Usage:
* <code>
* $array = sfYaml::load('config.yml');
* print_r($array);
* </code>
*
* @param string $input Path of YAML file or string containing YAML
*
* @return array The YAML converted to a PHP array
*
* @throws InvalidArgumentException If the YAML is not valid
*/
public static function load($input)
{
$file = '';

// if input is a file, process it
if (strpos($input, "\n") === false && is_file($input))
{
$file = $input;

ob_start();
$retval = include($input);
$content = ob_get_clean();

// if an array is returned by the config file assume it's in plain php form else in YAML
$input = is_array($retval) ? $retval : $content;
}

// if an array is returned by the config file assume it's in plain php form else in YAML
if (is_array($input))
{
return $input;
}

require_once dirname(__FILE__).'/sfYamlParser.php';

$yaml = new sfYamlParser();

try
{
$ret = $yaml->parse($input);
}
catch (Exception $e)
{
throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
}

return $ret;
}

/**
* Dumps a PHP array to a YAML string.
*
* The dump method, when supplied with an array, will do its best
* to convert the array into friendly YAML.
*
* @param array $array PHP array
* @param integer $inline The level where you switch to inline YAML
*
* @return string A YAML string representing the original PHP array
*/
public static function dump($array, $inline = 2)
{
require_once dirname(__FILE__).'/sfYamlDumper.php';

$yaml = new sfYamlDumper();

return $yaml->dump($array, $inline);
}
}

/**
* Wraps echo to automatically provide a newline.
*
* @param string $string The string to echo with new line
*/
function echoln($string)
{
echo $string."\n";
}
60 changes: 60 additions & 0 deletions src/sfYamlDumper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

/*
* This file is part of the symfony package.
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

require_once(dirname(__FILE__).'/sfYamlInline.php');

/**
* sfYamlDumper dumps PHP variables to YAML strings.
*
* @package symfony
* @subpackage yaml
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
*/
class sfYamlDumper
{
/**
* Dumps a PHP value to YAML.
*
* @param mixed $input The PHP value
* @param integer $inline The level where you switch to inline YAML
* @param integer $indent The level o indentation indentation (used internally)
*
* @return string The YAML representation of the PHP value
*/
public function dump($input, $inline = 0, $indent = 0)
{
$output = '';
$prefix = $indent ? str_repeat(' ', $indent) : '';

if ($inline <= 0 || !is_array($input) || empty($input))
{
$output .= $prefix.sfYamlInline::dump($input);
}
else
{
$isAHash = array_keys($input) !== range(0, count($input) - 1);

foreach ($input as $key => $value)
{
$willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);

$output .= sprintf('%s%s%s%s',
$prefix,
$isAHash ? sfYamlInline::dump($key).':' : '-',
$willBeInlined ? ' ' : "\n",
$this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
).($willBeInlined ? "\n" : '');
}
}

return $output;
}
}
Loading

0 comments on commit 6c78e39

Please sign in to comment.