MessageController.php 8.52 KB
<?php namespace App\Http\Controllers;

use Auth;
use Config;
use Response;
use Input;
use Cache;
use App\Models\Message;
use App\Models\Sipid;
use App\Jobs\KPushNotify;
use App\Models\User;
use App\Models\Kqueue;
use DB;

class MessageController extends Controller {

	public function __construct()
	{
	  $this->middleware('auth');
	  $this->middleware('module_access');
	}

	public function index()
	{
	  //$messages=Message::where("to","=",Auth::user()->username)->whereIn("status",array("New","Read"))->orderBy('updated_at','desc')->paginate(50);
	  //return view('layout.module.message.index',array("messages"=>$messages));
	  
	  $user=Auth::user();
	  
	  $data=array();
	  $data["data"]=json_decode($user->data,true);
	  $data["id"]=$user->id;
	  $data["user"]=$user;
	  $data["displayname"]=Auth::user()->dispname();
	  $data["myphoto"] = $user->fetchphoto();
	  
	  $data["messages"]=Message::where('to','=',$user->id)->orderBy("updated_at","DESC")->take(100)->get();
	  $data["newcount"]=Message::where('to','=',$user->id)->where('status','=','New')->count();
	  $data["users"]=array();
	  foreach($data["messages"] as $message)
	  {
	    $tuser=User::find($message->from);
	    if($tuser)
	    {
	      if(!isset($data["users"][$message->from]))
	      {
		$data["message_time"][$message->id]=Auth::user()->post_date($message->updated_at);
		$data["users"][$message->from]=array();
		$data["users"][$message->from]['photothumb']=Auth::user()->fetchphotothumb($message->from);
		$data["users"][$message->from]['dispname']=$tuser->dispname();
	      }
	      else
	      {
		//self chat?
		$data["message_time"][$message->id]=Auth::user()->post_date($message->updated_at);
		//$data["users"][$message->from]=array();
		//$data["users"][$message->from]['photothumb']=Auth::user()->fetchphotothumb($message->from);
		//$data["users"][$message->from]['dispname']=$tuser->dispname();
	      }
	    }
	  }
	  
	  return view(Config::get('app.mytheme').'.module.message.index',$data);  
	}
	public function create()
	{
		//
	}
	public function store()
	{
		$type=Input::get("type");
		if($type=="chat")
		{
		  $id=explode("_",Input::get("id"));
		  //chanch if $id[1] is a user and in our friendlist TODO
		  $msg=htmlentities(Input::get("msg"));
		  $nowTS=time();
		  
                  if(Message::where("from","=",Auth::user()->id)->where("created_at",'>',date('Y-m-d H:i:s',(time()-(60*60))))->count()>30)return Response::make("simpleNotification('error','topRight','Fairplay Voilation #940');");
                  if(Message::where("from","=",Auth::user()->id)->where("created_at",'>',date('Y-m-d H:i:s',(time()-(24*60*60))))->count()>100)return Response::make("simpleNotification('error','topRight','Fairplay Voilation #941');");
            
                  $ckey='chat'.Auth::user()->id.$id[1];
		  if(Cache::get($ckey,0)>100)return Response::make("simpleNotification('error','topRight','Fairplay Voilation #942');");
		  Cache::put($ckey,Cache::get($ckey,0)+1, 24*60);
		
		  $messageTo=Message::where("to","=",$id[1])->where("from","=",Auth::user()->id)->where("subject","=","Chat")->first();
		  $messageFrom=Message::where("to","=",Auth::user()->id)->where("from","=",$id[1])->where("subject","=","Chat")->first();
		  if(!$messageTo)
		  {
		    $messageTo=new Message();
		    $messageTo->to=$id[1];
		    $messageTo->from=Auth::user()->id;
		    $messageTo->subject="Chat";
		  }
		  if(!$messageFrom)
		  {
		    $messageFrom=new Message();
		    $messageFrom->to=Auth::user()->id;
		    $messageFrom->from=$id[1];
		    $messageFrom->subject="Chat";
		  }
		  $messageTo->status="Read";
		  $messageFrom->status="Read";
		  
		  
		  $dataTo=json_decode($messageTo->data,true);
		  $dataFrom=json_decode($messageFrom->data,true);
		  
		  $dataTo[$nowTS]=array(Auth::user()->id,$msg);
		  $dataFrom[$nowTS]=array(Auth::user()->id,$msg);
		  
		  $messageTo->data=json_encode($dataTo);
		  $messageFrom->data=json_encode($dataFrom);
		  
		  
		  $messageTo->save();
		  $messageFrom->save();
		  
		  //add a queue notify to user if online
		  $noty=new KPushNotify();
		  $res=$noty->send(array($id[1]),"chat",Auth::user()->dispname(),$msg,Auth::user()->id);
		  

		  if(!isset($res[$id[1]])||$res[$id[1]]<=0)
		  {
		    $messageTo->status="New";
		    $messageTo->save();
		    return Response::make("simpleNotification('alert','topRight','User is offline');");
		  }
		  
		}
		if($type=="call")
		{
		  $id=explode("_",Input::get("id"));

		  $sipid=Sipid::find(Input::get('sipid'));
		  $tosipid=Sipid::where("user","=",$id[1])->where("status","=","1")->first();
		  $tosip=0;
		  if($sipid&&$tosipid)
		  {
				$tosip=$tosipid->id;
				
				$newqueue=new Kqueue();
				$newqueue->sipOriginate($sipid,"1001".$tosip,"kstychDialer");
		  }

		  return Response::make($tosip);
		}
	}
	public function show($id)
	{
	  if($id=="topbar")
	  {
	    $messages=Message::where("to","=",Auth::user()->id)->where("status","=","New")->orderBy('created_at','desc')->take(10)->get();
	    $count=Message::where("to","=",Auth::user()->id)->where("status","=","New")->count();

	    $data=array();
	    foreach($messages as $message)
	    {
		$data[]=array("fromuser"=>$message->from,
			      "text"=>$message->subject,
			      "tstr"=>date("d-M H:i",strtotime($message->created_at)));
	    }
	    return view('layout.topbar.message',array("messages"=>$data,"messagescount"=>$count));
	  }

	  

	  $data=array();
	  $tmessage=Message::find($id);
	  if($tmessage->subject=="Chat")
	  {
	    if($tmessage->to==Auth::user()->id)
	    {
	      $data['fromuser']=$tmessage->from;
	      $data["id"]=$id;
	      $data['mid']=$id;
	      $data['tuser']=User::find($tmessage->from);
	      
	      $data['messages']=json_decode($tmessage->data,true);
	      $data["users"]=array();
	      foreach($data["messages"] as $ts=>$message)
	      {
		$data["message_time"]["$ts"]=Auth::user()->post_date(date("Y-m-d H:i",$ts));

		//$dataTo[$nowTS]=array(Auth::user()->id,$msg);
		$tuser=User::find($message[0]);
		if($tuser)
		{
		  if(!isset($data["users"][$message[0]]))
		  {		  
		    $data["users"][$message[0]]=array();
		    $data["users"][$message[0]]['photothumb']=Auth::user()->fetchphotothumb($message[0]);
		    $data["users"][$message[0]]['dispname']=$tuser->dispname();
		  }
		}
	      }
	      if($tmessage->status=="New"){$tmessage->status="Read";$tmessage->save();}
	    }
	    return view(Config::get('app.mytheme').'.module.message.messagecontent',$data);
	  }
	  
	  
	  
	  return view('layout.module.message.msg',array("message"=>Message::find($id)));
	}
	public function edit($id)
	{
		//
	}
	public function update($id)
	{
		//
	}
	public function destroy($id)
	{
		//
	}

