Skip to content

Commit

Permalink
Made code more functional for clarity; renamed some functions to came…
Browse files Browse the repository at this point in the history
…lCase for consistency.
  • Loading branch information
demiankatz committed Sep 28, 2012
1 parent 1992a81 commit e84ddb7
Showing 1 changed file with 148 additions and 89 deletions.
237 changes: 148 additions & 89 deletions install.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,87 @@

echo "VuFind has been found in {$baseDir}.\n\n";

// Load user settings if we are not forcing defaults:
if (!isset($argv[1]) || !in_array('--use-defaults', $argv)) {
$overrideDir = getOverrideDir($overrideDir);
$module = getModule();
$basePath = getBasePath($basePath);
}

// Build the Windows start file in case we need it:
buildWindowsConfig($baseDir, $overrideDir, $module);

// Build the import configuration:
buildImportConfig($baseDir, $overrideDir, 'import.properties');
buildImportConfig($baseDir, $overrideDir, 'import_auth.properties');

// Build the custom module, if necessary:
if (!empty($module)) {
buildModule($baseDir, $module);
}

// Build the final configuration:
buildApacheConfig($baseDir, $overrideDir, $basePath, $module);

// Report success:
echo "Apache configuration written to {$overrideDir}/httpd-vufind.conf.\n\n";
echo "You now need to load this configuration into Apache.\n";
echo "You can do it in either of two ways:\n\n";
echo " a) Add this line to your httpd.conf file:\n";
echo " Include {$overrideDir}/httpd-vufind.conf\n\n";
echo " b) Link the configuration to Apache's conf.d directory like this:\n";
echo " ln -s {$overrideDir}/httpd-vufind.conf "
. "/etc/apache2/conf.d/vufind\n\n";
echo "Option b is preferable if your platform supports it (paths may vary),\n";
echo "but option a is more certain to be supported.\n\n";
echo "Once the configuration is linked, restart Apache. You should now be able\n";
echo "to access VuFind at http://localhost{$basePath}\n\n";
echo "For proper use of command line tools, you should also ensure that your\n";
if (empty($module)) {
echo "VUFIND_HOME and VUFIND_LOCAL_DIR environment variables are set to\n";
echo "{$baseDir} and {$overrideDir} respectively.\n\n";
} else {
echo "VUFIND_HOME, VUFIND_LOCAL_MODULES and VUFIND_LOCAL_DIR environment\n";
echo "variables are set to {$baseDir}, {$module} and {$overrideDir} ";
echo "respectively.\n\n";
}

/**
* Get a base path from the user (or return a default).
*
* @param string $basePath Default value
*
* @return string
*/
function getBasePath($basePath)
{
// Get VuFind base path:
while (true) {
$basePathInput = getInput(
"What base path should be used in VuFind's URL? [{$basePath}] "
);
if (!empty($basePathInput)) {
if (!preg_match('/^\/\w*$/', $basePathInput)) {
echo "Error: Base path must be alphanumeric and start with a "
. "slash.\n\n";
} else {
return $basePathInput;
}
} else {
return $basePath;
}
}
}

/**
* Get an override directory from the user (or return a default).
*
* @param string $overrideDir Default value
*
* @return string
*/
function getOverrideDir($overrideDir)
{
// Get override directory path:
while (true) {
$overrideDirInput = getInput(
Expand All @@ -42,14 +122,21 @@
if (!is_dir($overrideDirInput) && !@mkdir($overrideDirInput)) {
echo "Error: Cannot create directory '$overrideDirInput'.\n\n";
} else {
$overrideDir = str_replace('\\', '/', realpath($overrideDirInput));
break;
return str_replace('\\', '/', realpath($overrideDirInput));
}
} else {
break;
return $overrideDir;
}
}

}

/**
* Get the custom module name from the user (or blank for none).
*
* @return string
*/
function getModule()
{
// Get custom module name:
echo "\nVuFind supports use of a custom module for storing local code ";
echo "changes.\nIf you do not plan to customize the code, you can ";
Expand All @@ -67,93 +154,11 @@
if (in_array($moduleInput, $illegalModules)) {
echo "\n{$moduleInput} is a reserved name; please try another.\n";
} else if (empty($moduleInput) || preg_match($regex, $moduleInput)) {
$module = $moduleInput;
break;
return $moduleInput;
} else {
echo "\nIllegal name: {$moduleInput}; please use alphanumeric text.\n";
}
}

// Get VuFind base path:
while (true) {
$basePathInput = getInput(
"What base path should be used in VuFind's URL? [{$basePath}] "
);
if (!empty($basePathInput)) {
if (!preg_match('/^\/\w*$/', $basePathInput)) {
echo "Error: Base path must be alphanumeric and start with a "
. "slash.\n\n";
} else {
$basePath = $basePathInput;
break;
}
} else {
break;
}
}
}

// Build the Windows start file in case we need it:
$batch = "@set VUFIND_HOME={$baseDir}\n" .
"@set VUFIND_LOCAL_DIR={$overrideDir}\n" .
(empty($module) ? '' : "@set VUFIND_LOCAL_MODULES={$module}\n") .
"@call run_vufind.bat %1 %2 %3 %4 %5 %6 %7 %8 %9";
if (!@file_put_contents($baseDir . '/vufind.bat', $batch)) {
die("Problem writing {$baseDir}/vufind.bat.\n\n");
}

// Build the import configuration:
build_import_config($baseDir, $overrideDir, 'import.properties');
build_import_config($baseDir, $overrideDir, 'import_auth.properties');

