public function handlePost($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     $prefs = array();
     foreach ($post as $key => $val) {
         if ($key == 'target') {
             continue;
         } else {
             $array = explode('|', $key);
             if (count($array) != 2) {
                 $cameralife->error('Invalid module / key');
             }
             $prefs[] = array('module' => $array[0], 'param' => $array[1], 'value' => $val);
         }
     }
     foreach ($prefs as $pref) {
         if (isset($pref['module']) && isset($pref['param']) && isset($pref['value'])) {
             Models\Preferences::setValueForModuleWithKey($pref['value'], $pref['module'], $pref['param']);
         } else {
             var_dump($prefs);
             die('passed wrong');
         }
     }
     echo "UPDATE DONE";
 }
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     /* Set up the page view */
     $view = new Views\AdminCommentsView();
     $view->checkpointId = intval(Models\Preferences::valueForModuleWithKey('CameraLife', 'checkpointcomments'));
     $view->checkpointDate = Models\Database::selectOne('logs', 'max(user_date)', 'id=' . $view->checkpointId);
     $view->showFromMe = isset($get['fromMe']) && $get['fromMe'];
     $view->showFromRegistered = isset($get['fromRegistered']) && $get['fromRegistered'];
     $view->showFromUnregistered = isset($get['fromUnregistered']) && $get['fromUnregistered'];
     if (!$view->showFromMe && !$view->showFromRegistered && !$view->showFromUnregistered) {
         $view->showFromMe = true;
         $view->showFromRegistered = true;
         $view->showFromUnregistered = true;
     }
     /* Query the comment logs */
     $currentUser = Models\User::currentUser($cookies);
     $condition = "(0 ";
     $condition .= $view->showFromMe ? "OR username = '******' " : '';
     $condition .= $view->showFromRegistered ? "OR (username LIKE '_%' AND username != '" . $currentUser->name . "')" : '';
     $condition .= $view->showFromUnregistered ? "OR username = '' " : '';
     $condition .= ") ";
     $condition .= " AND id > " . $view->checkpointId;
     $query = Models\Database::select('comments', '*', $condition);
     $commentRecords = array();
     while ($record = $query->fetchAssoc()) {
         $commentRecords[] = $record;
     }
     $view->commentRecords = $commentRecords;
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
Exemplo n.º 3
0
    /**
     * Generate partial output for HTML header
     *
     * @access public
     * @static
     * @return void
     */
    public function render()
    {
        $gravitarHTML = htmlentities($this->currentUser->gravitarUrl());
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="utf-8">
            <title><?php 
        echo htmlspecialchars($this->openGraphObject->title);
        ?>
</title>
            <?php 
        $this->openGraphObject->htmlRenderMetaTags();
        ?>
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta name="generator" content="Camera Life version <?php 
        echo constant('CAMERALIFE_VERSION');
        ?>
">
            <meta name="author" content="<?php 
        echo htmlspecialchars($this->ownerEmail);
        ?>
">
            <!-- Le styles -->
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.min.css" integrity="sha384-MIwDKRSSImVFAZCVLtU0LMDdON6KVCrZHyVQQj6e8wIEJkW4tvwqXrbMIya1vriY" crossorigin="anonymous">
            <link rel="search" href="<?php 
        echo htmlspecialchars($this->openSearchUrl);
        ?>
" type="application/opensearchdescription+xml"
                  title="Content Search"/>
            <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css">
            <link rel="stylesheet" href="<?php 
        echo constant('BASE_URL');
        ?>
/assets/main.css">

            <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
            <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
            <!--[if lt IE 9]>
              <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
              <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
            <![endif]-->
        </head>
    <?php 
    }
