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();
 }
 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();
 }
 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();
 }
 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 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();
 }
 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();
 }
Beispiel #7
0
 /**
  * Handles and routes any HTTP request using a subclass that can handles it. URLs are like:
  *
  *   index.php?page=Photo&id=1243&...
  *
  * But usually the user will see pretty URLs that rewrite to the above such as
  *
  *   photo/1243?...
  *
  * @access public
  * @param  array $get
  * @param  array $post
  * @param  array $files
  * @param  array $cookies
  * @param  array $server
  * @return void
  */
 public static function handleRequest($get, $post, $files, $cookies, $server)
 {
     try {
         $page = isset($get['page']) ? $get['page'] : 'mainPage';
         $dbIsCurrent = Models\Database::installedSchemaIsCorrectVersion();
         if (!$dbIsCurrent && substr($page, 0, 5) !== 'setup') {
             if (!Models\Database::connectionParametersAreSet() && $page != 'setupInstall') {
                 header('Location: ' . SetupInstallController::getUrl());
                 return;
             }
             if ($page != 'setupUpgrade' && $page != 'setupInstall') {
                 header('Location: ' . SetupUpgradeController::getUrl());
                 return;
             }
         }
         $controllerClass = 'CameraLife\\Controllers\\' . ucfirst($page) . 'Controller';
         if (!class_exists($controllerClass)) {
             throw new \Exception('Page not found');
         }
         if (isset($get['id'])) {
             $controller = new $controllerClass($get['id']);
         } else {
             $controller = new $controllerClass();
         }
         $method = 'handle' . ucfirst(strtolower($server['REQUEST_METHOD']));
         $controller->{$method}($get, $post, $files, $cookies);
     } catch (\Exception $e) {
         self::handleException($e);
     }
 }
 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
 }
Beispiel #9
0
    /**
     * Render the view to standard output
     *
     * @access public
     * @return void
     */
    public function render()
    {
        if ($this->photo->get('status') != 0) {
            echo '<p class="alert alert-danger lead"><strong>Notice:</strong> This photo is not publicly viewable</p>';
        }
        $this->referrer = str_replace(constant('BASE_URL'), '', $this->referrer);
        $this->referrer = preg_replace('|^/|', '', $this->referrer);
        //todo, photo model needs to know referrer
        $photoPrev = $this->photo->getPrevious();
        $photoNext = $this->photo->getNext();
        // Get stuff related to the current user
        if ($this->currentUser->isLoggedIn) {
            $rating = $avg = Models\Database::selectOne('ratings', 'AVG(rating)', 'id=' . $this->photo->get('id') . " AND username='******'");
        } else {
            $rating = $avg = Models\Database::selectOne('ratings', 'AVG(rating)', 'id=' . $this->photo->get('id') . " AND user_ip='" . $this->currentUser->remoteAddr . "'");
        }
        ?>

		<nav class="navbar navbar-light bg-faded navbar-fixed-bottom" style="background:rgba(255,255,255,0.4)">
			<div class="container">
				<form class="form-inline pull-xs-left" method=POST name="form" style="margin-right:10px">
					<input type="hidden" name="action" value="<?php 
        echo $rating ? 'unfavorite' : 'favorite';
        ?>
">
					<?php 
        $count = $this->photo->getLikeCount();
        ?>
					<button class="btn btn-link" type="submit" style="padding:2px">
				        <span class="fa-stack">
				            <i class="fa fa-star<?php 
        echo $rating ? '' : '-o';
        ?>
 fa-stack-2x" style="color:gold"></i>
				            <strong class="fa-stack-1x" style="font-size:0.7em;color:black"><?php 
        echo $count ? $count : '';
        ?>
</strong>
				        </span>				
					</button>
				</form>
			    <a href="<?php 
        echo $this->photo->getMediaURL('photo');
        ?>
"
			        class="btn btn-link pull-xs-left"
			        title="<?php 
        echo $this->photo->get('width');
        ?>
 x <?php 
        echo $this->photo->get('height');
        ?>
px"
					style="margin-right:10px"
				>
			        <i class="fa fa-arrows-alt"></i>
			    </a>
			    <a href="<?php 
        echo $this->contextUrl;
        ?>
"
			        class="btn btn-link pull-xs-left"
			        title="Close"
					style="margin-right:10px"
				>
			        <i class="fa fa-times"></i>
			    </a>
		        <span class="navbar-brand"><?php 
        echo htmlspecialchars($this->openGraphObject->title);
        ?>
</span>
			</div>
		</nav>
 
<div
	id="mainPic" 
	style="position:absolute;top:0;left:0;width:100%;height:100%;background:url(<?php 
        echo $this->photo->getMediaURL('scaled');
        ?>
);background-size:contain;background-repeat:no-repeat;background-position:center"
>

	<img
		src="<?php 
        echo $this->photo->getMediaURL('scaled');
        ?>
"
		alt="<?php 
        echo htmlentities($this->photo->get('description'));
        ?>
"
		style="display:none"
	>
</div>

<div class="container" style="position:absolute;top:100%;height:100%;">
        <h3>Information</h3>
        <dl class="dl-horizontal">
            <?php 
        if ($this->photo->get('username')) {
            echo '         <dt>Author</dt><dd>' . $this->photo->get('username') . '</dd>';
        }
        if ($exif = $this->photo->getEXIF()) {
            foreach ($exif as $key => $val) {
                if ($key == "Location") {
                    echo "         <dt>{$key}</dt><dd><a href=\"http://maps.google.com/maps?q={$val}\">{$val}</a></dd>\n";
                } else {
                    if ($key == "Camera Model") {
                        echo "         <dt>{$key}</dt><dd><a href=\"http://pbase.com/cameras/{$val}\">{$val}</a></dd>\n";
                    } else {
                        echo "         <dt>{$key}</dt><dd>{$val}</dd>\n";
                    }
                }
            }
        }
        ?>
        </dl>
</div>
 
<?php 
        // Cache the next image the user is likely to look at
        if ($photoNext) {
            echo '<img style="display:none" src="' . htmlspecialchars($photoNext->getMediaURL('scaled')) . '" alt="hidden photo">';
        }
    }