Created
September 10, 2016 01:24
-
-
Save robertholf/a6b4cbb393cd1e371f6a53af477e3883 to your computer and use it in GitHub Desktop.
Laravel 4 (BizGym.com)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Saas\Taxonomy\Components\Models\Providers; | |
use Mockery as m; | |
use \Saas\Taxonomy\Components\Models\Eloquent\Entities\QuestionMetaModel as QuestionModel; | |
use \Saas\Taxonomy\Components\Models\Eloquent\Providers\QuestionMetaProvider as QuestionProvider; | |
use Illuminate\Database\Eloquent\Builder as QueryBuilder; | |
use Illuminate\Database\Eloquent\Collection; | |
use Illuminate\Support\Facades\Event; | |
use \PHPUnit_Framework_TestCase; | |
class QuestionMetaProviderTest extends PHPUnit_Framework_TestCase | |
{ | |
public function tearDown() | |
{ | |
m::close(); | |
} | |
public function testFindAll() | |
{ | |
$mockRow = array( | |
'id' => 1, | |
'target_id' => 1, | |
'locale_id' => 1, | |
'title' => 'question', | |
'tip' => 'tip', | |
'example' => 'example', | |
'quote' => 'quote' | |
); | |
$collection = m::mock('Collection'); | |
$collection->shouldReceive('all')->andReturn(array($mockRow)); | |
$query = m::mock('QueryBuilder'); | |
$query->shouldReceive('get')->andReturn($collection); | |
$model = m::mock('QuestionModel'); | |
$model->shouldReceive('newQuery')->once()->andReturn($query); | |
$provider = new QuestionProvider($model); | |
$result = $provider->findAll(); | |
$this->assertEquals($mockRow, $result[0]); | |
} | |
public function testFindByLocale() | |
{ | |
$mockRow = array( | |
'id' => 1, | |
'target_id' => 1, | |
'locale_id' => 1, | |
'title' => 'question', | |
'tip' => 'tip', | |
'example' => 'example', | |
'quote' => 'quote' | |
); | |
$query = m::mock('QueryBuilder'); | |
$query->shouldReceive('leftJoin')->once()->andReturn($query); | |
$query->shouldReceive('where')->twice()->andReturn($query); | |
$query->shouldReceive('first')->once()->andReturn($mockRow); | |
$model = m::mock('QuestionModel'); | |
$model->shouldReceive('newQuery')->once()->andReturn($query); | |
$provider = new QuestionProvider($model); | |
$result = $provider->findByLocale(1); | |
$this->assertEquals($mockRow, $result); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Created by PhpStorm. | |
* User: nicholasjohns | |
* Date: 12/9/13 | |
* Time: 10:10 AM | |
*/ | |
use Illuminate\Filesystem\Filesystem; | |
//This is a bad design, rethink and refactor after launch when | |
//this modules intent is more clear or redesigned. | |
class TaxonomyController extends BaseController | |
{ | |
public function getIndex($setSlug) | |
{ | |
} | |
public function getDetail($setId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findById($setId); | |
if ( ! $set) App::abort(404); | |
return $this->getSetDashboard($set->slug); | |
} | |
public function getSetDashboard($setSlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
if ( ! $set) App::abort(404); | |
$categories = Taxonomy::getComponentsInstance()->getCategoryProvider()->findBaseBySetWithLocale($set->set_id, $set->locale); | |
$completion = Taxonomy::calculateSetCompletion($brand->id, $set->id); | |
$this->viewData = array( | |
'title' => "{$set->title} Dashboard", | |
'set' => $set, | |
'user' => $user, | |
'brand' => $brand, | |
'categories' => $categories, | |
'products' => Marketplace::getProducts('active'), | |
'completion' => $completion | |
); | |
$this->layout = "taxonomy.dashboard"; | |
$this->setupLayout(); | |
} | |
public function getSetCategory($setSlug, $categorySlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$category = $categoryProvider->findBySlugWithLocale($categorySlug, $set->locale); | |
$subcategories = $categoryProvider->findSubcategoriesWithLocale($category->id, $set->locale); | |
if ($subcategories->count() == 1) { | |
$subcategory = $subcategories->first(); | |
return Redirect::to("app/{$set->slug}/{$subcategory->slug}/edit"); | |
} | |
$completion = Taxonomy::calculateSetCompletion($brand->id, $set->id); | |
$active_badges = Badge::activeBadges(); | |
$awarded_badges = $user->getBadges(); | |
$this->viewData = array( | |
'title' => "{$set->title} Categories", | |
'set' => $set, | |
'category' => $category, | |
'subcategories' => $subcategories, | |
'user' => $user, | |
'brand' => $brand, | |
'headerCompletion' => $completion, | |
'active_badges' => $active_badges, | |
'awarded_badges' => $awarded_badges | |
); | |
$this->layout = "taxonomy.categories"; | |
$this->setupLayout(); | |
} | |
public function getSetCategories($setSlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$categories = $categoryProvider->findBaseBySetWithLocale($set->id, $set->locale); | |
$this->viewData = array( | |
'title' => "{$set->title} Categories", | |
'set' => $set, | |
'categories' => $categories, | |
'user' => $user, | |
'brand' => $brand, | |
); | |
$this->layout = "taxonomy.categories"; | |
$this->setupLayout(); | |
} | |
public function getSetQuestions($setSlug, $categorySlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$sub_category = Taxonomy::getComponentsInstance()->getCategoryProvider()->findSubcategoriesWithUnresponseAnswer($brand->id); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$category = $categoryProvider->findBySlugWithLocale($categorySlug, $set->locale); | |
if ( ! $category) App::abort(404); | |
$questions = Taxonomy::buildQuestions($category->id, $brand->id, $user->id, $user->getLanguage()); | |
$completion = Taxonomy::calculateSetCompletion($brand->id, $set->id); | |
$categories = Taxonomy::getComponentsInstance()->getCategoryProvider()->findBaseBySetWithLocale($set->set_id, $set->locale); | |
$active_badges = Badge::activeBadges(); | |
$awarded_badges = $user->getBadges(); | |
$this->viewData = array( | |
'title' => "{$category->title} Questions", | |
'set' => $set, | |
'category' => $category, | |
'questions' => $questions, | |
'user' => $user, | |
'brand' => $brand, | |
'headerCompletion' => $completion, | |
'categories' => $categories, | |
'active_badges' => $active_badges, | |
'awarded_badges' => $awarded_badges | |
); | |
$this->layout = 'taxonomy.questions'; | |
$this->setupLayout(); | |
} | |
public function postAnswerCollaboration($responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$qaResponseProvider = Taxonomy::getComponentsInstance()->getResponseProvider(); | |
$response = $qaResponseProvider->findByIdWithRevision($responseId, $revisionId); | |
$qaProvider = Taxonomy::getComponentsInstance()->getAnswerProvider(); | |
$fields = Input::get('payload'); | |
$revision_title = Input::get('revision_title'); | |
$payload = json_decode($fields, true); | |
$v = Validator::make(array('revision_title' => $revision_title), array( | |
'revision_title' => 'required|min:3|max:100|unique:taxonomy_question_response_revisions,title,NULL,id,response_id,'.$responseId, | |
)); | |
if($v->fails()) { | |
Session::flash('errors', $v->errors()); | |
return Response::json(array('status' => 'error', 'message' => 'validation errors')); | |
} | |
$answers = array(); | |
foreach($payload as $key => $answer) { | |
$breakdown = explode('-', $answer['name']); | |
$index = array_shift($breakdown); | |
$value = $answer['value']; | |
if(! empty($breakdown)) { | |
$answer_id = array_shift($breakdown); | |
$answers[$index][$answer_id] = $value; | |
} else { | |
$answers[$index] = $value; | |
} | |
} | |
$keys = array_keys($answers); | |
$key = array_shift($keys); | |
$value = array_shift($answers); | |
$answer = $qaProvider->findById($key); | |
if(empty($answer)) { | |
return Response::json(array('status' => 'error', 'message' => 'unexpected error')); | |
} | |
$rules = array(); | |
$answer_rule = json_decode($answer->rule, true); | |
if($answer->element == 'input' || $answer->element == 'textarea') { | |
if(!empty($answer_rule)) { | |
$rules[$key] = "max: {$answer_rule['max_length']}"; | |
} | |
} | |
if(!empty($rules)) { | |
$v = Validator::make(array($key => $value), $rules); | |
if($v->fails()) { | |
Session::flash('errors', $v->errors()); | |
return Response::json(array('status' => 'error', 'message' => 'validation errors')); | |
} | |
} | |
$revision = array( | |
'revision' => $response->revision->revision + 1, | |
'user_id' => $user->id, | |
'response' => is_array($value) ? json_encode($value) : $value, | |
'active' => 0, | |
'archive' => 0, | |
'lock' => 0, | |
'title' => $revision_title, | |
'field' => $response->revision->field | |
); | |
$revision_id = $qaResponseProvider->createRevision($response, $revision); | |
Session::flash('message', 'Created revision!'); | |
return Response::json(array('status' => 'success', 'response_id' => $responseId, 'revision_id' => $revision_id->id)); | |
} | |
public function postAnswerQuestions($setSlug, $categorySlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$category = $categoryProvider->findBySlugWithLocale($categorySlug, $set->locale); | |
if ( ! $category) App::abort(404); | |
$qaProvider = Taxonomy::getComponentsInstance()->getAnswerProvider(); | |
$qaResponseProvider = Taxonomy::getComponentsInstance()->getResponseProvider(); | |
$fields = Input::get('answer', array()); | |
if(empty($fields)) { | |
return Redirect::back()->with('error', 'You did not submit any answers')->withInput(); | |
} | |
$allowMultipleResponses = $category->allow_multi_response; | |
$i = 0; | |
$isChanged = false; | |
foreach($fields as $key => $value) { | |
$i++; | |
$answer = $qaProvider->findById($key); | |
if(empty($answer)) { | |
continue; | |
} | |
$_value = is_array($value) ? json_encode($value) : $value; | |
$rules = array(); | |
$answer_rule = json_decode($answer->rule, true); | |
if($answer->element == 'input' || $answer->element == 'textarea') { | |
if(!empty($answer_rule)) { | |
$rules["answer[{$i}]"] = "max: {$answer_rule['max_length']}"; | |
} | |
} | |
if(!empty($rules)) { | |
$v = Validator::make(array("answer[{$i}]" => $value), $rules); | |
if($v->fails()) { | |
return Redirect::back()->withErrors($v)->withInput(); | |
} | |
} | |
$answer_attributes = array( | |
'response' => array( | |
'brand_id' => $brand->id, | |
'answer_id' => $answer->id, | |
'question_id' => $answer->target_id | |
), | |
'revision' => array( | |
'user_id' => $user->id, | |
'response' => $_value, | |
'field' => strtolower($answer->title) . '-' . ($key + 1), | |
'active' => 1, | |
), | |
); | |
$isExists = $qaResponseProvider->findByBrandIdAndAnswerId($answer_attributes['response']['brand_id'], $answer_attributes['response']['answer_id']); | |
if (!$isExists && !empty($value)) { | |
$response = $qaResponseProvider->createResponse($answer_attributes['response'], $answer_attributes['revision']); | |
$isChanged = true; | |
} else if($isExists) { | |
if (empty($value)) { | |
$isExists->revisions()->delete(); | |
$isExists->delete(); | |
} else { | |
if ($_value == $isExists->response) { | |
continue; | |
} else { | |
$activeRevision = $qaResponseProvider->findActiveRevision($answer_attributes['response']['brand_id'], $answer_attributes['response']['answer_id']); | |
$qaResponseProvider->updateRevision($isExists, $activeRevision->revision_id, $answer_attributes['revision']); | |
$isChanged = true; | |
} | |
} | |
} | |
} | |
if ($isChanged == true) { | |
if (! $user->getBadge('contribute-biz-data')) { | |
Badge::rewardBadge('contribute-biz-data', $user->id); | |
} | |
} | |
$isContinue = Input::get('continue'); | |
if ($isContinue == 'true') { | |
/* sibling subcategory */ | |
$sub_category = Taxonomy::getComponentsInstance()->getCategoryProvider()->findSubcategoriesWithoutRevision($brand->id, $category->parent_id, $set->id, $category->cate_id)->first(); | |
if (isset($sub_category)) { | |
return Redirect::to("app/{$set->slug}/{$sub_category->slug}/edit")->with('message', "{$category->title} Answered!"); | |
} else { | |
/* sub category in other category */ | |
$sub_category = Taxonomy::getComponentsInstance()->getCategoryProvider()->findSubcategoriesWithoutRevision($brand->id, null, $set->id, $category->cate_id)->first(); | |
if (isset($sub_category)) { | |
return Redirect::to("app/{$set->slug}/{$sub_category->slug}/edit")->with('message', "{$category->title} Answered!"); | |
} else { | |
$unCompletedResponseCategories = Taxonomy::getComponentsInstance()->getCategoryProvider()->findSubcategoriesWithUnresponseAnswer($brand->id, null, $set->id); | |
if ($unCompletedResponseCategories->isEmpty()) { | |
return Redirect::to("app/{$set->slug}")->with('message', "You have reached the end of the {$set->slug} questions!"); | |
} else { | |
$categories = array(); | |
foreach ($unCompletedResponseCategories as $cate) { | |
$categories[] = $cate->meta->first()->title; | |
} | |
return Redirect::to("app/{$set->slug}")->with('message', "You still have questions to answer in the following areas: ".implode(', ', $categories)); | |
} | |
} | |
} | |
} | |
return Redirect::back()->with('message', "{$category->title} Answered!"); | |
} | |
public function getQuestionRevisions($setSlug, $categorySlug, $questionSlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$category = $categoryProvider->findBySlugWithLocale($categorySlug, $set->locale); | |
if ( ! $category) App::abort(404); | |
$questionProvider = Taxonomy::getComponentsInstance()->getQuestionProvider(); | |
$question = $questionProvider->findBySlugWithLocale($questionSlug, $set->locale); | |
if ( ! $question) App::abort(404); | |
$completion = Taxonomy::calculateCategoryCompletion($brand->id, $category->id); | |
$responses = Taxonomy::buildQuestionRevisions($brand->id, $question->id); | |
$this->viewData = array( | |
'title' => "{$question->title}", | |
'set' => $set, | |
'category' => $category, | |
'question' => $question, | |
'responses' => $responses, | |
'user' => $user, | |
'brand' => $brand, | |
'headerCompletion' => $completion, | |
); | |
$this->layout = 'taxonomy.revision.all_revisions'; | |
$this->setupLayout(); | |
} | |
public function postCreateRevision($responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$qaResponseProvider = Taxonomy::getComponentsInstance()->getResponseProvider(); | |
$response = $qaResponseProvider->findByIdWithRevision($responseId, $revisionId); | |
$fields = Input::all(); | |
$rules = array( | |
'revision_title' => 'required|min:3|max:100|unique:taxonomy_question_response_revisions,title,NULL,id,response_id,'.$responseId, | |
); | |
$v = Validator::make($fields, $rules); | |
if($v->fails()) { | |
return Redirect::back()->withErrors($v); | |
} | |
$revision = array( | |
'revision' => $response->revision->revision + 1, | |
'user_id' => $user->id, | |
'active' => 0, | |
'archive' => 0, | |
'lock' => 0, | |
'title' => $fields['revision_title'], | |
'field' => $response->revision->field | |
); | |
$shifted = array_shift($fields['answer']); | |
if(is_array($shifted)) { | |
$revision['response'] = json_encode($shifted); | |
} else { | |
$revision['response'] = $shifted; | |
} | |
$result = $qaResponseProvider->createRevision($response, $revision); | |
if(empty($result)) { | |
return Redirect::back()->with('error', 'Unexpected Error :\\'); | |
} | |
return Redirect::back()->with('message', "Revision {$revision['title']} created"); | |
} | |
public function postUpdateRevision($responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$qaResponseProvider = Taxonomy::getComponentsInstance()->getResponseProvider(); | |
$response = $qaResponseProvider->findByIdWithRevision($responseId, $revisionId); | |
$fields = Input::all(); | |
$rules = array( | |
'answer' => 'required', | |
); | |
$v = Validator::make($fields, $rules); | |
if($v->fails()) { | |
return Redirect::back()->withErrors($v); | |
} | |
$revisionAttributes['revision'] = $response->revision->revision + 1; | |
$shifted = array_shift($fields['answer']); | |
if(is_array($shifted)) { | |
$revisionAttributes['response'] = json_encode($shifted); | |
} else { | |
$revisionAttributes['response'] = $shifted; | |
} | |
$result = $qaResponseProvider->updateRevision($response, $revisionId, $revisionAttributes); | |
if(empty($result)) { | |
return Redirect::back()->with('error', 'Unexpected Error :\\'); | |
} | |
return Redirect::back()->with('message', "Revision {$response->revision->title} updated"); | |
} | |
public function postVoteRevision($responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$fields = array('vote' => Input::get('vote')); | |
$v = Validator::make($fields, array('vote' => 'required')); | |
if($v->fails()) { | |
Session::flash('error', 'You did not vote!'); | |
return Response::json(array('status' => 'error'), 400); | |
} | |
$voteProvider = Taxonomy::getVoteInstance(); | |
$result = $voteProvider->vote($responseId, $revisionId, $user->id, $fields['vote']); | |
if(!$result) { | |
Session::flash('error', 'You already voted!'); | |
return Response::json(array('status' => 'You already voted!'), 400); | |
} | |
Session::flash('message', 'Your vote has been cast!'); | |
return Response::json($result->toArray(), 201); | |
} | |
public function postCommentRevision($responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$fields = array( | |
'comment' => Input::get('comment'), | |
'parent_id' => Input::get('parent_id', null), | |
); | |
$rules = array( | |
'comment' => 'required|max:1000', | |
); | |
$v = Validator::make($fields, $rules); | |
if($v->fails()) { | |
return Redirect::back()->withError($v); | |
} | |
$result = Taxonomy::getCommentInstance()->makeComment($revisionId, $user->id, $fields['comment'], $fields['parent_id']); | |
if(empty($result)) { | |
return Redirect::back()->with('error', 'Unexpected Error :\\'); | |
} | |
return Redirect::back()->with('message', 'Comment Added.'); | |
} | |
public function postTaxonomySettings() | |
{ | |
$fields = Input::all(); | |
if($fields['taxonomy_resource_state']) { | |
Session::put('taxonomy_resource_state', ' '); | |
} else { | |
Session::forget('taxonomy_resource_state'); | |
} | |
return Response::json(array('status' => 'success')); | |
} | |
public function getRevisionDetails($setSlug, $categorySlug, $questionSlug, $responseId, $revisionId) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$categoryProvider = Taxonomy::getComponentsInstance()->getCategoryProvider(); | |
$category = $categoryProvider->findBySlugWithLocale($categorySlug, $set->locale); | |
if ( ! $category) App::abort(404); | |
$questionProvider = Taxonomy::getComponentsInstance()->getQuestionProvider(); | |
$question = $questionProvider->findBySlugWithLocale($questionSlug, $set->locale); | |
if ( ! $question) App::abort(404); | |
$completion = Taxonomy::calculateCategoryCompletion($brand->id, $category->id); | |
$response = Taxonomy::buildRevisionDetails($brand->id, $question->id, $responseId, $revisionId); | |
// dd($response); | |
$this->viewData = array( | |
'title' => "{$question->title}", | |
'set' => $set, | |
'category' => $category, | |
'question' => $question, | |
'response' => $response, | |
'user' => $user, | |
'brand' => $brand, | |
'headerCompletion' => $completion, | |
); | |
$this->layout = 'taxonomy.revision.details'; | |
$this->setupLayout(); | |
} | |
public function postExport($setSlug, $categorySlug) | |
{ | |
$user = Auth::user(); | |
if ( ! $user) App::abort(404); | |
// Get from active brand | |
$brand = Brand::find($user->activeBrand()); | |
if ( ! $brand) App::abort(404); | |
$type = Input::get('type'); | |
$subcategories = array(); | |
if ($type == 'all') { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, $user->getLanguage()); | |
if ( ! $set) { | |
$set = Taxonomy::getComponentsInstance()->getSetProvider()->findBySlugWithLocale($setSlug, 'en_US'); | |
} | |
$subcategories = Taxonomy::getComponentsInstance()->getCategoryProvider()->findSubcategoriesBySetWithLocale($set->id, $user->getLanguage()); | |
} else if ($type == 'current') { | |
$subcategories[] = Taxonomy::getComponentsInstance()->getCategoryProvider()->findBySlugWithLocale($categorySlug, $user->getLanguage()); | |
if (empty($subcategories)) { | |
$subcategories[] = Taxonomy::getComponentsInstance()->getCategoryProvider()->findBySlugWithLocale($categorySlug, 'en_US'); | |
} | |
} else { | |
return Response::json(array('error' => 'Invalid type')); | |
} | |
//var_dump($subcategories->toArray());die(); | |
$reportTable = View::make('taxonomy.reports.pdf.export') | |
->with('subcategories', $subcategories) | |
->with('count', count($subcategories)) | |
->with('brand', $brand) | |
->with('type', $type) | |
->with('user', $user); | |
$reportHash = 'taxonomy_report'; | |
$fileName = strtolower($brand->title).'_'.str_replace('-', '_', ($type == 'all' ? 'set_'.$set->slug : 'subcategory_'.$subcategories[0]->slug)).'_'.time(); | |
$this->saveTaxonomyReport($reportHash, $reportTable, $fileName); | |
return Response::json(array('success' => 'OK', 'redirect' => URL::to('taxonomy/report/'.$fileName))); | |
} | |
protected function saveTaxonomyReport($reportHash, $reportTable, $fileName, $type='pdf') | |
{ | |
$fs = new Filesystem(); | |
$reportStorage = app_path().'/storage/views/'; | |
$reportFolder = $reportStorage.$reportHash; | |
if (!$fs->isDirectory($reportFolder)) { | |
$fs->makeDirectory($reportFolder, 0777, true); | |
@chmod($reportFolder, 0777); | |
} | |
if ($type == 'pdf') { | |
$pdf = PHPPdf\Core\FacadeBuilder::create()->setEngineType('pdf')->build(); | |
$report = View::make('taxonomy.reports.pdf.dashboard', array( | |
'table' => preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $reportTable), | |
))->render(); | |
$style = View::make('taxonomy.reports.pdf.style')->render(); | |
$reportTable = $pdf->render($report, $style); | |
} | |
$fs->put($reportStorage.$reportHash.DIRECTORY_SEPARATOR.$fileName.'.'.$type, $reportTable); | |
@chmod($reportStorage.$reportHash.DIRECTORY_SEPARATOR.$type, 0777); | |
} | |
public function showTaxonomyReport($filename) | |
{ | |
$reportHash = 'taxonomy_report'; | |
$filename = $this->getTaxonomyReport($reportHash, $filename); | |
return Response::download((string) $filename, null, array('Content-Type' => 'application/pdf')); | |
} | |
protected function getTaxonomyReport($reportHash, $filename, $type='pdf') | |
{ | |
$fs = new Filesystem(); | |
$reportStorage = app_path().'/storage/views/'; | |
$filename = $reportStorage.$reportHash.DIRECTORY_SEPARATOR.$filename.'.'.$type; | |
return ($type == 'pdf') ? $filename : $fs->get($filename); | |
} | |
/** | |
* Hide Introduction | |
*/ | |
public function getHideIntroduction() | |
{ | |
$user = Auth::user(); | |
$provider = Taxonomy::getIntroductionVisibilityProvider(); | |
$visibility = $provider->findByUser($user->id); | |
if ($visibility) { | |
$visibility->status = 'hidden'; | |
$result = $visibility->save(); | |
} else { | |
$fields = array( | |
'user_id' => $user->id, | |
'status' => 'hidden' | |
); | |
$result = $provider->create($fields); | |
} | |
if ($result) { | |
if (Request::ajax()) { | |
return Response::json(array('success' => 'ok', 'message' => 'BizGenics Data introduction has been hidden.')); | |
} else { | |
return Redirect::back()->with('message', 'BizGenics Data introduction has been hidden.'); | |
} | |
} else { | |
if (Request::ajax()) { | |
return Response::json(array('error' => 'true', 'message' => 'Hide failure.')); | |
} else { | |
return Redirect::back()->with('error', 'Hide failure.'); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment