qcubed/framework

View on GitHub
assets/php/_devtools/installer/step_2.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php
    /**
     * Created by vaibhav on 12/22/12 (10:16 AM).
     */
    require_once('../../qcubed.inc.php');

//    $blnGetInstPath = true;
    // See that the installation directory was supplied.
    if(!isset($_GET['installation_path'])) {
        // It was not supplied. Show error and exit
        echo '
        <html>
        <head>
            <title>QCubed Installation Wizard - Step 2</title>
        </head>
        <body>
        <div style="display: block; font-family: Arial, Sans-Serif;">
            <div style="display: block; margin-left: auto; margin-right: auto; width: 800px; background: #FFDDDD; padding: 10px; border: 1px solid #DD0000">
                    <h1>
                        QCubed Installation Wizard
                    </h1>
            <div style="color: #DD3333">
            <strong>Error:</strong> Installation path was not recieved. Please go to <a href="step_1.php">Step 1</a> and set it.
            </div>
            </div>
        </body>
        </html>';

        exit();
    }

    // Installation directory was supplied. Get it into a variable
    $strInstallationDir = $_GET['installation_path'];
    // decode it properly to be safe
    $strInstallationDir = urldecode($strInstallationDir);
    // Get the current Server DocumentRoot
    $strServerDocumentRoot = rtrim($_SERVER['DOCUMENT_ROOT'], DIRECTORY_SEPARATOR);
    // Check that the current installation directory is within the document root
    $intPos = strpos($strInstallationDir, $strServerDocumentRoot);
    if($intPos !== 0) {
        // The installation path does not begin with the server installation path.
        // Show the error and exit.
        $strOutput = sprintf('
        <html>
        <head>
            <title>QCubed Installation Wizard - Step 2</title>
        </head>
        <body>
        <div style="display: block; font-family: Arial, Sans-Serif;">
            <div style="display: block; margin-left: auto; margin-right: auto; width: 800px; background: #FFDDDD; padding: 10px; border: 1px solid #DD0000">
                    <h1>
                        QCubed Installation Wizard
                    </h1>
            <div style="color: #DD3333">
            <strong>Error:</strong> The installation directory entered in step 1 (%s) does not seem to be under the DocumentRoot of the server (%s). Please go back to <a href="step_1.php">Step 1</a> and set it.
            </div>
            </div>
        </body>
        </html>
        ', $strInstallationDir, $strServerDocumentRoot);

        echo $strOutput;

        exit();
    }

    // Installation directory seems to be under document root.
    // Try to figure out the subdirectory
    $strSubDirectory = substr($strInstallationDir, strlen($strServerDocumentRoot), strlen($strInstallationDir) - strlen($strServerDocumentRoot));
    if (DIRECTORY_SEPARATOR !== mb_substr($strSubDirectory, 0, 1)) {
        $strSubDirectory = DIRECTORY_SEPARATOR . $strSubDirectory;
    }
    
    if ($strSubDirectory == DIRECTORY_SEPARATOR) {
        $strSubDirectory = '';
    }

    // Make sure the installation directory supplied exists
    if(!is_dir($strInstallationDir)) {
        // The supplied path does not exist
        // It was not supplied. Show error and exit
        echo '
        <html>
        <head>
            <title>QCubed Installation Wizard - Step 2</title>
        </head>
        <body>
        <div style="display: block; font-family: Arial, Sans-Serif;">
            <div style="display: block; margin-left: auto; margin-right: auto; width: 800px; background: #FFDDDD; padding: 10px; border: 1px solid #DD0000">
                    <h1>
                        QCubed Installation Wizard
                    </h1>
            <div style="color: #DD3333">
            <strong>Error:</strong> Directory supplied for Installation path (' . $strInstallationDir . ') does not seem to be a directory. Please go to <a href="step_1.php">Step 1</a> and set it correctly.
            </div>
            </div>
        </body>
        </html>';

        exit();
    }

    // Make sure that the directory has all 3 folders inside - includes, assets and drafts
    if(!is_dir($strInstallationDir . '/project/includes') || !is_dir($strInstallationDir . '/project/assets')) {
        // The supplied value does not contain the required folders(directories).
        // Show error and exit coz this can't be the right path.
        echo '
        <html>
        <head>
            <title>QCubed Installation Wizard - Step 2</title>
        </head>
        <body>
        <div style="display: block; font-family: Arial, Sans-Serif;">
            <div style="display: block; margin-left: auto; margin-right: auto; width: 800px; background: #FFDDDD; padding: 10px; border: 1px solid #DD0000">
                    <h1>
                        QCubed Installation Wizard
                    </h1>
            <div style="color: #DD3333">
            <strong>Error:</strong> Directory supplied for Installation path (' . $strInstallationDir . ') does not seem to have the directories <strong>includes</strong> and <strong>assets</strong>. Please go to <a href="step_1.php">Step 1</a> to set up the Installation path correctly.
            </div>
            </div>
        </body>
        </html>';

        exit();
    }

    //Create the array for Databases
    $arrDatabaseAdapters = array(
        "MySqli5",
        "PostgreSql",
        "SqlServer",
        "Oracle",
    );
    // Try to remove the trailing slash
    if('/' == substr($strServerDocumentRoot, (strlen($strServerDocumentRoot) - 1), strlen($strServerDocumentRoot))) {
        // slash in end
        $strServerDocumentRoot = substr($strServerDocumentRoot, 0, (strlen($strServerDocumentRoot) - 1));
    }

    // Set. Now we can create the HTML
    $strCurrentInstallationDir = $strInstallationDir;
    $strStylePath = $strCurrentInstallationDir . str_replace('/', DIRECTORY_SEPARATOR, '/vendor/qcubed/qcubed/assets/css/styles.css');
    $strExamplesStylePath = $strCurrentInstallationDir . str_replace('/', DIRECTORY_SEPARATOR, '/vendor/qcubed/qcubed/assets/php/examples/includes/examples.css');
    
    $strCurrentInstallationUrl = substr($strCurrentInstallationDir, strlen(rtrim($_SERVER['DOCUMENT_ROOT'])));
        if (DIRECTORY_SEPARATOR != substr($strCurrentInstallationUrl, 0, 1)) {
                $strCurrentInstallationUrl = DIRECTORY_SEPARATOR . $strCurrentInstallationUrl;
        }
    $strStyleUrl = str_replace('/', DIRECTORY_SEPARATOR, $strCurrentInstallationUrl . '/vendor/qcubed/qcubed/assets/css/styles.css');
    $strExamplesStyleUrl = str_replace('/', DIRECTORY_SEPARATOR, $strCurrentInstallationUrl . '/vendor/qcubed/qcubed/assets/php/examples/includes/examples.css');
    $strImagesUrl = str_replace('/', DIRECTORY_SEPARATOR, $strCurrentInstallationUrl . '/vendor/qcubed/qcubed/assets/images');
?>

<!DOCTYPE html>
<html>
    <head>
        <title>QCubed Installation Wizard - Step 2</title>
        <?php
            if (file_exists($strStylePath)) {
        ?>
        <style type="text/css">@import url("<?php _p($strStyleUrl, false); ?>");</style>
        <?php
            }
        ?>
        <?php
            if (file_exists($strExamplesStylePath)) {
        ?>
        <style type="text/css">@import url("<?php _p($strExamplesStyleUrl, false); ?>");</style>
        <?php
            }
        ?>
    </head>
    <body>
        <section id="content" class='installsteps'>
            <h1 class="page-title">QCubed Installation Wizard</h1>

            <h2>Step 2: Set the variables and database information</h2>

            <div class="instructions full">
                <p>Make sure that the configuration directory is writable:<br/>
                <code>chmod 777 <?= $strServerDocumentRoot . $strSubDirectory . DIRECTORY_SEPARATOR . 'project' . DIRECTORY_SEPARATOR . 'includes/configuration' ; ?></code></p>
            </div>

            <form action="step_3.php" method="post">
                <div class="instructions full">
                    <p>This value should be the same as your server (e.g. Apache) DocumentRoot value.</p>
                    <p>For example, if your example web application where <code>http://my.domain.com/index.php</code>
                    points to <code>/home/web/htdocs/index.php</code>, then you must specify:
                    <code>__DOCROOT__</code> is defined as <code>/home/web/htdocs</code> (note the leading slash and no ending slash)</p>
                    <p>On Windows, if you have <code>http://my.domain.com/index.php</code> pointing to <code>c:\webroot\files\index.php</code>,
                    then: <code>__DOCROOT__</code> is defined as <code>c:/webroot/files</code> (again, note the leading c:/ and no ending slash)</p>
                </div>

                <div  class="full">
                    <label for="docroot">__DOCROOT__</label>
                    <input type="text" id="docroot" name="docroot" value="<?= $strServerDocumentRoot; ?>"/>
                </div>

                <div class="instructions full">
                    <p>Next, if you are using Virtual Directories, where
                    <code>http://not.my.domain.com/~my_user/index.php</code>
                    (for example) points to <code>/home/my_user/public_html/index.php</code>, then:
                    <code>__DOCROOT__</code> is defined as <code>/home/my_user/public_html</code>
                    <code>__VIRTUAL_DIRECTORY__</code> is defined as <code>/~my_user</code></p>
                </div>

                <div  class="full">
                    <label for="virtdir">__VIRTUAL_DIRECTORY__</label>
                    <input type="text" id="virtdir" name="virtdir" value=""/>
                </div>

                <div class="instructions full">
                    <p>If you have installed QCubed within a SubDirectory of the Document Root, so for example
                    the QCubed "index.php" page is accessible at
                    <code>http://my.domain.com/frameworks/qcubed/index.php</code>, then:
                    <code>__SUBDIRECTORY__</code> is defined as <code>/frameworks/qcubed</code>
                    (again, note the leading and no ending slash)</p>
                </div>

                <div  class="full">
                    <label for="subdir">__SUBDIRECTORY__</label>
                    <input type="text" id="subdir" name="subdir" value="<?= $strSubDirectory; ?>"/>
                </div>

                <div class="instructions full">
                    <h2>Timezone configuration</h2>
                    <p>Please select your server's timezone.</p>
                </div>
                <div class="full">
                    <label for="default_timezone">Default timezone</label>
                    <select id="default_timezone" name="default_timezone">
<?php
    $tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
    foreach($tzlist as $strTimezone) {
?>
                        <option <?php if(ini_get('date.timezone')) { echo 'selected';}?> value="<?php _p($strTimezone, false) ?>"><?php _p($strTimezone) ?></option>
<?php
    }
?>
                    </select>
                </div>
                
                
                
                
                <div class="instructions full">
                    <h2>First Database configuration</h2>
                    <p>The database type you are about to use.</p>
                </div>
                
                <div  class="full">
                    <label for="db_server_adapter">Database Adapter</label>
                    <select id="db_server_adapter" name="db_server_adapter">
<?php
    foreach($arrDatabaseAdapters as $strAdapter) {
?>
                        <option value="<?php _p($strAdapter, false) ?>" ><?php _p($strAdapter) ?></option>
<?php
    }
?>
                    </select>
                </div>

                
                
                
                <div class="instructions full">
                    <p>The IP address/hostname where database server is located.</p>
                </div>

                <div  class="full">
                    <label for="db_server_address">Database Server Address</label>
                    <input type="text" name="db_server_address" id="db_server_address" value="localhost"/>
                </div>

                <div class="instructions full">
                    <p>Leaving this field blank will automatically select the default port for the selected database. (e.g.
                    3306 for MySQL)</p>
                </div>

                <div  class="full">
                    <label for="db_server_port">Database Server Port</label>
                    <input type="text" name="db_server_port" id="db_server_port" value=""/>
                </div>

                <div class="instructions full">
                    <p>Name of the database you want to use in your application.</p>
                </div>

                <div  class="full">
                    <label for="db_server_dbname">Database Name</label>
                    <input type="text" name="db_server_dbname" id="db_server_dbname" value="qcubed"/>
                </div>

                <div class="instructions full">
                    <p>The database user should typically have the write permissions on the database you chose.</p>
                </div>

                <div  class="full">
                    <label for="db_server_username">Database Server Username</label>
                    <input type="text" name="db_server_username" id="db_server_username" value="root"/>
                </div>

                <div class="instructions full">
                    <p><strong>NOTE:</strong> This field will accept the password for the database user you supply in the
                    <em>Database Server Username</em> field but is a normal textbox (not the password one). This is to help you
                    write the password correctly.</p>
                </div>

                <div  class="full">
                    <label for="db_server_password">Database Server Password</label>
                    <input type="text" name="db_server_password" id="db_server_password" value=""/>
                </div>

                <div class="instructions full instructions">
                    <p><strong><em>NOTE:</em></strong> Caching and profiling will be disabled by default on the database. If
                    you want to enable them, please change settings by hand in <code>configuration.inc.php</code> after this
                    setup wizard completes.</p>
                </div>

                <input type="submit" value="Write configuration"/>
            </form>
        </section>
        <footer>
            <div id="tagline"><a href="http://qcubed.github.com/" title="QCubed Homepage"><img id="logo" src="<?php _p($strImagesUrl . '/qcubed_logo_footer.png', false); ?>" alt="QCubed Framework" /> <span class="version"><?php _p(QCUBED_VERSION); ?></span></a></div>
        </footer>
    </body>
</html>