Added support for post relations
This commit is contained in:
parent
157572d9ca
commit
1714e9e665
8 changed files with 59 additions and 1 deletions
|
@ -20,6 +20,7 @@ thumbHeight=150
|
||||||
thumbStyle=outside
|
thumbStyle=outside
|
||||||
endlessScrollingDefault=1
|
endlessScrollingDefault=1
|
||||||
maxSearchTokens=4
|
maxSearchTokens=4
|
||||||
|
maxRelatedPosts=50
|
||||||
|
|
||||||
[comments]
|
[comments]
|
||||||
minLength = 5
|
minLength = 5
|
||||||
|
@ -65,6 +66,8 @@ editPostSafety.all=moderator
|
||||||
editPostTags=registered
|
editPostTags=registered
|
||||||
editPostThumb=moderator
|
editPostThumb=moderator
|
||||||
editPostSource=moderator
|
editPostSource=moderator
|
||||||
|
editPostRelations.own=registered
|
||||||
|
editPostRelations.all=moderator
|
||||||
hidePost.own=moderator
|
hidePost.own=moderator
|
||||||
hidePost.all=moderator
|
hidePost.all=moderator
|
||||||
deletePost.own=moderator
|
deletePost.own=moderator
|
||||||
|
|
|
@ -16,6 +16,7 @@ embed {
|
||||||
background: url('../img/bk-swf.png') lemonchiffon;
|
background: url('../img/bk-swf.png') lemonchiffon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#sidebar .relations ul,
|
||||||
#sidebar .tags ul {
|
#sidebar .tags ul {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
@ -56,6 +56,7 @@ class Bootstrap
|
||||||
$this->context->transport->errorMessage = rtrim($e->getMessage(), '.') . '.';
|
$this->context->transport->errorMessage = rtrim($e->getMessage(), '.') . '.';
|
||||||
$this->context->transport->errorHtml = TextHelper::parseMarkdown($this->context->transport->errorMessage, true);
|
$this->context->transport->errorHtml = TextHelper::parseMarkdown($this->context->transport->errorMessage, true);
|
||||||
$this->context->transport->exception = $e;
|
$this->context->transport->exception = $e;
|
||||||
|
$this->context->transport->queries = array_map(function($x) { return preg_replace('/\s+/', ' ', $x); }, queryLogger()->getLogs());
|
||||||
$this->context->transport->success = false;
|
$this->context->transport->success = false;
|
||||||
$this->context->viewName = 'error-exception';
|
$this->context->viewName = 'error-exception';
|
||||||
(new \Chibi\View())->renderFile($this->context->layoutName);
|
(new \Chibi\View())->renderFile($this->context->layoutName);
|
||||||
|
|
|
@ -407,7 +407,28 @@ class PostController
|
||||||
$edited = true;
|
$edited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* relations */
|
||||||
|
$suppliedRelations = InputHelper::get('relations');
|
||||||
|
if ($suppliedRelations !== null)
|
||||||
|
{
|
||||||
|
PrivilegesHelper::confirmWithException(Privilege::EditPostRelations, PrivilegesHelper::getIdentitySubPrivilege($post->uploader));
|
||||||
|
$relatedIds = array_filter(preg_split('/\D/', $suppliedRelations));
|
||||||
|
$relatedPosts = [];
|
||||||
|
foreach ($relatedIds as $relatedId)
|
||||||
|
{
|
||||||
|
if ($relatedId == $post->id)
|
||||||
|
continue;
|
||||||
|
if (count($relatedPosts) > $this->config->browsing->maxRelatedPosts)
|
||||||
|
throw new SimpleException('Too many related posts (maximum: ' . $this->config->browsing->maxRelatedPosts . ')');
|
||||||
|
$relatedPosts []= Model_Post::locate($relatedId);
|
||||||
|
}
|
||||||
|
$post->via('crossref')->sharedPost = $relatedPosts;
|
||||||
|
}
|
||||||
|
|
||||||
R::store($post);
|
R::store($post);
|
||||||
|
|
||||||
|
|
||||||
$this->context->transport->success = true;
|
$this->context->transport->success = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -551,7 +572,6 @@ class PostController
|
||||||
{
|
{
|
||||||
$post = Model_Post::locate($id);
|
$post = Model_Post::locate($id);
|
||||||
R::preload($post, [
|
R::preload($post, [
|
||||||
'favoritee' => 'user',
|
|
||||||
'uploader' => 'user',
|
'uploader' => 'user',
|
||||||
'tag',
|
'tag',
|
||||||
'comment',
|
'comment',
|
||||||
|
|
|
@ -10,6 +10,7 @@ class Privilege extends Enum
|
||||||
const EditPostTags = 7;
|
const EditPostTags = 7;
|
||||||
const EditPostThumb = 8;
|
const EditPostThumb = 8;
|
||||||
const EditPostSource = 26;
|
const EditPostSource = 26;
|
||||||
|
const EditPostRelations = 30;
|
||||||
const HidePost = 9;
|
const HidePost = 9;
|
||||||
const DeletePost = 10;
|
const DeletePost = 10;
|
||||||
const FeaturePost = 25;
|
const FeaturePost = 25;
|
||||||
|
|
10
src/Upgrades/Upgrade3.sql
Normal file
10
src/Upgrades/Upgrade3.sql
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
CREATE TABLE crossref
|
||||||
|
(
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
post_id INTEGER,
|
||||||
|
post2_id INTEGER,
|
||||||
|
FOREIGN KEY(post_id) REFERENCES post(id) ON DELETE CASCADE ON UPDATE SET NULL,
|
||||||
|
FOREIGN KEY(post2_id) REFERENCES post(id) ON DELETE CASCADE ON UPDATE SET NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_fk_crossref_post_id ON crossref(post_id);
|
||||||
|
CREATE INDEX idx_fk_crossref_post2_id ON crossref(post2_id);
|
|
@ -27,6 +27,13 @@
|
||||||
</div>
|
</div>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
|
<?php if (PrivilegesHelper::confirm(Privilege::EditPostRelations, PrivilegesHelper::getIdentitySubPrivilege($this->context->transport->post->uploader))): ?>
|
||||||
|
<div class="thumb">
|
||||||
|
<label class="left" for="relations">Relations:</label>
|
||||||
|
<div class="input-wrapper"><input type="text" name="relations" id="relations" placeholder="id1,id2,…" value="<?php echo join(',', array_map(function($post) { return $post->id; }, $this->context->transport->post->via('crossref')->sharedPost)) ?>"/></div>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
<?php if (PrivilegesHelper::confirm(Privilege::EditPostThumb, PrivilegesHelper::getIdentitySubPrivilege($this->context->transport->post->uploader))): ?>
|
<?php if (PrivilegesHelper::confirm(Privilege::EditPostThumb, PrivilegesHelper::getIdentitySubPrivilege($this->context->transport->post->uploader))): ?>
|
||||||
<div class="thumb">
|
<div class="thumb">
|
||||||
<label class="left" for="thumb">Thumb:</label>
|
<label class="left" for="thumb">Thumb:</label>
|
||||||
|
|
|
@ -132,6 +132,21 @@
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<?php if (count($this->context->transport->post->via('crossref')->sharedPost)): ?>
|
||||||
|
<div class="relations unit">
|
||||||
|
<h1>related</h1>
|
||||||
|
<ul>
|
||||||
|
<?php foreach ($this->context->transport->post->via('crossref')->sharedPost as $relatedPost): ?>
|
||||||
|
<li>
|
||||||
|
<a href="<?php echo \Chibi\UrlHelper::route('post', 'view', ['id' => $relatedPost->id]) ?>">
|
||||||
|
@<?php echo $relatedPost->id ?>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<?php endif ?>
|
||||||
|
|
||||||
<div class="unit options">
|
<div class="unit options">
|
||||||
<h1>options</h1>
|
<h1>options</h1>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue