public function updated(WorkOrder $workOrder)
 {
     $sendedUsers = [];
     $messageData = [];
     switch ($workOrder->status) {
         case 0:
             $messageData = ['title' => '工单 #' . $workOrder->id . ' 已关闭', 'template' => 'host.communication.message.template.closed'];
             break;
         case 2:
             $messageData = ['title' => '工单 #' . $workOrder->id . ' 已被受理', 'template' => 'host.communication.message.template.accept'];
             break;
         case 3:
             $messageData = ['title' => '工单 #' . $workOrder->id . ' 已被标记为解决', 'template' => 'host.communication.message.template.solved'];
             break;
     }
     foreach ($workOrder->participants as $participant) {
         if ($participant->id == \Auth::id()) {
             continue;
         }
         $url = \get_uri_path(route('host.work.work-order.show', $workOrder->id));
         $message = new Message();
         $message->title = $messageData['title'];
         $message->content = view($messageData['template'], ['workOrder' => $workOrder, 'url' => $url]);
         $message->sendTo($participant);
         // 当工单解决或关闭则取消关注
         if ($workOrder->status == 0 || $workOrder->status == 3) {
             $workOrder->participants()->detach($participant->id);
         }
         $sendedUsers[] = $participant->id;
     }
     foreach ($workOrder->group->participants as $participant) {
         if ($participant->id == \Auth::id()) {
             continue;
         }
         if (!in_array($participant->id, $sendedUsers)) {
             $url = \get_uri_path(route('host.work.work-order.show', $workOrder->id));
             $message = new Message();
             $message->title = $messageData['title'];
             $message->content = view($messageData['template'], ['workOrder' => $workOrder, 'url' => $url]);
             $message->sendTo($participant);
         }
     }
     // 创建历史
     $history = new WorkOrderHistory();
     $history->event_id = WorkOrderHistory::EVENT_WORK_ORDER_STATUS_CHANGE;
     $history->remark = json_encode(['status' => $workOrder->status]);
     $history->workOrder()->associate($workOrder);
     $history->user()->associate(\Auth::user());
     $history->save();
 }
 /**
  * Store a newly created resource in storage.
  *
  * @param  \Illuminate\Http\Request $request
  *
  * @return \Illuminate\Http\Response
  */
 public function store(Request $request, $groupId)
 {
     $validator = \Validator::make($request->all(), ['subject' => 'required', 'sort' => 'required|numeric|min:0|max:5', 'content' => 'required', 'category_id' => 'required|exists:categories,id']);
     if ($validator->fails()) {
         return redirect()->back()->withErrors($validator->errors());
     }
     return \DB::transaction(function () use($request, $groupId) {
         $group = Group::findOrFail($groupId);
         $category = Category::findOrFail($request->input('category_id'));
         $workOrder = new WorkOrder();
         $workOrder->subject = $request->input('subject');
         $workOrder->sort = $request->input('sort');
         $workOrder->category()->associate($category);
         $workOrder->group()->associate($group);
         $workOrder->publisher()->associate(\Auth::user());
         $workOrder->save();
         return redirect()->route('host.work.work-order.show', $workOrder->id)->with('create-success', 'work-order');
     });
 }
 private function operating($target, $type, $method)
 {
     $targetObject = $type == User::INVOLVED_WORK_ORDER ? WorkOrder::findOrFail($target) : Group::findOrFail($target);
     $operator = \Auth::user()->involvements($type);
     if ($method) {
         $operator->attach($targetObject->id);
     } else {
         $operator->detach($targetObject->id);
     }
     if (\Request::ajax()) {
         return response()->json(['body' => 'success']);
     }
     return redirect()->back();
 }
 public function store(Request $request, $id)
 {
     $validator = \Validator::make($request->all(), ['content' => 'required']);
     if ($validator->fails()) {
         return redirect()->back()->withErrors($validator->errors());
     }
     return \DB::transaction(function () use($id, $request) {
         $workOrder = WorkOrder::findOrFail($id);
         $message = new WorkOrderMessage();
         $message->content = $request->input('content');
         $message->workOrder()->associate($workOrder);
         $message->publisher()->associate(\Auth::user());
         $message->save();
         if ($request->ajax()) {
             return response()->json(['body' => $message->id]);
         }
         return redirect()->back()->with('create-success', 'work-order-message');
     });
 }
 /**
  * Update the specified resource in storage.
  *
  * @param  \Illuminate\Http\Request $request
  * @param  int                      $id
  *
  * @return \Illuminate\Http\Response
  */
 public function update(Request $request, $id)
 {
     $workOrder = WorkOrder::findOrFail($id);
     if ($workOrder->status != 0 && $workOrder->status != 3) {
         if (in_array($status = $request->input('status', -1), [0, 1, 2, 3])) {
             $workOrder->status = $status;
             $workOrder->save();
         }
     }
     return response()->json(['body' => 'success']);
 }
 /**
  * Register any other events for your application.
  *
  * @param  \Illuminate\Contracts\Events\Dispatcher  $events
  * @return void
  */
 public function boot(DispatcherContract $events)
 {
     parent::boot($events);
     WorkOrder::observe(WorkOrderObserver::class);
     WorkOrderMessage::observe(WorkOrderMessageObserver::class);
 }