341 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			341 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Client\kb;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use App\Http\Requests\kb\ContactRequest;
 | |
| use App\Http\Requests\kb\SearchRequest;
 | |
| use App\Model\kb\Article;
 | |
| use App\Model\kb\Category;
 | |
| use App\Model\kb\Comment;
 | |
| use App\Model\kb\Contact;
 | |
| use App\Model\kb\Faq;
 | |
| use App\Model\kb\Page;
 | |
| use App\Model\kb\Relationship;
 | |
| use App\Model\kb\Settings;
 | |
| use Auth;
 | |
| // use Creativeorange\Gravatar\Gravatar;
 | |
| use Config;
 | |
| use Illuminate\Http\Request;
 | |
| use Lang;
 | |
| use Mail;
 | |
| use Redirect;
 | |
| 
 | |
| class UserController extends Controller
 | |
| {
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->middleware('board');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param
 | |
|      *
 | |
|      * @return response
 | |
|      */
 | |
|     public function getArticle(Article $article, Category $category, Settings $settings)
 | |
|     {
 | |
|         $setting = $settings->first();
 | |
|         $pagination = $setting->pagination;
 | |
|         if (!Auth::check() || \Auth::user()->role == 'user') {
 | |
|             $article = $article->where('status', '1');
 | |
|         }
 | |
|         $article = $article->where('type', '1');
 | |
|         $article = $article->orderBy('publish_time', 'desc');
 | |
|         $article = $article->paginate($pagination);
 | |
| 
 | |
|         $article->setPath('article-list');
 | |
|         $categorys = $category->get();
 | |
| 
 | |
|         return view('themes.default1.client.kb.article-list.articles', compact('categorys', 'article'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get excerpt from string.
 | |
|      *
 | |
|      * @param string $str       String to get an excerpt from
 | |
|      * @param int    $startPos  Position int string to start excerpt from
 | |
|      * @param int    $maxLength Maximum length the excerpt may be
 | |
|      *
 | |
|      * @return string excerpt
 | |
|      */
 | |
|     public static function getExcerpt($str, $startPos = 0, $maxLength = 50)
 | |
|     {
 | |
|         if (strlen($str) > $maxLength) {
 | |
|             $excerpt = substr($str, $startPos, $maxLength - 3);
 | |
|             $lastSpace = strrpos($excerpt, ' ');
 | |
|             $excerpt = substr($excerpt, 0, $lastSpace);
 | |
|             $excerpt .= '...';
 | |
|         } else {
 | |
|             $excerpt = $str;
 | |
|         }
 | |
| 
 | |
|         return $excerpt;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * function to search an article.
 | |
|      *
 | |
|      * @param \App\Http\Requests\kb\SearchRequest $request
 | |
|      * @param \App\Model\kb\Category              $category
 | |
|      * @param \App\Model\kb\Article               $article
 | |
|      * @param \App\Model\kb\Settings              $settings
 | |
|      *
 | |
|      * @return type view
 | |
|      */
 | |
|     public function search(SearchRequest $request, Category $category, Article $article, Settings $settings)
 | |
|     {
 | |
|         $settings = $settings->first();
 | |
|         $pagination = $settings->pagination;
 | |
|         $search = $request->input('s');
 | |
|         $result = $article->where('name', 'LIKE', '%'.$search.'%')
 | |
|             ->orWhere('slug', 'LIKE', '%'.$search.'%')
 | |
|             ->orWhere('description', 'LIKE', '%'.$search.'%')
 | |
|             ->paginate($pagination);
 | |
|         $result->setPath('search?s='.$search);
 | |
|         $categorys = $category->get();
 | |
| 
 | |
|         return view('themes.default1.client.kb.article-list.search', compact('categorys', 'result'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * to show the seleted article.
 | |
|      *
 | |
|      * @return response
 | |
|      */
 | |
|     public function show($slug, Article $article, Category $category)
 | |
|     {
 | |
|         //ArticleController::timezone();
 | |
|         $tz = \App\Model\helpdesk\Settings\System::where('id', '1')->first()->time_zone;
 | |
|         $tz = \App\Model\helpdesk\Utility\Timezones::where('id', $tz)->first()->name;
 | |
|         date_default_timezone_set($tz);
 | |
|         $date = \Carbon\Carbon::now()->toDateTimeString();
 | |
|         $arti = $article->where('slug', $slug);
 | |
| 
 | |
|         if (!Auth::check() || \Auth::user()->role == 'user') {
 | |
|             $arti = $arti->where('status', '1');
 | |
|             $arti = $arti->where('publish_time', '<', $date);
 | |
|         }
 | |
| 
 | |
|         $arti = $arti->where('type', '1');
 | |
| 
 | |
|         $arti = $arti->first();
 | |
| 
 | |
|         if ($arti) {
 | |
|             return view('themes.default1.client.kb.article-list.show', compact('arti'));
 | |
|         } else {
 | |
|             return Redirect::back()->with('fails', Lang::get('lang.sorry_not_processed'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function getCategory($slug, Article $article, Category $category, Relationship $relation)
 | |
|     {
 | |
|         /* get the article_id where category_id == current category */
 | |
|         $catid = $category->where('slug', $slug)->first();
 | |
|         if (!$catid) {
 | |
|             return redirect()->back()->with('fails', Lang::get('lang.we_are_sorry_but_the_page_you_are_looking_for_can_not_be_found'));
 | |
|         }
 | |
|         $id = $catid->id;
 | |
|         $all = $relation->where('category_id', $id)->get();
 | |
|         // $all->setPath('');
 | |
|         /* from whole attribute pick the article_id */
 | |
|         $article_id = $all->pluck('article_id');
 | |
|         $categorys = $category->get();
 | |
|         /* direct to view with $article_id */
 | |
|         return view('themes.default1.client.kb.article-list.category', compact('all', 'id', 'categorys', 'article_id'));
 | |
|     }
 | |
| 
 | |
|     public function home(Article $article, Category $category, Relationship $relation)
 | |
|     {
 | |
|         if (Config::get('database.install') == '%0%') {
 | |
|             return redirect('step1');
 | |
|         } else {
 | |
|             $categorys = $category->get();
 | |
|             // $categorys->setPath('home');
 | |
|             /* direct to view with $article_id */
 | |
|             $page = Relationship::where('category_id', '=', $category->id)->get();
 | |
|             /* from whole attribute pick the article_id */
 | |
|             $articles_id = $page->pluck('article_id');
 | |
| 
 | |
|             return view('themes.default1.client.kb.article-list.home', compact('categorys', 'articles_id'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function Faq(Faq $faq, Category $category)
 | |
|     {
 | |
|         $faq = $faq->where('id', '1')->first();
 | |
|         $categorys = $category->get();
 | |
| 
 | |
|         return view('themes.default1.client.kb.article-list.faq', compact('categorys', 'faq'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get the contact page for user.
 | |
|      *
 | |
|      * @return response
 | |
|      */
 | |
|     public function contact(Category $category, Settings $settings)
 | |
|     {
 | |
|         $settings = $settings->whereId('1')->first();
 | |
|         $categorys = $category->get();
 | |
| 
 | |
|         return view('themes.default1.client.kb.article-list.contact', compact('settings', 'categorys'));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * send message to the mail adderess that define in the system.
 | |
|      *
 | |
|      * @return response
 | |
|      */
 | |
|     public function postContact(ContactRequest $request, Contact $contact)
 | |
|     {
 | |
|         $this->port();
 | |
|         $this->host();
 | |
|         $this->encryption();
 | |
|         $this->email();
 | |
|         $this->password();
 | |
|         //return Config::get('mail');
 | |
|         $contact->fill($request->input())->save();
 | |
|         $name = $request->input('name');
 | |
|         //echo $name;
 | |
|         $email = $request->input('email');
 | |
|         //echo $email;
 | |
|         $subject = $request->input('subject');
 | |
|         //echo $subject;
 | |
|         $details = $request->input('message');
 | |
|         //echo $message;
 | |
|         //echo $contact->email;
 | |
|         $mail = Mail::send('themes.default1.client.kb.article-list.contact-details', ['name' => $name, 'email' => $email, 'subject' => $subject, 'details' => $details], function ($message) use ($contact) {
 | |
|             $message->to($contact->email, $contact->name)->subject('Contact');
 | |
|         });
 | |
|         if ($mail) {
 | |
|             return redirect('contact')->with('success', Lang::get('lang.your_details_send_to_system'));
 | |
|         } else {
 | |
|             return redirect('contact')->with('fails', Lang::get('lang.your_details_can_not_send_to_system'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function contactDetails()
 | |
|     {
 | |
|         return view('themes.default1.client.kb.article-list.contact-details');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * To insert the values to the comment table.
 | |
|      *
 | |
|      * @param type Article $article
 | |
|      * @param type Request $request
 | |
|      * @param type Comment $comment
 | |
|      * @param type Id      $id
 | |
|      *
 | |
|      * @return type response
 | |
|      */
 | |
|     public function postComment($slug, Article $article, Request $request, Comment $comment)
 | |
|     {
 | |
|         $request->validate([
 | |
|             'comment' => 'required',
 | |
|         ]);
 | |
| 
 | |
|         $article = $article->where('slug', $slug)->first();
 | |
|         if (!$article) {
 | |
|             return response()->json(['success' => false, 'message' => Lang::get('lang.sorry_not_processed')]);
 | |
|         }
 | |
| 
 | |
|         $comment->article_id = $article->id;
 | |
| 
 | |
|         if (Auth::check()) {
 | |
|             // Associate the comment with the authenticated user
 | |
|             $comment->article_id = Auth::id();
 | |
|             $comment->name = Auth::user()->first_name.' '.Auth::user()->last_name;
 | |
|         } else {
 | |
|             // Set default values for non-authenticated user
 | |
|             $comment->name = $request->input('name');
 | |
|             $comment->email = $request->input('email');
 | |
|             $comment->website = $request->input('website');
 | |
|         }
 | |
| 
 | |
|         if ($comment->fill($request->input())->save()) {
 | |
|             return Redirect::back()->with('success', Lang::get('lang.your_comment_posted'));
 | |
|         } else {
 | |
|             return Redirect::back()->with('fails', Lang::get('lang.sorry_not_processed'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function getPage($name, Page $page)
 | |
|     {
 | |
|         $page = $page->where('slug', $name);
 | |
| 
 | |
|         if (!Auth::check() || \Auth::user()->role == 'user') {
 | |
|             $page = $page
 | |
|                     ->where(['status' => 1, 'visibility'=>1])
 | |
|                     ->first();
 | |
|         } else {
 | |
|             $page = $page->where('status', 1)->first();
 | |
|         }
 | |
| 
 | |
|         if ($page) {
 | |
|             return view('themes.default1.client.kb.article-list.pages', compact('page'));
 | |
|         } else {
 | |
|             return Redirect::back()->with('fails', Lang::get('lang.sorry_not_processed'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public static function port()
 | |
|     {
 | |
|         $setting = Settings::whereId('1')->first();
 | |
|         Config::set('mail.port', $setting->port);
 | |
|     }
 | |
| 
 | |
|     public static function host()
 | |
|     {
 | |
|         $setting = Settings::whereId('1')->first();
 | |
|         Config::set('mail.host', $setting->host);
 | |
|     }
 | |
| 
 | |
|     public static function encryption()
 | |
|     {
 | |
|         $setting = Settings::whereId('1')->first();
 | |
|         Config::set(['mail.encryption' => $setting->encryption, 'mail.username' => $setting->email]);
 | |
|     }
 | |
| 
 | |
|     public static function email()
 | |
|     {
 | |
|         $setting = Settings::whereId('1')->first();
 | |
|         Config::set(['mail.from' => ['address' => $setting->email, 'name' => 'asd']]);
 | |
|         //dd(Config::get('mail'));
 | |
|     }
 | |
| 
 | |
|     public static function password()
 | |
|     {
 | |
|         $setting = Settings::whereId('1')->first();
 | |
|         Config::set(['mail.password' => $setting->password, 'mail.sendmail' => $setting->email]);
 | |
|     }
 | |
| 
 | |
|     public function getCategoryList(Article $article, Category $category, Relationship $relation)
 | |
|     {
 | |
|         //$categorys = $category->get();
 | |
|         $categorys = $category->get();
 | |
|         // $categorys->setPath('home');
 | |
|         /* direct to view with $article_id */
 | |
|         $page = Relationship::where('category_id', '=', $category->id)->get();
 | |
|         /* from whole attribute pick the article_id */
 | |
|         $articles_id = $page->pluck('article_id');
 | |
| 
 | |
|         return view('themes.default1.client.kb.article-list.categoryList', compact('categorys', 'articles_id'));
 | |
|     }
 | |
| 
 | |
|     // static function timezone($utc) {
 | |
|     // 	$set = Settings::whereId('1')->first();
 | |
|     // 	$tz = $set->timezone;
 | |
|     // 	$format = $set->dateformat;
 | |
|     // 	//$utc = date('M d Y h:i:s A');
 | |
|     // 	//echo 'UTC : ' . $utc;
 | |
|     // 	date_default_timezone_set($tz);
 | |
|     // 	$offset = date('Z', strtotime($utc));
 | |
|     // 	//print "offset: $offset \n";
 | |
|     // 	$date = date($format, strtotime($utc) + $offset);
 | |
|     // 	return $date;
 | |
|     // 	//return substr($date, 0, -6);
 | |
|     // }
 | |
| }
 | 
