예제 #1
0
파일: pages.php 프로젝트: robkaper/kiki
 public function exec()
 {
     $db = \Kiki\Core::getDb();
     $user = \Kiki\Core::getUser();
     if (!$this->objectId) {
         $this->objectId = 'index';
     }
     // Find page under this section through subcontroller.
     // TODO: also find subsections, instead of defining full paths in
     // sections db...  the latter is faster, but then the base paths are not
     // properly normalised.  Both should be possible.
     $this->subController = \Kiki\Router::findPage($this->objectId, $this->instanceId);
     if ($this->subController) {
         $this->subController->exec();
     } else {
         if ($this->objectId == 'index') {
             $section = new \Kiki\Section($this->instanceId);
             $this->status = 200;
             $this->template = 'pages/autoindex';
             $this->title = sprintf(_("Index of %s"), $section->title());
             $q = $db->buildQuery("SELECT cname,title FROM articles a, objects o WHERE a.object_id=o.object_id AND o.section_id=%d AND visible=true", $this->instanceId);
             $rs = $db->query($q);
             if ($db->numRows($rs) == 0) {
                 $this->template = 'pages/autoindex-empty';
                 return;
             }
             $this->content = "<ul>";
             while ($o = $db->fetchObject($rs)) {
                 $this->content .= sprintf('<li><a href="%s">%s</a></li>', $o->cname, $o->title);
             }
             $this->content .= "</ul>";
         }
     }
 }
예제 #2
0
파일: album.php 프로젝트: robkaper/kiki
 public function exec()
 {
     $db = Core::getDb();
     $user = Core::getUser();
     $path = explode("/", $this->objectId);
     $albumId = 0;
     $pictureId = 0;
     if (count($path) == 2) {
         list($albumId, $pictureId) = $path;
     } else {
         if (count($path) == 1) {
             list($albumId) = $path;
         }
     }
     if ($albumId) {
         $album = new \Kiki\Album($albumId);
         if ($album->id()) {
             $this->template = 'pages/default';
             $this->status = 200;
             $this->title = "Album: " . $album->title();
             $this->content = $album->show($pictureId);
             return true;
         }
     }
     return false;
 }
예제 #3
0
파일: kiki.php 프로젝트: robkaper/kiki
 public function fallback()
 {
     $parts = parse_url($this->objectId);
     if (!isset($parts['path'])) {
         return false;
     }
     $kikiFile = Core::getInstallPath() . "/htdocs/" . $parts['path'];
     if (file_exists($kikiFile)) {
         $ext = Storage::getExtension($kikiFile);
         switch ($ext) {
             case 'css':
             case 'gif':
             case 'jpg':
             case 'js':
             case 'png':
                 $this->altContentType = Storage::getMimeType($ext);
                 $this->template = null;
                 $this->status = 200;
                 $this->content = file_get_contents($kikiFile);
                 return true;
                 break;
             case 'php':
                 Log::debug("PHP file {$kikiFile}");
                 $this->status = 200;
                 $this->template = 'pages/default';
                 $user = Core::getUser();
                 $db = Core::getDb();
                 include_once $kikiFile;
                 return true;
                 break;
             case '':
                 if (file_exists($kikiFile . "index.php")) {
                     Log::debug("PHP index file {$kikiFile}" . "index.php");
                     $this->status = 200;
                     $this->template = 'pages/default';
                     $user = Core::getUser();
                     $db = Core::getDb();
                     include_once $kikiFile . "index.php";
                     return true;
                 }
                 break;
             default:
         }
         Log::debug("unsupported extension {$ext} for kiki htdocs file {$kikiFile}");
     } else {
         Log::debug("non-existing kikiFile {$kikiFile}");
     }
     return false;
 }
예제 #4
0
파일: page.php 프로젝트: robkaper/kiki
 public function exec()
 {
     $db = \Kiki\Core::getDb();
     $user = \Kiki\Core::getUser();
     $article = new \Kiki\Article($this->instanceId);
     $this->title = $article->title();
     $template = \Kiki\Template::getInstance();
     $template->append('stylesheets', \Kiki\Config::$kikiPrefix . "/scripts/prettify/prettify.css");
     if ($article->visible() || $article->userId() == $user->id()) {
         $this->title = $article->title();
         $this->status = 200;
         $this->template = 'pages/default';
         $template = new \Kiki\Template('content/pages-single');
         $template->assign('page', $article->templateData());
         $this->content = $template->fetch();
     }
 }
예제 #5
0
파일: event.php 프로젝트: robkaper/kiki
 public function exec()
 {
     $db = Core::getDb();
     $user = Core::getUser();
     $q = $db->buildQuery("select id from events where cname='%s'", $this->objectId);
     $eventId = $db->getSingleValue($q);
     if ($eventId) {
         $event = new Event($eventId);
         if ($event->id()) {
             $this->template = 'pages/event';
             $this->status = 200;
             $this->title = "Event: " . $event->title();
             $this->content = $event->content();
             return true;
         }
     }
     return false;
 }