Exemplo n.º 4
0
 public function handlePost($get, $post, $files, $cookies)
 {
     $currentUser = Models\User::currentUser($cookies);
     switch ($post['action']) {
         case 'favorite':
             $this->model->favoriteByUser($currentUser);
             break;
         case 'unfavorite':
             $this->model->unfavoriteByUser($currentUser);
             break;
     }
     parent::handlePost($get, $post, $files, $cookies);
 }
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     ini_set('max_execution_time', 9000);
     chdir(constant('BASE_DIR'));
     $lastdone = isset($get['lastdone']) ? (int) $get['lastdone'] : 0;
     $starttime = isset($get['starttime']) ? (int) $get['starttime'] : time();
     $numdone = isset($get['numdone']) ? (int) $get['numdone'] : 0;
     $phpself = self::getUrl();
     /* Rescan */
     if (!isset($get['lastdone'])) {
         Models\Folder::update();
     }
     /* Set up the page view */
     $this->htmlHeader($cookies);
     //TODO BREAKING MVC HERE BECAUSE OF INTREMENTAL RENDERING
     echo '<h2>Rendering thumbnails <small>To avoid a delay when viewing photos for the first time</small></h2>';
     $total = Models\Database::selectOne('photos', 'count(*)');
     $done = Models\Database::selectOne('photos', 'count(*)', "id <= {$lastdone}");
     $todo = Models\Database::selectOne('photos', 'count(*)', "id > {$lastdone}");
     $timeleft = ceil((time() - $starttime) * $todo / ($numdone + $done / 1000 + 1) / 60);
     echo "<p>Progress: " . number_format($done) . ' of ' . number_format($total) . " done";
     echo " (about {$timeleft} minutes left)";
     echo "</p>\n";
     $percentage = $done / $total * 100;
     echo "<progress class=\"progress\" value=\"{$percentage}\" max=\"100\">{$percentage}%</progress>";
     $next1000 = Models\Database::select('photos', 'id', "id > {$lastdone} AND status != 9", 'ORDER BY id LIMIT 500');
     $fixed = 0;
     flush();
     while (($next = $next1000->fetchAssoc()) && $fixed < 10) {
         $photo = Models\Photo::getPhotoWithID($next['id']);
         $redo = $photo->isCacheMissing();
         if ($redo) {
             echo "<div>Updating #" . $next['id'] . "</div>\n";
             $photo->generateThumbnail();
             echo "<div>Updated #" . $next['id'] . "</div>\n";
             flush();
             $fixed++;
             $photo->destroy();
         }
         $lastdone = $next['id'];
     }
     $numdone += $fixed;
     if ($todo > 0) {
         echo "<script language='javascript'>window.setTimeout('window.location=\"" . htmlspecialchars($phpself) . "?lastdone={$lastdone}&starttime={$starttime}&numdone={$numdone}\"',400)</script>\n";
         echo "<p><a href=\"?lastdone={$lastdone}&starttime={$starttime}&numdone={$numdone}\">Click here to continue</a> if the Javascript redirect doesn't work.</p>\n";
     }
     $this->htmlFooter();
 }
