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>"; } } }
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; }
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; }
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(); } }
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; }
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(); } }
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; }