// Build the custom module, if necessary:
if (!empty($module)) {
build_module($baseDir, $module);
}

// Build the final configuration:
$baseConfig = $baseDir . '/config/vufind/httpd-vufind.conf';
$config = @file_get_contents($baseConfig);
if (empty($config)) {
die("Problem reading {$baseConfig}.\n\n");
}
$config = str_replace("/usr/local/vufind/local", "%override-dir%", $config);
$config = str_replace("/usr/local/vufind", "%base-dir%", $config);
$config = str_replace("/vufind", "%base-path%", $config);
$config = str_replace("%override-dir%", $overrideDir, $config);
$config = str_replace("%base-dir%", $baseDir, $config);
$config = str_replace("%base-path%", $basePath, $config);
if (!empty($module)) {
$config = str_replace(
"#SetEnv VUFIND_LOCAL_MODULES VuFindLocalTemplate",
"SetEnv VUFIND_LOCAL_MODULES {$module}", $config
);
}
if (!@file_put_contents($overrideDir . '/httpd-vufind.conf', $config)) {
die("Problem writing {$overrideDir}/httpd-vufind.conf.\n\n");
}

// Report success:
echo "Apache configuration written to {$overrideDir}/httpd-vufind.conf.\n\n";
echo "You now need to load this configuration into Apache.\n";
echo "You can do it in either of two ways:\n\n";
echo " a) Add this line to your httpd.conf file:\n";
echo " Include {$overrideDir}/httpd-vufind.conf\n\n";
echo " b) Link the configuration to Apache's conf.d directory like this:\n";
echo " ln -s {$overrideDir}/httpd-vufind.conf "
. "/etc/apache2/conf.d/vufind\n\n";
echo "Option b is preferable if your platform supports it (paths may vary),\n";
echo "but option a is more certain to be supported.\n\n";
echo "Once the configuration is linked, restart Apache. You should now be able\n";
echo "to access VuFind at http://localhost{$basePath}\n\n";
echo "For proper use of command line tools, you should also ensure that your\n";
if (empty($module)) {
echo "VUFIND_HOME and VUFIND_LOCAL_DIR environment variables are set to\n";
echo "{$baseDir} and {$overrideDir} respectively.\n\n";
} else {
echo "VUFIND_HOME, VUFIND_LOCAL_MODULES and VUFIND_LOCAL_DIR environment\n";
echo "variables are set to {$baseDir}, {$module} and {$overrideDir} ";
echo "respectively.\n\n";
}

/**
Expand All @@ -180,6 +185,60 @@ function getInput($prompt)
}
}

/**
* Generate the Apache configuration.
*
* @param string $baseDir The VuFind base directory
* @param string $overrideDir The VuFind override directory
* @param string $basePath The VuFind URL base path
* @param string $module The VuFind custom module name (or empty for none)
*
* @return void
*/
function buildApacheConfig($baseDir, $overrideDir, $basePath, $module)
{
$baseConfig = $baseDir . '/config/vufind/httpd-vufind.conf';
$config = @file_get_contents($baseConfig);
if (empty($config)) {
die("Problem reading {$baseConfig}.\n\n");
}
$config = str_replace("/usr/local/vufind/local", "%override-dir%", $config);
$config = str_replace("/usr/local/vufind", "%base-dir%", $config);
$config = str_replace("/vufind", "%base-path%", $config);
$config = str_replace("%override-dir%", $overrideDir, $config);
$config = str_replace("%base-dir%", $baseDir, $config);
$config = str_replace("%base-path%", $basePath, $config);
if (!empty($module)) {
$config = str_replace(
"#SetEnv VUFIND_LOCAL_MODULES VuFindLocalTemplate",
"SetEnv VUFIND_LOCAL_MODULES {$module}", $config
);
}
if (!@file_put_contents($overrideDir . '/httpd-vufind.conf', $config)) {
die("Problem writing {$overrideDir}/httpd-vufind.conf.\n\n");
}
}

/**
* Build the Windows-specific startup configuration.
*
* @param string $baseDir The VuFind base directory
* @param string $overrideDir The VuFind override directory
* @param string $module The VuFind custom module name (or empty for none)
*
* @return void
*/
function buildWindowsConfig($baseDir, $overrideDir, $module)
{
$batch = "@set VUFIND_HOME={$baseDir}\n" .
"@set VUFIND_LOCAL_DIR={$overrideDir}\n" .
(empty($module) ? '' : "@set VUFIND_LOCAL_MODULES={$module}\n") .
"@call run_vufind.bat %1 %2 %3 %4 %5 %6 %7 %8 %9";
if (!@file_put_contents($baseDir . '/vufind.bat', $batch)) {
die("Problem writing {$baseDir}/vufind.bat.\n\n");
}
}

/**
* Configure a SolrMarc properties file.
*
Expand All @@ -189,7 +248,7 @@ function getInput($prompt)
*
* @return void
*/
function build_import_config($baseDir, $overrideDir, $filename)
function buildImportConfig($baseDir, $overrideDir, $filename)
{
$import = @file_get_contents($baseDir . '/import/' . $filename);
$import = str_replace("/usr/local/vufind", $baseDir, $import);
Expand All @@ -215,7 +274,7 @@ function build_import_config($baseDir, $overrideDir, $filename)
*
* @return void
*/
function build_module($baseDir, $module)
function buildModule($baseDir, $module)
{
// Create directories:
$moduleDir = $baseDir . '/module/' . $module;
Expand Down

0 comments on commit e84ddb7

Please sign in to comment.