Exemplo n.º 6
0
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     /* Set up the page view */
     $view = new Views\AdminLogsView();
     $view->checkpointId = intval(Models\Preferences::valueForModuleWithKey('CameraLife', 'checkpointlogs'));
     $view->checkpointDate = Models\Database::selectOne('logs', 'max(user_date)', 'id=' . $view->checkpointId);
     $view->showFromMe = isset($get['fromMe']) && $get['fromMe'];
     $view->showFromRegistered = isset($get['fromRegistered']) && $get['fromRegistered'];
     $view->showFromUnregistered = isset($get['fromUnregistered']) && $get['fromUnregistered'];
     $view->showChangedPhotos = isset($get['changedPhotos']) && $get['changedPhotos'];
     $view->showChangedTags = isset($get['changedTags']) && $get['changedTags'];
     $view->showChangedUsers = isset($get['changedUsers']) && $get['changedUsers'];
     $view->showChangedPrefs = isset($get['changedPreferences']) && $get['changedPreferences'];
     if (!$view->showFromMe && !$view->showFromRegistered && !$view->showFromUnregistered) {
         $view->showFromMe = true;
         $view->showFromRegistered = true;
         $view->showFromUnregistered = true;
     }
     if (!$view->showChangedPhotos && !$view->showChangedTags && !$view->showChangedUsers && !$view->showChangedPrefs) {
         $view->showChangedPhotos = true;
         $view->showChangedTags = true;
         $view->showChangedUsers = true;
         $view->showChangedPrefs = true;
     }
     /* Query the audit logs */
     $currentUser = Models\User::currentUser($cookies);
     $condition = "(0 ";
     $condition .= $view->showChangedPhotos ? "OR record_type = 'photo' " : '';
     $condition .= $view->showChangedTags ? "OR record_type = 'album' " : '';
     $condition .= $view->showChangedUsers ? "OR record_type = 'user' " : '';
     $condition .= $view->showChangedPrefs ? "OR record_type = 'preference' " : '';
     $condition .= ") AND (0 ";
     $condition .= $view->showFromMe ? "OR user_name = '" . $currentUser->name . "' " : '';
     $condition .= $view->showFromRegistered ? "OR (user_name LIKE '_%' AND user_name != '" . $currentUser->name . "')" : '';
     $condition .= $view->showFromUnregistered ? "OR user_name = '' " : '';
     $condition .= ") ";
     $condition .= " AND logs.id > " . $view->checkpointId;
     $extra = "GROUP BY record_id, record_type, value_field ORDER BY maxid DESC";
     $query = Models\Database::select('logs', 'record_type, record_id, value_field, MAX(logs.id) as maxid', $condition, $extra);
     $auditTrails = array();
     while ($record = $query->fetchAssoc()) {
         $auditTrails[] = Models\AuditTrail::getAuditTrailWithID($record['maxid']);
     }
     $view->auditTrails = $auditTrails;
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
Exemplo n.º 7
0
 protected function renderNavbar($cookies = array())
 {
     $navbarView = new Views\NavbarView();
     $navbarView->openGraphObject = $this;
     $navbarView->currentUser = Models\User::currentUser($cookies);
     $navbarView->searchUrl = SearchController::getUrl();
     $navbarView->adminUrl = AdminController::getUrl();
     $navbarView->logoutUrl = LogoutController::getUrl();
     $navbarView->favoritesUrl = FavoritesController::getUrl();
     $navbarView->loginUrl = LoginController::getUrl();
     $navbarView->numFavorites = Models\Favorites::favoritesForCurrentUser($cookies)->getPhotoCount();
     $navbarView->ownerEmail = Models\Preferences::valueForModuleWithKey('CameraLife', 'owner_email');
     $navbarView->render();
 }
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     $results = Models\Folder::update();
     /* Set up the page view */
     $view = new Views\AdminRescanView();
     $view->scanResults = $results;
     $view->thumbnailUrl = AdminThumbnailController::getUrl();
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     /* Set up the page view */
     $view = new Views\AdminSecurityView();
     $users = array();
     $query = Models\Database::select('users', '*', '', 'ORDER by id');
     while ($record = $query->fetchAssoc()) {
         $users[] = new Models\User($record['id']);
     }
     $view->users = $users;
     $policies = array();
     $view->securityPolicies = $policies;
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
 public function handlePost($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     if (!isset($post['target'])) {
         throw new \Exception('No target specified');
     }
     foreach ($post as $key => $val) {
         if ($key == 'target') {
             continue;
         } else {
             $array = explode('|', $key);
             if (count($array) != 2) {
                 throw new \Exception('Invalid module / key');
             }
             Models\Preferences::setValueForModuleWithKey($val, $array[0], $array[1]);
         }
     }
     header("Location: " . htmlspecialchars($post['target']));
 }
