2013-10-05 12:55:03 +02:00
|
|
|
<?php
|
2013-10-05 21:24:20 +02:00
|
|
|
class PostController
|
2013-10-05 12:55:03 +02:00
|
|
|
{
|
2013-10-07 00:44:17 +02:00
|
|
|
public function workWrapper($callback)
|
|
|
|
{
|
|
|
|
$this->context->stylesheets []= 'jquery.tagit.css';
|
|
|
|
$this->context->scripts []= 'jquery.tagit.js';
|
|
|
|
$callback();
|
|
|
|
}
|
|
|
|
|
2013-10-05 12:55:03 +02:00
|
|
|
/**
|
2013-10-05 19:24:08 +02:00
|
|
|
* @route /posts
|
|
|
|
* @route /posts/{query}
|
|
|
|
* @validate query .*
|
2013-10-05 12:55:03 +02:00
|
|
|
*/
|
2013-10-05 19:24:08 +02:00
|
|
|
public function listAction($query = null)
|
2013-10-05 12:55:03 +02:00
|
|
|
{
|
2013-10-05 22:52:55 +02:00
|
|
|
#redirect requests in form of /posts/?query=... to canonical address
|
|
|
|
$formQuery = InputHelper::get('query');
|
|
|
|
if (!empty($formQuery))
|
|
|
|
{
|
|
|
|
$url = \Chibi\UrlHelper::route('post', 'list', ['query' => $formQuery]);
|
|
|
|
\Chibi\UrlHelper::forward($url);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-10-05 21:22:28 +02:00
|
|
|
$this->context->subTitle = 'browsing posts';
|
2013-10-05 22:52:55 +02:00
|
|
|
$this->context->searchQuery = $query;
|
2013-10-05 19:24:08 +02:00
|
|
|
throw new Exception('Not implemented');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @route /post/upload
|
|
|
|
*/
|
|
|
|
public function uploadAction()
|
|
|
|
{
|
2013-10-07 00:44:17 +02:00
|
|
|
$this->context->stylesheets []= 'upload.css';
|
|
|
|
$this->context->scripts []= 'upload.js';
|
2013-10-05 21:22:28 +02:00
|
|
|
$this->context->subTitle = 'upload';
|
2013-10-07 00:44:17 +02:00
|
|
|
|
|
|
|
PrivilegesHelper::confirmWithException($this->context->user, Privilege::UploadPost);
|
|
|
|
|
|
|
|
if (isset($_FILES['file']))
|
|
|
|
{
|
|
|
|
$suppliedSafety = intval(InputHelper::get('safety'));
|
|
|
|
if (!in_array($suppliedSafety, PostSafety::getAll()))
|
|
|
|
throw new SimpleException('Invalid safety type "' . $suppliedSafety . '"');
|
|
|
|
|
|
|
|
$suppliedTags = InputHelper::get('tags');
|
|
|
|
$suppliedTags = preg_split('/[,;\s+]/', $suppliedTags);
|
|
|
|
$suppliedTags = array_filter($suppliedTags);
|
|
|
|
$suppliedTags = array_unique($suppliedTags);
|
|
|
|
foreach ($suppliedTags as $tag)
|
|
|
|
if (!preg_match('/^\w+$/i', $tag))
|
|
|
|
throw new SimpleException('Invalid tag "' . $tag . '"');
|
|
|
|
|
|
|
|
$suppliedFile = $_FILES['file'];
|
|
|
|
|
|
|
|
switch ($suppliedFile['type'])
|
|
|
|
{
|
|
|
|
case 'image/gif':
|
|
|
|
case 'image/png':
|
|
|
|
case 'image/jpeg':
|
|
|
|
$postType = PostType::Image;
|
|
|
|
break;
|
|
|
|
case 'application/x-shockwave-flash':
|
|
|
|
$postType = PostType::Flash;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
throw new SimpleException('Invalid file type "' . $suppliedFile['type'] . '"');
|
|
|
|
}
|
|
|
|
|
|
|
|
//todo: find out duplicate files
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
$name = md5(mt_rand() . uniqid());
|
|
|
|
$path = $this->config->main->filesPath . DIRECTORY_SEPARATOR . $name;
|
|
|
|
}
|
|
|
|
while (file_exists($path));
|
|
|
|
|
|
|
|
$dbTags = [];
|
|
|
|
foreach ($suppliedTags as $tag)
|
|
|
|
{
|
|
|
|
$dbTag = R::findOne('tag', 'name = ?', [$tag]);
|
|
|
|
if (!$dbTag)
|
|
|
|
{
|
|
|
|
$dbTag = R::dispense('tag');
|
|
|
|
$dbTag->name = $tag;
|
|
|
|
R::store($dbTag);
|
|
|
|
}
|
|
|
|
$dbTags []= $dbTag;
|
|
|
|
}
|
|
|
|
|
|
|
|
$dbPost = R::dispense('post');
|
|
|
|
$dbPost->type = $postType;
|
|
|
|
$dbPost->name = $name;
|
|
|
|
$dbPost->mimeType = $suppliedFile['type'];
|
|
|
|
$dbPost->safety = $suppliedSafety;
|
|
|
|
$dbPost->sharedTag = $dbTags;
|
|
|
|
|
|
|
|
move_uploaded_file($suppliedFile['tmp_name'], $path);
|
|
|
|
R::store($dbPost);
|
|
|
|
|
|
|
|
//todo: generate thumbnail
|
|
|
|
|
|
|
|
$this->context->transport->success = true;
|
|
|
|
}
|
2013-10-05 19:24:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @route /post/{id}
|
|
|
|
*/
|
|
|
|
public function showAction($id)
|
|
|
|
{
|
2013-10-05 21:22:28 +02:00
|
|
|
$this->context->subTitle = 'showing @' . $id;
|
2013-10-05 19:24:08 +02:00
|
|
|
throw new Exception('Not implemented');
|
2013-10-05 12:55:03 +02:00
|
|
|
}
|
2013-10-05 22:52:55 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @route /favorites
|
|
|
|
*/
|
|
|
|
public function favoritesAction()
|
|
|
|
{
|
|
|
|
$this->listAction('favmin:1');
|
|
|
|
}
|
2013-10-05 12:55:03 +02:00
|
|
|
}
|