freescout/freescout-dist/resources/views/conversations/view.blade.php

310 lines
23 KiB
PHP
Raw Permalink Normal View History

2023-12-22 19:40:32 +00:00
@extends('layouts.app')
@php
$is_in_chat_mode = $conversation->isInChatMode();
@endphp
@section('title_full', '#'.$conversation->number.' '.$conversation->getSubject().($customer ? ' - '.$customer->getFullName(true) : ''))
@if (app('request')->input('print'))
@section('body_class', 'body-conv print')
@else
@section('body_class', 'body-conv'.($is_in_chat_mode ? ' chat-mode' : ''))
@endif
@section('body_attrs')@parent data-conversation_id="{{ $conversation->id }}"@endsection
@section('sidebar')
@include('partials/sidebar_menu_toggle')
@include('mailboxes/sidebar_menu_view')
@endsection
@section('content')
@include('partials/flash_messages')
<div id="conv-layout" class="conv-type-{{ strtolower($conversation->getTypeName()) }} @if ($is_following) conv-following @endif">
<div id="conv-layout-header">
<div id="conv-toolbar">
<div class="conv-actions">
{{-- There should be no spaces between buttons --}}
@if (!$conversation->isPhone() || ($customer && $customer->getMainEmail()))
<span class="conv-reply conv-action glyphicon glyphicon-share-alt" data-toggle="tooltip" data-placement="bottom" title="{{ __("Reply") }}" aria-label="{{ __("Reply") }}" role="button"></span>
@endif
<span class="conv-add-note conv-action glyphicon glyphicon-edit" data-toggle="tooltip" data-placement="bottom" title="{{ __("Note") }}" aria-label="{{ __("Note") }}" role="button"></span>
@if (Auth::user()->can('delete', $conversation))
@if ($conversation->state != App\Conversation::STATE_DELETED)
<span class="hidden-xs conv-action glyphicon glyphicon-trash conv-delete" data-toggle="tooltip" data-placement="bottom" title="{{ __("Delete") }}" aria-label="{{ __("Delete") }}" role="button"></span>
@else
<span class="hidden-xs conv-action glyphicon glyphicon-trash conv-delete-forever" data-toggle="tooltip" data-placement="bottom" title="{{ __("Delete Forever") }}" aria-label="{{ __("Delete Forever") }}" role="button"></span>
@endif
@endif
@action('conversation.action_buttons', $conversation, $mailbox)
<div class="dropdown conv-action" data-toggle="tooltip" title="{{ __("More Actions") }}">
<span class="conv-action glyphicon glyphicon-option-horizontal dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" aria-label="{{ __("More Actions") }}"></span>
<ul class="dropdown-menu dropdown-with-icons">
@action('conversation.prepend_action_buttons', $conversation, $mailbox)
<li>
<a href="#" class="conv-follow @if ($is_following) hidden @endif" data-follow-action="follow" role="button"><i class="glyphicon glyphicon-bell"></i> {{ __("Follow") }}</a>
<a href="#" class="conv-follow @if (!$is_following) hidden @endif" data-follow-action="unfollow" role="button"><i class="glyphicon glyphicon-bell"></i> {{ __("Unfollow") }}</a>
</li>
<li><a href="#" class="conv-forward" role="button"><i class="glyphicon glyphicon-arrow-right"></i> {{ __("Forward") }}</a></li>
@if (!$conversation->isChat())
<li><a href="{{ route('conversations.ajax_html', array_merge(['action' =>
'merge_conv'], \Request::all(), ['conversation_id' => $conversation->id]) ) }}" data-trigger="modal" data-modal-title="{{ __("Merge Conversations") }}" data-modal-no-footer="true" data-modal-on-show="initMergeConv" role="button"><i class="glyphicon glyphicon-indent-left"></i> {{ __("Merge") }}</a></li>
@endif
@if (Auth::user()->can('move', App\Conversation::class))
<li><a href="{{ route('conversations.ajax_html', array_merge(['action' =>
'move_conv'], \Request::all(), ['conversation_id' => $conversation->id]) ) }}" data-trigger="modal" data-modal-title="{{ __("Move Conversation") }}" data-modal-no-footer="true" data-modal-on-show="initMoveConv" role="button"><i class="glyphicon glyphicon-log-out"></i> {{ __("Move") }}</a></li>
@endif
@if ($conversation->state != App\Conversation::STATE_DELETED)
<li class="hidden-lg hidden-md hidden-sm"><a href="#" class="conv-delete" role="button"><i class="glyphicon glyphicon-trash"></i> {{ __("Delete") }}</a></li>
@else
<li class="hidden-lg hidden-md hidden-sm"><a href="#" class="conv-delete-forever" role="button"><i class="glyphicon glyphicon-trash"></i> {{ __("Delete Forever") }}</a></li>
@endif
<li><a href="{{ \Request::getRequestUri() }}&amp;print=1" target="_blank" role="button"><i class="glyphicon glyphicon-print"></i> {{ __("Print") }}</a></li>
@action('conversation.append_action_buttons', $conversation, $mailbox)
</ul>
</div>
</div>
<ul class="conv-info">
@if ($conversation->state != App\Conversation::STATE_DELETED)
<li>
<div class="btn-group" id="conv-assignee" data-toggle="tooltip" title="{{ __("Assignee") }}: {{ $conversation->getAssigneeName(true) }}">
<button type="button" class="btn btn-default conv-info-icon" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-title="{{ __("Assignee") }}" aria-hidden="true"><i class="glyphicon glyphicon-user"></i></button>
<button type="button" class="btn btn-default dropdown-toggle conv-info-val" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-title="{{ __("Assignee") }}" aria-label="{{ __("Assignee") }}: {{ $conversation->getAssigneeName(true) }}">
<span>{{ $conversation->getAssigneeName(true) }}</span>
<span class="caret"></span>
</button>
<ul class="dropdown-menu conv-user dm-scrollable">
<li @if (!$conversation->user_id) class="active" @endif><a href="#" data-user_id="-1">{{ __("Anyone") }}</a></li>
<li @if ($conversation->user_id == Auth::user()->id) class="active" @endif><a href="#" data-user_id="{{ Auth::user()->id }}">{{ __("Me") }}</a></li>
@foreach ($mailbox->usersAssignable() as $user)
@if ($user->id != Auth::user()->id)
@php
$a_class = \Eventy::filter('assignee_list.a_class', '', $user);
@endphp
<li @if ($conversation->user_id == $user->id) class="active" @endif><a href="#" data-user_id="{{ $user->id }}" @if ($a_class) class="{{ $a_class }}"@endif>{{ $user->getFullName() }}@action('assignee_list.item_append', $user)</a></li>
@endif
@endforeach
</ul>
</div>
</li>
@endif
<li>
<div class="btn-group" id="conv-status" data-toggle="tooltip" title="{{ __("Status") }}: {{ $conversation->getStatusName() }}">
@if ($conversation->state != App\Conversation::STATE_DELETED)
<button type="button" class="btn btn-{{ App\Conversation::$status_classes[$conversation->getStatus()] }} btn-light conv-info-icon" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{ __("Status") }}: {{ $conversation->getStatusName() }}"><i class="glyphicon glyphicon-{{ App\Conversation::$status_icons[$conversation->getStatus()] }}"></i></button>
<button type="button" class="btn btn-{{ App\Conversation::$status_classes[$conversation->getStatus()] }} btn-light dropdown-toggle conv-info-val" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="{{ __("Status") }}">
<span>{{ $conversation->getStatusName() }}</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu conv-status">
@if ($conversation->status != App\Conversation::STATUS_SPAM)
@foreach (App\Conversation::$statuses as $status => $dummy)
<li @if ($conversation->status == $status) class="active" @endif><a href="#" data-status="{{ $status }}">{{ App\Conversation::statusCodeToName($status) }}</a></li>
@endforeach
@else
<li><a href="#" data-status="not_spam">{{ __('Not Spam') }}</a></li>
@endif
</ul>
@else
<button type="button" class="btn btn-grey btn-light conv-info-icon" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="glyphicon glyphicon-trash"></i></button>
<button type="button" class="btn btn-grey btn-light dropdown-toggle conv-info-val" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span>{{ __('Deleted') }}</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu conv-status">
<li><a href="#" class="conv-restore-trigger">{{ __('Restore') }}</a></li>
</ul>
@endif
</div>
</li><li class="conv-next-prev">
<a href="{{ $conversation->urlPrev(App\Conversation::getFolderParam()) }}" class="glyphicon glyphicon-menu-left" data-toggle="tooltip" title="{{ __("Newer") }}"></a>
<a href="{{ $conversation->urlNext(App\Conversation::getFolderParam()) }}" class="glyphicon glyphicon-menu-right" data-toggle="tooltip" title="{{ __("Older") }}"></a>
</li>
</ul>
<div class="clearfix"></div>
</div>
<div id="conv-subject">
<div class="conv-subj-block">
<div class="conv-subjwrap">
<div class="conv-subjtext">
<span>{{ $conversation->getSubject() }}</span>
<div class="input-group input-group-lg conv-subj-editor">
<input type="text" id="conv-subj-value" class="form-control" value="{{ $conversation->getSubject() }}" />
<span class="input-group-btn">
<button class="btn btn-primary" type="button" data-loading-text=""><i class="glyphicon glyphicon-ok"></i></button>
</span>
</div>
</div>
@if ($conversation->isChat() && $conversation->getChannelName())
<span class="conv-tags">
@if (\Helper::isChatMode())<a class="btn btn-default fs-tag-btn" href="{{ request()->fullUrlWithQuery(['chat_mode' => '0']) }}" title="{{ __('Exit') }}" data-toggle="tooltip"><small class="glyphicon glyphicon-stop"></small> {{ __('Chat Mode') }}</a>@else<a class="btn btn-primary fs-tag-btn" href="{{ request()->fullUrlWithQuery(['chat_mode' => '1']) }}"><small class="glyphicon glyphicon-play"></small> {{ __('Chat Mode') }}</a>@endif<span class="fs-tag fs-tag-md"><a class="fs-tag-name" href="#"><small class="glyphicon glyphicon-phone"></small> {{ $conversation->getChannelName() }}</a></span>
</span>
@endif
@action('conversation.after_subject', $conversation, $mailbox)
<div class="conv-numnav">
<i class="glyphicon conv-star @if ($conversation->isStarredByUser()) glyphicon-star @else glyphicon-star-empty @endif" title="@if ($conversation->isStarredByUser()){{ __("Unstar Conversation") }}@else{{ __("Star Conversation") }}@endif"></i>&nbsp; # <strong>{{ $conversation->number }}</strong>
</div>
<div id="conv-viewers">
@foreach ($viewers as $viewer)
<span class="photo-xs viewer-{{ $viewer['user']->id }} @if ($viewer['replying']) viewer-replying @endif" data-toggle="tooltip" title="@if ($viewer['replying']){{ __(':user is replying', ['user' => $viewer['user']->getFullName()]) }}@else{{ __(':user is viewing', ['user' => $viewer['user']->getFullName()]) }}@endif">
@include('partials/person_photo', ['person' => $viewer['user']])
</span>
@endforeach
</div>
</div>
</div>
@if ($is_in_chat_mode)
<div class="conv-top-block conv-top-chat clearfix">
@if ($conversation->user_id != Auth::user()->id)
<button class="btn btn-success btn-xs pull-right chat-accept" data-loading-text="{{ __('Accept Chat') }}…">{{ __('Accept Chat') }}</button>
@elseif (!$conversation->isClosed())
<button class="btn btn-default btn-xs pull-right chat-end" data-loading-text="{{ __('End Chat') }}…">{{ __('End Chat') }}</button>
@endif
<a href="#conv-top-blocks" data-toggle="collapse">{{ __('Show Details') }} <b class="caret"></b></a>
</div>
<div class="collapse" id="conv-top-blocks">
@endif
@action('conversation.after_subject_block', $conversation, $mailbox)
@if ($conversation->isInChatMode())
</div>
@endif
<div class="conv-action-wrapper">
<div class="conv-block conv-reply-block conv-action-block hidden">
<div class="col-xs-12">
<form class="form-horizontal form-reply" method="POST" action="">
{{ csrf_field() }}
<input type="hidden" name="conversation_id" value="{{ $conversation->id }}"/>
<input type="hidden" name="mailbox_id" value="{{ $mailbox->id }}"/>
<input type="hidden" name="saved_reply_id" value=""/>
{{-- For drafts --}}
<input type="hidden" name="thread_id" value=""/>
<input type="hidden" name="is_note" value=""/>
<input type="hidden" name="subtype" value=""/>
<input type="hidden" name="conv_history" value=""/>
@if (count($from_aliases))
<div class="form-group conv-from-alias">
<label class="control-label">{{ __('From') }}</label>
<div class="conv-reply-field">
<select name="from_alias" class="form-control">
@foreach ($from_aliases as $from_alias_email => $from_alias_name)
<option value="@if ($from_alias_email != $mailbox->email){{ $from_alias_email }}@endif" @if (!empty($from_alias) && $from_alias == $from_alias_email)selected="selected"@endif>@if ($from_alias_name){{ $from_alias_email }} ({{ $from_alias_name }})@else{{ $from_alias_email }}@endif</option>
@endforeach
</select>
</div>
</div>
@endif
<div class="form-group{{ $errors->has('to') ? ' has-error' : '' }} conv-recipient conv-recipient-to @if (empty($to_customers)) hidden @endif">
<label for="to" class="control-label">{{ __('To') }}</label>
<div class="conv-reply-field">
@if (!empty($to_customers))
<select name="to" id="to" class="form-control">
@foreach ($to_customers as $to_customer)
<option value="{{ $to_customer['email'] }}" @if ($to_customer['email'] == $conversation->customer_email)selected="selected"@endif>{{ $to_customer['customer']->getFullName(true) }} &lt;{{ $to_customer['email'] }}&gt;</option>
@endforeach
</select>
@endif
<select class="form-control hidden parsley-exclude draft-changer" name="to_email[]" id="to_email" multiple required autofocus>
</select>
@include('partials/field_error', ['field'=>'to'])
</div>
</div>
<div class="form-group{{ $errors->has('cc') ? ' has-error' : '' }} @if (!$cc) hidden @endif field-cc conv-recipient">
<label for="cc" class="control-label">{{ __('Cc') }}</label>
<div class="conv-reply-field">
<select class="form-control recipient-select" name="cc[]" id="cc" multiple>
@if ($cc)
@foreach ($cc as $cc_email)
<option value="{{ $cc_email }}" selected="selected">{{ $cc_email }}</option>
@endforeach
@endif
</select>
@include('partials/field_error', ['field'=>'cc'])
</div>
</div>
<div class="form-group{{ $errors->has('bcc') ? ' has-error' : '' }} @if (!$bcc) hidden @endif field-cc conv-recipient">
<label for="bcc" class="control-label">{{ __('Bcc') }}</label>
<div class="conv-reply-field">
<select class="form-control recipient-select" name="bcc[]" id="bcc" multiple>
@if ($bcc)
@foreach ($bcc as $bcc_email)
<option value="{{ $bcc_email }}" selected="selected">{{ $bcc_email }}</option>
@endforeach
@endif
</select>
@include('partials/field_error', ['field'=>'bcc'])
</div>
</div>
<div class="form-group cc-toggler @if (empty($to_customers) && !$cc && !$bcc) cc-shifted @endif @if ($cc && $bcc) hidden @endif">
<label class="control-label"></label>
<div class="conv-reply-field">
<a href="#" class="help-link" id="toggle-cc">Cc/Bcc</a>
</div>
</div>
@if (!empty($threads[0]) && $threads[0]->type == App\Thread::TYPE_NOTE && $threads[0]->created_by_user_id != Auth::user()->id && $threads[0]->created_by_user)
<div class="alert alert-warning alert-switch-to-note">
<i class="glyphicon glyphicon-exclamation-sign"></i>
{!! __('This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.', ['%switch_start%' => '<a href="#" class="switch-to-note">', 'switch_end' => '</a>', 'user_name' => htmlspecialchars($threads[0]->created_by_user->getFullName()) ]) !!}
</div>
@endif
<div class="thread-attachments attachments-upload form-group">
<ul></ul>
</div>
<div class="form-group{{ $errors->has('body') ? ' has-error' : '' }} conv-reply-body">
<textarea id="body" class="form-control" name="body" rows="13" data-parsley-required="true" data-parsley-required-message="{{ __('Please enter a message') }}" @if ($conversation->isInChatMode()) placeholder="{{ __('Use ENTER to send the message and SHIFT+ENTER for a new line') }}" @endif>{{ old('body', $conversation->body) }}</textarea>
<div class="help-block has-error">
@include('partials/field_error', ['field'=>'body'])
</div>
</div>
</form>
</div>
<div class="clearfix"></div>
@include('conversations/editor_bottom_toolbar')
@action('reply_form.after', $conversation)
</div>
</div>
</div>
</div>
<div id="conv-layout-customer">
@include('conversations/partials/customer_sidebar')
</div>
<div id="conv-layout-main">
@include('conversations/partials/threads')
</div>
</div>
@endsection
@section('body_bottom')
@parent
@include('conversations.partials.settings_modal', ['conversation' => $conversation])
@append
@include('partials/editor')
@section('javascript')
@parent
initReplyForm();
initConversation();
@endsection