Exemplo n.º 11
0
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     /* Set up the page view */
     $view = new Views\AdminView();
     $view->runningVersion = constant('CAMERALIFE_VERSION');
     $view->latestVersion = $this->latestAvailableVersion();
     $checkpointLogs = intval(Models\Preferences::valueForModuleWithKey('CameraLife', 'checkpointlogs'));
     $view->numNewLogs = Models\Database::selectOne('logs', 'COUNT(*)', 'id>' . $checkpointLogs);
     $checkpointComments = intval(Models\Preferences::valueForModuleWithKey('CameraLife', 'checkpointcomments'));
     $view->numNewComments = Models\Database::selectOne('comments', 'COUNT(*)', 'id>' . $checkpointComments);
     $view->numNewUsers = Models\Database::selectOne('users', 'COUNT(*)', 'auth=1');
     $view->numFlagged = Models\Database::selectOne('photos', 'COUNT(*)', 'status=1');
     $view->appearanceUrl = AdminAppearanceController::getUrl();
     $view->logsUrl = AdminLogsController::getUrl();
     $view->commentsUrl = AdminCommentsController::getUrl();
     $view->fileStoreUrl = AdminFileStoreController::getUrl();
     $view->securityUrl = AdminSecurityController::getUrl();
     $view->thumbnailUrl = AdminThumbnailController::getUrl();
     $view->rescanUrl = AdminRescanController::getUrl();
     $view->photosUrl = AdminPhotosController::getUrl();
     $preferences = array();
     $preferences[] = ['module' => 'CameraLife', 'key' => 'sitename', 'type' => 'string', 'name' => 'Site name'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'sitename', 'type' => 'string', 'name' => 'Site abbreviation'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'owner_email', 'type' => 'string', 'name' => 'Owner email address'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'rewrite', 'type' => 'yesno', 'name' => 'Use pretty URLs'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'autorotate', 'type' => 'yesno', 'name' => 'Autorotate photos'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'thumbsize', 'type' => 'number', 'name' => 'Size for thumbnails'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'scaledsize', 'type' => 'number', 'name' => 'Size for preview images'];
     $preferences[] = ['module' => 'CameraLife', 'key' => 'optionsizes', 'type' => 'string', 'name' => 'Other available sizes', 'help' => 'comma separated (you can also leave this blank)'];
     $view->preferences = $preferences;
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
Exemplo n.º 12
0
 public function handleGet($get, $post, $files, $cookies)
 {
     $photo = Models\Photo::getPhotoWithID($get['id']);
     $scale = isset($get['scale']) ? $get['scale'] : null;
     $extension = $photo->extension;
     if (!is_numeric($get['ver'])) {
         throw new \Exception('Required number ver missing! Query string: ' . htmlentities($_SERVER['QUERY_STRING']));
     }
     if ($photo->get('status') != 0) {
         if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
             throw new \Exception('Photo access denied');
         }
     }
     list($file, $temp, $mtime) = self::getFileForPhotoWithScale($photo, $scale);
     if ($extension == 'jpg' || $extension == 'jpeg') {
         header('Content-type: image/jpeg');
     } elseif ($extension == 'png') {
         header('Content-type: image/png');
     } elseif ($extension == 'gif') {
         header('Content-type: image/gif');
     } else {
         throw new \Exception('Unknown photo type');
     }
     header('Content-Disposition: inline; filename="' . htmlentities($photo->get('description')) . '.' . $extension . '";');
     header('Content-Length: ' . filesize($file));
     header("Date: " . gmdate("D, d M Y H:i:s", $mtime) . " GMT");
     header("Last-Modified: " . gmdate("D, d M Y H:i:s", $mtime) . " GMT");
     header("Expires: " . gmdate("D, d M Y H:i:s", time() + 2592000) . " GMT");
     // One month
     if ($file) {
         readfile($file);
     }
     if ($temp) {
         unlink($file);
     }
 }