예제 #6
0
파일: articles.php 프로젝트: robkaper/kiki
 public function exec()
 {
     $db = Core::getDb();
     $user = Core::getUser();
     $template = Template::getInstance();
     $template->append('stylesheets', \Kiki\Config::$kikiPrefix . "/scripts/prettify/prettify.css");
     $q = $db->buildQuery("SELECT id FROM articles a LEFT JOIN objects o ON o.object_id=a.object_id WHERE o.section_id=%d AND ((o.visible=1 AND o.ctime<=now()) OR o.user_id=%d) ORDER BY o.ctime DESC LIMIT 10", $this->instanceId, $user->id());
     $articleIds = $db->getObjectIds($q);
     $articles = array();
     foreach ($articleIds as $articleId) {
         $article = new Article($articleId);
         $articles[] = array('url' => $article->url(), 'title' => $article->title());
     }
     $template->assign('latestArticles', $articles);
     if (preg_match('/^page-([\\d]+)$/', $this->objectId, $matches) && isset($matches[1])) {
         $this->objectId = null;
         $currentPage = $matches[1];
     }
     if (isset($this->objectId) && $this->objectId) {
         $matches = array();
         if (preg_match('/^socialupdate-([\\d]+)$/', $this->objectId, $matches) && isset($matches[1])) {
             $updateId = $matches[1];
             $update = new SocialUpdate($updateId);
             if (!$update->id()) {
                 return;
             }
             $this->status = 200;
             $this->title = \Kiki\Misc::textSummary($update->body(), 50);
             $this->template = 'pages/default';
             $template = new Template('content/socialupdates-single');
             $template->assign('update', $update->templateData());
             $this->content = $template->fetch();
             return;
         }
         $article = new Article(0, $this->objectId);
         if ($article->id() && $article->sectionId() == $this->instanceId && ($article->visible() || $article->userId() == $user->id())) {
             $this->status = 200;
             $this->title = $article->title();
             $this->template = 'pages/default';
             $template = new Template('content/articles-single');
             $GLOBALS['articleAlbumId'] = $article->albumId();
             $template->assign('article', $article->templateData());
             $this->content = $template->fetch();
         } else {
             // $this->template = 'pages/default';
             // $template = new Template( 'content/articles-404' );
             // $this->content = $template->fetch();
             return false;
         }
     } else {
         $section = new \Kiki\Section($this->instanceId);
         $itemsPerPage = 25;
         if (!isset($currentPage)) {
             $currentPage = 1;
         }
         $this->status = 200;
         $this->title = $section->title();
         $this->template = 'pages/default';
         $this->content = null;
         // MultiBanner::articles( $section->id() );
         $article = new Article();
         $update = new SocialUpdate();
         $q = $db->buildQuery("SELECT count(*) FROM objects WHERE type IN ('%s', '%s', '%s', '%s') AND section_id=%d AND ((visible=1 AND ctime<=now()) OR user_id=%d)", 'Article', 'Kiki\\Article', 'SocialUpdate', 'Kiki\\SocialUpdate', $this->instanceId, $user->id());
         $totalPosts = $db->getSingleValue($q);
         $paging = new \Kiki\Paging();
         $paging->setCurrentPage($currentPage);
         $paging->setItemsPerPage($itemsPerPage);
         $paging->setTotalItems($totalPosts);
         $q = $db->buildQuery("SELECT object_id, ctime, type FROM objects WHERE type IN ('%s', '%s', '%s', '%s') AND section_id=%d AND ( (visible=1 AND ctime<=now()) OR user_id=%d) ORDER BY ctime DESC LIMIT %d,%d", 'Article', 'Kiki\\Article', 'SocialUpdate', 'Kiki\\SocialUpdate', $this->instanceId, $user->id(), $paging->firstItem() - 1, $itemsPerPage);
         $rs = $db->query($q);
         while ($o = $db->fetchObject($rs)) {
             switch ($o->type) {
                 case 'Article':
                 case 'Kiki\\Article':
                     $article->reset();
                     $article->setObjectId($o->object_id);
                     $article->load();
                     $template = new Template('content/articles-summary');
                     $template->assign('article', $article->templateData());
                     $this->content .= $template->fetch();
                     break;
                 case 'SocialUpdate':
                 case 'Kiki\\SocialUpdate':
                     $update->reset();
                     $update->setObjectId($o->object_id);
                     $update->load();
                     $template = new Template('content/socialupdates-summary');
                     $template->assign('update', $update->templateData());
                     $this->content .= $template->fetch();
                     break;
                 default:
             }
         }
         $this->content .= $paging->html();
     }
 }
예제 #7
0
파일: account.php 프로젝트: robkaper/kiki
 public function verifyAction()
 {
     $this->status = 200;
     $this->template = 'pages/default';
     $this->title = _("Verify account");
     $template = new \Kiki\Template('content/account-verify');
     $errors = array();
     $warnings = array();
     $user = \Kiki\Core::getUser();
     $token = isset($_GET['token']) ? $_GET['token'] : null;
     if (empty($token)) {
         $errors[] = "Auth token missing.";
     } else {
         // Get user by auth token.
         $verifyUserId = $user->getIdByToken($token);
         if (!$verifyUserId) {
             $errors[] = "Invalid auth token. Auth tokens expire. [Send new verification e-mail]";
         } else {
             $verifyUser = new \Kiki\User($verifyUserId);
             $verifyUser->setIsVerified(true);
             $verifyUser->save();
             if ($user->id() && $user->id() != $verifyUser->id()) {
                 $warnings[] = sprintf("Because you verified account <strong>%s</strong> (%d), you are no longer logged in as <strong>%s</strong> (%d).", $verifyUser->email(), $verifyUser->id(), $user->email(), $user->id());
             } else {
                 Auth::setCookie($verifyUser->id());
                 $user = $verifyUser;
                 \Kiki\Core::setUser($verifyUser);
                 $mainTemplate = \Kiki\Template::getInstance();
                 $mainTemplate->assign('user', $user->templateData());
             }
         }
     }
     $template->assign('warnings', $warnings);
     $template->assign('errors', $errors);
     $this->content = $template->fetch();
     return true;
 }