	public function dashboard()
	{
		//echo "OK";
	}
	
	public function sendSupVisorMessage()
	{
		$agentsNewArr = array();

		$agents = Input::get('agents');
		$message = Input::get('message');
		$sup_id = Auth::user()->usertype;
		$status = "New";

		$agentsArr = explode(",", $agents);
		foreach ($agentsArr as $key => $agent) {
			$agentsNewArr[$key] = $agent."-Unread";
		}

		$updatedAgents = implode(",", $agentsNewArr);

		DB::statement("insert into supervisor_message set created_at='".date("Y-m-d H:i:s")."', updated_at='".date("Y-m-d H:i:s")."', sup_id='$sup_id',agents='$agents',message='$message',status='$updatedAgents'");

		return;
	}

	public function viewSupVisorMessage($msg_id, $username)
	{
		$data["newcount"]=DB::table('supervisor_message')->where('agents','like','%'.Auth::user()->username.'%')->where('status','like','%'.Auth::user()->username."-Unread".'%')->count();

		$data["allMesgs"] = DB::table('supervisor_message')->where('agents','like','%'.Auth::user()->username.'%')->get();

		if(Auth::user()->usertype == "Supervisor")
		{
			$data["allMesgs"] = DB::table('supervisor_message')->where('sup_id','=',Auth::user()->username)->get();
		}

		return view('layout.module.message.supmsg', $data);
	}

	public function viewMessage($msg_id, $username='')
	{
		$msgDet = DB::table('supervisor_message')->where('id','=',$msg_id)->get();

		foreach ($msgDet as $key => $val) {
			$msg = $val->message;
			$status = $val->status;
		}

		$statUsrArr = explode(",", $status);

		foreach ($statUsrArr as $key => $statArr) {
			$stat = explode("-", $statArr);

			if($stat[0] == $username)
			{
				$stat[1] = "Read";
				$mergeStat = implode("-", $stat);
				$statUsrArr[$key] = $mergeStat;
			}	
		}

		$updateStatus = implode(",", $statUsrArr);

		DB::statement("update supervisor_message set updated_at='".date("Y-m-d H:i:s")."',status='$updateStatus' where id='$msg_id'");
		
		if(Auth::user()->usertype == "Supervisor")
                {
			return $status;
		}
		else
		{
			return $msg;
		}
	}
}