Exemplo n.º 13
0
 public function handleGet($get, $post, $files, $cookies)
 {
     if (Models\User::currentUser($cookies)->authorizationLevel < 5) {
         throw new \Exception('You are not authorized to view this page');
     }
     /* Set up the page view */
     $checkpointId = intval(Models\Preferences::valueForModuleWithKey('CameraLife', 'checkpointphotos'));
     $view = new Views\AdminPhotosView();
     $view->isUsingHttps = isset($_SERVER['HTTPS']);
     $view->myUrl = $_SERVER['REQUEST_URI'];
     $query = Models\Database::select('photos', 'id', 'id>:0 AND status!=9', 'ORDER BY id LIMIT 200', null, array($checkpointId));
     $view->photos = array();
     while ($row = $query->fetchAssoc()) {
         $view->photos[] = Models\Photo::getPhotoWithID($row['id']);
         $view->lastReviewItem = $row['id'];
     }
     $done = Models\Database::selectOne('photos', 'count(id)', 'id<=:0 AND status!=9', null, null, array($checkpointId));
     $view->reviewsDone = $done;
     $remaining = Models\Database::selectOne('photos', 'count(id)', 'id>:0 AND status!=9', null, null, array($checkpointId));
     $view->reviewsRemaining = $remaining;
     $this->htmlHeader($cookies);
     $view->render();
     $this->htmlFooter();
 }
Exemplo n.º 14
0
    /**
     * Generate partial output for HTML header
     *
     * @access public
     * @static
     * @return void
     */
    public function render()
    {
        $gravitarHTML = htmlentities($this->currentUser->gravitarUrl());
        ?>
   
		<nav class="navbar navbar-light bg-faded navbar-static-top" style="margin-bottom:20px;background:rgba(247,249,249,0.90)">
			<div class="container">
			    <button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#exCollapsingNavbar2">
			    &#9776;
			    </button>
			    <div class="collapse navbar-toggleable-xs" id="exCollapsingNavbar2">
			        <a class="navbar-brand" href="<?php 
        echo constant('BASE_URL');
        ?>
/"><?php 
        echo htmlspecialchars($this->openGraphObject->siteName);
        ?>
</a>
			        <ul class="nav navbar-nav">
			            <li class="nav-item">
			                <a href="<?php 
        echo htmlspecialchars($this->favoritesUrl);
        ?>
" class="nav-link"><i class="fa fa-star" style="color:gold"></i> My favorites (<?php 
        echo $this->numFavorites;
        ?>
)</a>
			            </li>
		                <?php 
        if ($this->currentUser->isLoggedIn) {
            ?>
				            <li class="nav-item">
				                <a class="dropdown-toggle nav-link" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
					                <img src="<?php 
            echo $gravitarHTML;
            ?>
" height=16 width=16> <?php 
            echo htmlspecialchars($this->currentUser->name);
            ?>
				                </a>
				                <div class="dropdown-menu" aria-labelledby="dropdownMenu1">
			                        <?php 
            if ($this->currentUser->authorizationLevel >= 5) {
                ?>
					                    <a class="dropdown-item" href="<?php 
                echo htmlspecialchars($this->adminUrl);
                ?>
">Administer</a>
		                            <?php 
            }
            ?>
				                    <a class="dropdown-item" href="<?php 
            echo htmlspecialchars($this->logoutUrl);
            ?>
">Sign Out</a>
				                </div>
				            </li>
				        <?php 
        } else {
            ?>
				            <li class="nav-item">
				                <a href="<?php 
            echo htmlspecialchars($this->loginUrl);
            ?>
" class="nav-link">Login / Free account</a>
				            </li>
				         <?php 
        }
        ?>
			        </ul>
			        <form class="form-inline navbar-form pull-right" action="<?php 
        echo htmlspecialchars($this->searchUrl);
        ?>
" method="get">
			            <input class="form-control" type="text" placeholder="Search" name="id">
			        </form>
			    </div>
			</div>
		</nav>
    <?php 
    }
Exemplo n.º 15
0
 public function handleGet($get, $post, $files, $cookies)
 {
     Models\User::logoutCurrentUser();
     header('Location: ' . MainPageController::getUrl());
 }
