欢迎各位兄弟 发布技术文章
这里的技术是共享的
<?php | |
use Phphub\Core\CreatorListener; | |
use Phphub\Forms\TopicCreationForm; | |
class TopicsController extends \BaseController implements CreatorListener | |
{ | |
protected $topic; | |
public function __construct(Topic $topic) | |
{ | |
parent::__construct(); | |
$this->beforeFilter('auth', ['except' => ['index', 'show']]); | |
$this->topic = $topic; | |
} | |
public function index() | |
{ | |
$filter = $this->topic->present()->getTopicFilter(); | |
$topics = $this->topic->getTopicsWithFilter($filter); | |
$nodes = Node::allLevelUp(); | |
$links = Link::remember(1440)->get(); | |
return View::make('topics.index', compact('topics', 'nodes', 'links')); | |
} | |
public function create() | |
{ | |
$node = Node::find(Input::get('node_id')); | |
$nodes = Node::allLevelUp(); | |
return View::make('topics.create_edit', compact('nodes', 'node')); | |
} | |
public function store() | |
{ | |
return App::make('Phphub\Creators\TopicCreator')->create($this, Input::except('_token')); | |
} | |
public function show($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$replies = $topic->getRepliesWithLimit(Config::get('phphub.replies_perpage')); | |
$node = $topic->node; | |
$nodeTopics = $topic->getSameNodeTopics(); | |
$topic->increment('view_count', 1); | |
return View::make('topics.show', compact('topic', 'replies', 'nodeTopics', 'node')); | |
} | |
public function edit($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$nodes = Node::allLevelUp(); | |
$node = $topic->node; | |
$topic->body = $topic->body_original; | |
return View::make('topics.create_edit', compact('topic', 'nodes', 'node')); | |
} | |
public function append($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$markdown = new Markdown; | |
$content = $markdown->convertMarkdownToHtml(Input::get('content')); | |
$append = Append::create(['topic_id' => $topic->id, 'content' => $content]); | |
App::make('Phphub\Notification\Notifier')->newAppendNotify(Auth::user(), $topic, $append); | |
Flash::success(lang('Operation succeeded.')); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function update($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$data = Input::only('title', 'body', 'node_id'); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$markdown = new Markdown; | |
$data['body_original'] = $data['body']; | |
$data['body'] = $markdown->convertMarkdownToHtml($data['body']); | |
$data['excerpt'] = Topic::makeExcerpt($data['body']); | |
// Validation | |
App::make('Phphub\Forms\TopicCreationForm')->validate($data); | |
$topic->update($data); | |
Flash::success(lang('Operation succeeded.')); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
/** | |
* ---------------------------------------- | |
* User Topic Vote function | |
* ---------------------------------------- | |
*/ | |
public function upvote($id) | |
{ | |
$topic = Topic::find($id); | |
App::make('Phphub\Vote\Voter')->topicUpVote($topic); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function downvote($id) | |
{ | |
$topic = Topic::find($id); | |
App::make('Phphub\Vote\Voter')->topicDownVote($topic); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
/** | |
* ---------------------------------------- | |
* Admin Topic Management | |
* ---------------------------------------- | |
*/ | |
public function recomend($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$topic->is_excellent = (!$topic->is_excellent); | |
$topic->save(); | |
Flash::success(lang('Operation succeeded.')); | |
Notification::notify('topic_mark_excellent', Auth::user(), $topic->user, $topic); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function wiki($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$topic->is_wiki = (!$topic->is_wiki); | |
$topic->save(); | |
Flash::success(lang('Operation succeeded.')); | |
Notification::notify('topic_mark_wiki', Auth::user(), $topic->user, $topic); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function pin($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
($topic->order > 0) ? $topic->decrement('order', 1) : $topic->increment('order', 1); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function sink($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
($topic->order >= 0) ? $topic->decrement('order', 1) : $topic->increment('order', 1); | |
return Redirect::route('topics.show', $topic->id); | |
} | |
public function destroy($id) | |
{ | |
$topic = Topic::findOrFail($id); | |
$this->authorOrAdminPermissioinRequire($topic->user_id); | |
$topic->delete(); | |
Flash::success(lang('Operation succeeded.')); | |
return Redirect::route('topics.index'); | |
} | |
public function uploadImage() | |
{ | |
if ($file = Input::file('file')) { | |
$allowed_extensions = ["png", "jpg", "gif"]; | |
if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) { | |
return ['error' => 'You may only upload png, jpg or gif.']; | |
} | |
$fileName = $file->getClientOriginalName(); | |
$extension = $file->getClientOriginalExtension() ?: 'png'; | |
$folderName = 'uploads/images/' . date("Ym", time()) .'/'.date("d", time()) .'/'. Auth::user()->id; | |
$destinationPath = public_path() . '/' . $folderName; | |
$safeName = str_random(10).'.'.$extension; | |
$file->move($destinationPath, $safeName); | |
// If is not gif file, we will try to reduse the file size | |
if ($file->getClientOriginalExtension() != 'gif') { | |
// open an image file | |
$img = Image::make($destinationPath . '/' . $safeName); | |
// prevent possible upsizing | |
$img->resize(1440, null, function ($constraint) { | |
$constraint->aspectRatio(); | |
$constraint->upsize(); | |
}); | |
// finally we save the image as a new file | |
$img->save(); | |
} | |
$data['filename'] = getUserStaticDomain() . $folderName .'/'. $safeName; | |
SiteStatus::newImage(); | |
} else { | |
$data['error'] = 'Error while uploading file'; | |
} | |
return $data; | |
} | |
/** | |
* ---------------------------------------- | |
* CreatorListener Delegate | |
* ---------------------------------------- | |
*/ | |
public function creatorFailed($errors) | |
{ | |
return Redirect::to('/'); | |
} | |
public function creatorSucceed($topic) | |
{ | |
Flash::success(lang('Operation succeeded.')); | |
return Redirect::route('topics.show', array($topic->id)); | |
} | |
} |