<?php
namespace App\Controller\Trainings;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Pimcore\Localization\LocaleServiceInterface;
use Pimcore\Model\DataObject\ClassDefinition\Service;
use Pimcore\Model;
use Pimcore\Model\DataObject\Trainings;
use Pimcore\Model\DataObject\TrainingsCategory;
use Pimcore\Model\DataObject\TrainingsFeatured;
use Pimcore\Model\DataObject\TrainingsSpotlight;
use Pimcore\Model\DataObject\Trainingstrending;
use Pimcore\Model\DataObject\Userloyaltyprogram;
use Pimcore\Model\DataObject\Events;
use Pimcore\Model\DataObject\Slider;
use Pimcore\Db;
use Pimcore\Model\DataObject\TrainingsReview;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\ChefSpecial;
use CustomerManagementFrameworkBundle\CustomerProvider\CustomerProviderInterface;
use CustomerManagementFrameworkBundle\ActivityManager\ActivityManagerInterface;
use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
use App\Model\CustomerManagementFramework\Activity\TrainingActivity;
use App\Helper\VideoHelper;
use Pimcore\Model\User\Role;
class TrainingController extends FrontendController
{
protected $factory;
public function __construct(Factory $factory)
{
$this->factory = $factory;
}
/**
* @Route("/maintraining", name="maintraining")
*/
public function trainingAction( Request $request )
{
$categories = new TrainingsCategory\Listing();
$categories->load();
$featuredTraining = new Trainings\Listing();
$featuredTraining->setCondition('is_featured = ?', true);
$featuredTraining->setLimit('1');
$featuredTraining->load();
$ftid = 0;
foreach($featuredTraining as $FeaturedTraining){
$ftid = $FeaturedTraining->getId();
break;}
$trending_training = new Trainingstrending\Listing();
$trending_training->setLimit('1');
$trending_training->load();
$Ttid = 0;
foreach($trending_training as $Trending_training){
$Ttid = $Trending_training->getId();
$TrainingId = $Trending_training->getTrending_training()[0]->getId();
break;}
$uid = $this->get('session')->get('loginUID');
$LikedTrending_Training = new Userloyaltyprogram\Listing();
$LikedTrending_Training->setCondition("op_name = ? and u_id = ? and obj_data__id = ?",['Like',$uid,$TrainingId]);
$LikedTrending_Training->load();
//dd($LikedTrending_Training);
$MostpopularId = [];
$mostpopular = new Trainings\Listing();
$mostpopular->setCondition("o_id != ? and o_id != ?",[$ftid,$Ttid]);
$mostpopular->load();
foreach($mostpopular as $Mostpopular){
$MostpopularId[] = $Mostpopular->getId();
}
$uid = $this->get('session')->get('loginUID');
$LikedPopular_Training = new Userloyaltyprogram\Listing();
$LikedPopular_Training->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$MostpopularId]);
$LikedPopular_Training->load();
$LikedPopular_TrainingId = [];
foreach($LikedPopular_Training as $likedPopular_Training){
$LikedPopular_TrainingId[] = $likedPopular_Training->getObj_id();
}
$trainingsSpotlight = new TrainingsSpotlight\Listing();
$trainingsSpotlight->load();
$chefVideo = new Trainings\Listing();
$chefVideo->setCondition("chef_recomended = ?",['1']);
$chefVideo->load();
$chefIds = [];
foreach($chefVideo as $ChefVideo){
$chefIds[]=$ChefVideo->getId();
}
$uid = $this->get('session')->get('loginUID');
$LikedChef_Training = new Userloyaltyprogram\Listing();
$LikedChef_Training->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$chefIds]);
$LikedChef_Training->load();
$LikedChef_TrainingId =[];
foreach($LikedChef_Training as $likedChef_Training){
$LikedChef_TrainingId[] = $likedChef_Training->getObj_id();
}
$randomVideo = new Trainings\Listing();
$randomVideo->load();
$ulimit = $randomVideo->getCount()-1;
$num = rand(0, (int)$ulimit );
$roles = new Role\Listing();
$roles->setOrderKey('name');
$roles->setOrder("ASC");
$roles->load();
$featured_events = new Events\Listing();
$featured_events->setCondition('featured IN (?)','1');
// $featured_events->addConditionParam('date_time >= ?',time());
$featured_events->setLimit(1);
$featured_events->load();
$F_event_id = 0;
foreach($featured_events as $Featured_events){
$F_event_id=$Featured_events->getId();
break;}
// dd($F_event_id);
$uid = $this->get('session')->get('loginUID');
$LikedEventfeature = new Userloyaltyprogram\Listing();
$LikedEventfeature->setCondition("op_name = ? and u_id = ? and obj_data__id = ?",['Like',$uid,$F_event_id]);
$LikedEventfeature->load();
//dd(count($LikedEventfeature));
//dd($LikedEventfeature);
return $this->render('Trainings/training.html.twig',
[
//'videos' => $video,
// 'videoPop' => $videoPop,
'categories' => $categories,
'featuredTraining' => $FeaturedTraining,
'mostpopular' => $mostpopular,
'trending' => $Trending_training,
'trainingsSpotlight' => $trainingsSpotlight,
'chef_pick' => $chefVideo,
'titleVideo' => $randomVideo->getData()[$num],
'roles' => $roles,
'Featured_events' => $Featured_events,
'LikedEventfeature' => $LikedEventfeature,
'LikedTrending_Training' => $LikedTrending_Training,
'LikedChef_TrainingId' => $LikedChef_TrainingId,
'LikedPopular_TrainingId' => $LikedPopular_TrainingId,
]
);
}
/**
* @Route("/training_detail", name="training_detail")
*/
public function trainingDetailAction(
Request $request,
CustomerProviderInterface $customerProvider,
ActivityManagerInterface $activityManager
)
{
$locate = $request->getLocale();
$url = $request->get('turl');
//$url = "/" . $url;
$ref = $request->server->get('REDIRECT_URL');
$this->get('session')->set('refURL', $ref);
//$prd = Db::get()->fetchAll("SELECT * FROM `object_url_slugs` WHERE slug = '" . $url . "'");
// $slug_id = $prd[0]['objectId'];
$email = $this->get('session')->get('loginUserId');
if(!empty($email)){
$activeCustomer = $customerProvider->getActiveCustomerByEmail($email);
$video = new Trainings\Listing();
$video->setCondition("turl = ?", "$url");
$video->setLimit('1');
$video->load();
$id1 = 0;
foreach($video as $tr){
$id1 = $tr->getId();
break;
}
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_2 = new Userloyaltyprogram\Listing();
$Liked_training_detail_2->setCondition("op_name = ? and u_id = ? and obj_data__id = ?",['Like',$uid,$id1]);
$Liked_training_detail_2->load();
$training_detail_2_id=0;
$training_detail_2_rel_course_id =[];
foreach($video as $videos){
$training_detail_2_id= $videos->getO_id();
$total_training_detail_2_rel_course = count($videos->getRelated_courses());
for($i =0; $i<$total_training_detail_2_rel_course; $i++){
$training_detail_2_rel_course_id[] = $videos->getRelated_courses()[$i]->getId();
}
break;
}
// dd($training_detail_2_rel_course_id);
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_2_rel_course = new Userloyaltyprogram\Listing();
$Liked_training_detail_2_rel_course->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$training_detail_2_rel_course_id]);
$Liked_training_detail_2_rel_course->load();
// dd($Liked_training_detail_2_rel_course);
$Liked_training_detail_2_rel_course_id = [];
foreach($Liked_training_detail_2_rel_course as $liked_training_detail_2_rel_course){
$Liked_training_detail_2_rel_course_id[] = $liked_training_detail_2_rel_course->getObj_id();
}
//dd(count($Liked_training_detail_2_rel_course_id));
$chefVideo = new Trainings\Listing();
$chefVideo->setCondition("chef_recomended = ?",['1']);
$chefVideo->load();
$chef_training_ids = [];
foreach($chefVideo as $hef_training){
$chef_training_ids[] = $hef_training->getId();
}
//dd($chef_training_ids);
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_2_chef_training = new Userloyaltyprogram\Listing();
$Liked_training_detail_2_chef_training->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$chef_training_ids]);
$Liked_training_detail_2_chef_training->load();
//dd($Liked_training_detail_1_chef_training);
$Liked_training_detail_2_chef_training_ids = [];
foreach($Liked_training_detail_2_chef_training as $liked_training_detail_2_chef_training){
$Liked_training_detail_2_chef_training_ids[] = $liked_training_detail_2_chef_training->getObj_id();
}
$tc_id=$tr->getId();
$training = Trainings::getById($id1);
$trainings_reviews = new TrainingsReview\Listing();
$trainings_reviews->setCondition('training_id__id IN (?)', $tc_id);
// Pagination
$limit = 5;
if($request->get('page')){
$page = $request->get('page');
}else{
$page = 0;
}
$start = ($page)*$limit;
$end = $limit;
$trainings_reviews->setOffset($start);
$trainings_reviews->setLimit($end);
$trainings_reviews->load();
$activityManager->trackActivity(new TrainingActivity($activeCustomer, $training));
if ($request->isXmlHttpRequest()) {
return $this->loadMoreComments($trainings_reviews);
}
return $this->render('Trainings/training_detail2.html.twig',
[
'tr' => $tr,
'chef_pick' => $chefVideo,
'trainingcomments' => $trainings_reviews,
'Liked_training_detail_2'=>$Liked_training_detail_2,
'Liked_training_detail_2_rel_course_id'=> $Liked_training_detail_2_rel_course_id,
'Liked_training_detail_2_chef_training_ids'=>$Liked_training_detail_2_chef_training_ids,
]
);
} else {
return $this->redirect('/en/signin');
}
}
/**
* @Route("/training_reviews", name="training_reviews")
*/
public function trainingReviewsAction(Request $request)
{
$success = false;
$trainingurl = $request->get('training_url');
//$trainings = new Trainings\Listing();
$trainings = Trainings::getById($request->get('training_id'));
$Review = new TrainingsReview();
$Review->setKey(strtotime(date('Y-m-d H:i:s')));
$Review->setParent(DataObject\Folder::getByPath('/Trainings_Reviews/'));
$Review->setName($request->get('name'));
$Review->setEmail($request->get('email'));
$Review->setComment($request->get('comments'));
$Review->setRating($request->get('addreviewrating'));
$Review->setTraining_id($trainings);
$Review->setMydate(date('Y-m-d'));
$Review->setPublished(false);
$d = $Review->save();
if($d){
$success = true;
}
//return $this->json(array('success' =>$success));
return $this->redirect('/'.$request->get('training_id').'/training_detail/'.$trainingurl, 301);
}
/**
* @Route("/training_list", name="training_list")
*/
public function trainingListAction(Request $request)
{
$videos = new Trainings\Listing();
$videos->load();
$training_list_all_ids = [];
foreach($videos as $Videos){
$training_list_all_ids[]= $Videos->getId();
}
$uid = $this->get('session')->get('loginUID');
$Liked_training_list = new Userloyaltyprogram\Listing();
$Liked_training_list->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$training_list_all_ids]);
$Liked_training_list->load();
// dd($Liked_training_list);
$Liked_training_list_Ids =[];
foreach($Liked_training_list as $liked_training_list){
$Liked_training_list_Ids[] = $liked_training_list->getObj_id();
}
// dd($training_list_ids);
$chefs = new ChefSpecial\Listing();
$chefs->load();
$train_cat = new TrainingsCategory\Listing();
$train_cat->load();
$childList = array();
foreach ($videos as $video) {
if($video->getChildren()){
$parent_id = $video->getParentId();
if($parent_id > 198){
$childList[] = $video->getChildren();
}
}else{
$childList[] = $video;
}
}
$get_param = $request->query->all();
$category_ids = '';
$chef_ids = '';
$query = '';
$new_type = '';
if(!empty($get_param)){
foreach($get_param as $key => $value){
if($key == 'category_id'){
$category_ids .= str_replace('_',',', $value);
}
if($key == 'query'){
$query = $value;
}
if($key == 'chef'){
$chef_ids .= str_replace('_',',', $value);
}
if($key == 'type'){
$new_type .= str_replace('_',',', $value);
}
}
}
if(!empty($category_ids)){
$category_ids = $category_ids;
}
if(!empty($chef_ids)){
$chef_ids = array_map('intval',explode(',',$chef_ids));
}
if(!empty($new_type)){
$new_type = explode(',',$new_type);
}
$strTraining = $request->get('srchTrain');
$trainings = new Trainings\Listing();
$trainings->setCondition("videoName LIKE ?", ["%$strTraining%"]);
if(!empty($category_ids)){
$trainings->addConditionParam("trainingCategoryRelation__id REGEXP CONCAT('(^|,)(', REPLACE('$category_ids',',', '|'), ')(,|$)')");
$training_list_ids = [];
foreach($trainings as $Trainings){
$training_list_ids[]= $Trainings->getId();
}
//dd($training_list_ids);
}
if(!empty($chef_ids)){
$trainings->addConditionParam("chef_relation__id IN (?)", [$chef_ids]);
$training_list_ids = [];
foreach($trainings as $Trainings){
$training_list_ids[]= $Trainings->getId();
}
//dd($training_list_ids);
}
if(!empty($query)){
$trainings->addConditionParam("videoName LIKE " . $chefs->quote("%$query%"));
$training_list_ids = [];
foreach($trainings as $Trainings){
$training_list_ids[]= $Trainings->getId();
}
// dd($training_list_ids);
}
if(!empty($new_type)){
// $trainings->addConditionParam("meal_type IN (?)", [$new_type]);
}
// Pagination
$limit = 12;
if($request->get('page')){
$page = $request->get('page');
}else{
$page = 0;
}
$start = ($page)*$limit;
$end = $limit;
$trainings->setOffset($start);
$trainings->setLimit($end);
$trainings->load();
$filters = array(
'category_ids' => $category_ids,
'chef_ids' => $chef_ids,
'query' => $query,
'new_type' => $new_type,
);
if ($request->isXmlHttpRequest()) {
return $this->loadMoreProduct($trainings);
}
$loyalty_banner = new Slider\Listing();
$loyalty_banner->setCondition("o_id = 206");
$loyalty_banner->load();
foreach($loyalty_banner as $loyaltybanner){
break;
}
return $this->render('Trainings/training_listing.html.twig',
[
'videos' => $trainings,
'chefs' => $chefs,
'trainCat' => $train_cat,
'filters' => $filters,
'Liked_training_list_Ids' =>$Liked_training_list_Ids,
'loyaltybanner' =>$loyaltybanner,
]
);
}
/**
* @Route("/training_detail1", name="training_detail1")
*/
public function trainingDetail1Action(Request $request,
CustomerProviderInterface $customerProvider,
ActivityManagerInterface $activityManager
)
{
$url = $request->get('turl');
$ref = $request->server->get('REDIRECT_URL');
$this->get('session')->set('refURL', $ref);
//$url = "/" . $url;
$locate = $request->getLocale();
//dd($locate);
$link = $request->server->get('HTTP_REFERER');
//$brlink = explode("//", $link);
//$nlnk = explode('/', $brlink[1]);
$locale = '';
// if($nlnk[1]==$locate){
// $locale = $locate;
// } else {
// $locale = $nlnk[1];
// }
//$prd = Db::get()->fetchAll("SELECT * FROM `object_url_slugs` WHERE slug = '" . $url . "'");
// $slug_id = $prd[0]['objectId'];
$email = $this->get('session')->get('loginUserId');
if(!empty($email)){
$activeCustomer = $customerProvider->getActiveCustomerByEmail($email);
$video = new Trainings\Listing();
$video->setCondition("turl = ?", "$url");
$video->setLimit('1');
$video->load();
$training_detail_1_id=0;
$training_detail_1_rel_course_id =[];
foreach($video as $videos){
$training_detail_1_id= $videos->getO_id();
$total_training_detail_1_rel_course = count($videos->getRelated_courses());
for($i =0; $i<$total_training_detail_1_rel_course; $i++){
$training_detail_1_rel_course_id[] = $videos->getRelated_courses()[$i]->getId();
}
break;
}
// dd($training_detail_1_rel_course_id);
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_1_rel_course = new Userloyaltyprogram\Listing();
$Liked_training_detail_1_rel_course->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$training_detail_1_rel_course_id]);
$Liked_training_detail_1_rel_course->load();
$Liked_training_detail_1_rel_course_id = [];
foreach($Liked_training_detail_1_rel_course as $liked_training_detail_1_rel_course){
$Liked_training_detail_1_rel_course_id[] = $liked_training_detail_1_rel_course->getObj_id();
}
//dd($Liked_training_detail_1_rel_course_id);
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_1 = new Userloyaltyprogram\Listing();
$Liked_training_detail_1->setCondition("op_name = ? and u_id = ? and obj_data__id = ?",['Like',$uid,$training_detail_1_id]);
$Liked_training_detail_1->load();
$training = Trainings::getById($training_detail_1_id);
$chefVideo = new Trainings\Listing();
$chefVideo->setCondition("chef_recomended = ?",['1']);
$chefVideo->load();
$chef_training_ids = [];
foreach($chefVideo as $hef_training){
$chef_training_ids[] = $hef_training->getId();
}
//dd($chef_training_ids);
$uid = $this->get('session')->get('loginUID');
$Liked_training_detail_1_chef_training = new Userloyaltyprogram\Listing();
$Liked_training_detail_1_chef_training->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$chef_training_ids]);
$Liked_training_detail_1_chef_training->load();
//dd($Liked_training_detail_1_chef_training);
$Liked_training_detail_1_chef_training_ids = [];
foreach($Liked_training_detail_1_chef_training as $liked_training_detail_1_chef_training){
$Liked_training_detail_1_chef_training_ids[] = $liked_training_detail_1_chef_training->getObj_id();
}
//dd($Liked_training_detail_1_chef_training_ids);
$activityManager->trackActivity(new TrainingActivity($activeCustomer, $training));
return $this->render('Trainings/training_detail1.html.twig',
[
'tr' => $videos,
'chef_pick' => $chefVideo,
'Liked_training_detail_1' =>$Liked_training_detail_1,
'Liked_training_detail_1_rel_course_id'=>$Liked_training_detail_1_rel_course_id,
'Liked_training_detail_1_chef_training_ids'=>$Liked_training_detail_1_chef_training_ids,
]
);
} else {
return $this->redirect('/' . $locate .'/signin');
}
}
/**
* @Route("products/{}/loadmore", name="loadmore")
*/
public function loadMoreProduct($childList){
$more_product = '';
foreach($childList as $training){
if($training->getVideos()[0]['title_img']->getData()){
$image = $training->getVideos()[0]['title_img']->getData();
} else{
$image = '';
}
$lessonCount = ($training->getLesson_count()==1)? $training->getLesson_count() . ' Lesson' : $training->getLesson_count() . ' Lessons';
$vh = new VideoHelper;
$showTime = $vh->seconds2humanTimes($training->getVideos()[0]['training_vid']->getData()->getData()->getCustomSettings()['duration']);
$duration = $showTime->getContent();
if($training->getTurl()){
// $url = $training->getTurl()[0]->getSlug();
$url = $training->getTurl();
} else{
$url = '';
}
$more_product .= '
<div class="slide-holder">
<figure class="slide-img">
<img src="' . $image . '" alt="' . $training->getVideoName() .'">
</figure>
<div class="slide-content all-training-content">
<div class="
course-hour-box-content
slide-content-feature
">
<div class="
course-hour-box-content-lesson
slide-content-feature-lesson
">
<span><img src="/bundles/static/assets/images/book.svg" alt="book"></span>
<span>' . $lessonCount .'</span>
</div>
<div class="
course-hour-box-content-clock
slide-content-feature-clock
">
<span><img src="/bundles/static/assets/images/feather-clock.svg" alt="feather clock"></span>
<span>
' . $duration . '
</span>
</div>
</div>
<div class="frecipes-box all-training-frecipes">
<h3>' . $training->getVideoName() .'</h3>
<p>
' . $training->getDetails() .'
</p>
</div>
<ul class="
list-unstyled
recipe-info
all-training-social
">
<li class="share">Share</li>
<li class="like">Like</li>
<li class="save">Save</li>
</ul>
</div>
</div>
';
}
return $this->json(array('success' => $more_product));
}
/**
* @Route("products/{}/loadmore", name="loadmore")
*/
public function loadMoreComments($reviews){
$more_reviews = '';
foreach($reviews as $training){
$more_reviews .= ' <div class="col-12 col-xl-6">
<div class="comment-list-box">
<div class="comment-list-box-header">
<figure class="person-img">
<img src="/bundles/static/assets/images/comment-01.jpg" alt="comment">
</figure>
<h5>' . $training->getName() . '</h5>
<div class="rating">' . $training->getRating() .'</div>
</div>
<p>
' . $training->getComment() .'
</p>
<div class="date">' . date( 'd/m/Y' ,strtotime($training->getMydate())) .'</div>
</div>
</div>
';
}
return $this->json(array('success' => $more_reviews));
}
}
?>