Exemplo n.º 16
0
    public function handleGet($get, $post, $files, $cookies)
    {
        /* Set up common page parts */
        $this->htmlHeader($cookies);
        try {
            // Mewp told me specifically not to use SERVER_NAME.
            // Change 'localhost' to your domain name.
            $openid = new \LightOpenID($_SERVER['SERVER_NAME']);
            if (!$openid->mode) {
                if (isset($post['openid_identifier'])) {
                    $openid->identity = $post['openid_identifier'];
                    $openid->required = array('contact/email');
                    $openid->optional = array('namePerson', 'namePerson/friendly');
                    header('Location: ' . $openid->authUrl());
                    return;
                }
            } elseif ($openid->mode == 'cancel') {
                echo 'User has canceled authentication!';
            } else {
                $identity = "";
                $email = "";
                if ($openid->validate()) {
                    $identity = $openid->identity;
                    $attr = $openid->getAttributes();
                    $email = $attr['contact/email'];
                    if (strlen($email)) {
                        session_start();
                        $_SESSION['openid_identity'] = $openid->identity;
                        $_SESSION['openid_email'] = $attr['contact/email'];
                        Models\User::userWithOpenId($_SESSION['openid_identity'], $_SESSION['openid_email']);
                        header('Location: ' . MainPageController::getUrl());
                        return;
                    } else {
                        throw new \Exception('Enough detail (email address) was not provided to process your login.');
                    }
                } else {
                    throw new \Exception('Provider did not validate your login');
                }
            }
        } catch (\ErrorException $e) {
            echo $e->getMessage();
        }
        if (file_exists('../../config.php')) {
            throw new \Exception("Camera Life already appears to be set up, because modules/config.inc exists.");
        }
        ?>
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">Login</h3>
                </div>
                <div class="panel-body">
                        <p class="lead">Choose an OpenID provider to login:</p>

                        <form class="form-inline" method="post">
                            <input type="hidden" name="action" value="verify"/>
                            <button class="btn btn-primary"  name="openid_identifier" value="https://www.google.com/accounts/o8/id"><i class="fa fa-google"></i> Google</button>
                            <button class="btn btn-primary"  name="openid_identifier" value="http://me.yahoo.com/"><i class="fa fa-yahoo"></i> Yahoo</button>
                        </form>

                        <hr>

                        <form class="form-inline" method="post">
                            <input type="hidden" name="action" value="verify"/>
                            Other OpenID
                            <input name="openid_identifier" class="form-control" value="http://"/>
                            <input class="btn btn-primary" type="submit" value="Login"/>
                        </form>
                </div>
            </div>
<?php 
        /* Render footer */
        $this->htmlFooter();
    }
 public function handlePost($get, $post, $files, $cookies)
 {
     session_start();
     if (!isset($post['host'])) {
         throw new \Exception('HOST is missing');
     }
     if (!isset($post['name'])) {
         throw new \Exception('NAME is missing');
     }
     if (!isset($post['user'])) {
         throw new \Exception('USER is missing');
     }
     if (!isset($post['pass'])) {
         throw new \Exception('PASS is missing');
     }
     if (!isset($post['prefix'])) {
         throw new \Exception('PREFIX is missing');
     }
     if (!isset($_SESSION['openid_identity'])) {
         throw new \Exception('OpenID login is missing');
     }
     Models\Database::$dsn = "mysql:host={$post['host']};dbname={$post['name']}";
     Models\Database::$username = $post['user'];
     Models\Database::$password = $post['pass'];
     Models\Database::$prefix = $post['prefix'];
     Models\Database::setupTables();
     Models\Preferences::setFactoryDefaults();
     Models\User::userWithOpenId($_SESSION['openid_identity'], $_SESSION['openid_email']);
     Models\Database::update('users', ['auth' => 5], 'email="' . $_SESSION['openid_email'] . '"');
     //todo security
     header('Location: ' . MainPageController::getUrl());
     //todo URL / url http://www.teamten.com/lawrence/writings/capitalization_of_initialisms.html
 }