Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
{% block _config_smsconfig_widget %}
|
||||
<h4 class="fw-sb mt-48 mb-xs">{{ 'mautic.config.tab.smsconfig'|trans }}</h4>
|
||||
<div class="text-muted small pb-md">{{ 'mautic.core.config.header.smsconfig.description'|trans }}</div>
|
||||
<div class="row">
|
||||
<div class="panel panel-default mb-md">
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
{% if form.sms_transport.vars.choices|length %}
|
||||
{{ form_row(form.sms_transport) }}
|
||||
{% else %}
|
||||
{{ 'mautic.sms.config.smsconfig'|trans }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="col-xs-12">
|
||||
{{ form_row(form.sms_disable_trackable_urls) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% block _smssend_list_row %}
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
{{ form_row(form.sms) }}
|
||||
</div>
|
||||
<div class="col-xs-4 mt-lg">
|
||||
<div class="mt-3">
|
||||
{{ form_row(form.newSmsButton) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,230 @@
|
||||
{% if not isEmbedded %}
|
||||
{% extends '@MauticCore/Default/content.html.twig' %}
|
||||
{% endif %}
|
||||
|
||||
{% block mauticContent %}sms{% endblock %}
|
||||
{% block headerTitle %}{{sms.getName()}}{% endblock %}
|
||||
|
||||
{% block preHeader %}
|
||||
{{- include('@MauticCore/Helper/page_actions.html.twig',
|
||||
{
|
||||
'item' : sms,
|
||||
'templateButtons' : {
|
||||
'close' : securityHasEntityAccess(
|
||||
permissions['sms:smses:viewown'],
|
||||
permissions['sms:smses:viewother'],
|
||||
sms.getCreatedBy()
|
||||
),
|
||||
},
|
||||
'routeBase' : 'sms',
|
||||
'targetLabel': 'mautic.sms.smses'|trans
|
||||
}
|
||||
) -}}
|
||||
{{ include('@MauticCore/Modules/category--inline.html.twig', {'category': sms.category}) }}
|
||||
{{ include('@MauticProject/Modules/projects.html.twig', {'item': sms}) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block actions %}
|
||||
{% set customButtons = [] %}
|
||||
{{- include('@MauticCore/Helper/page_actions.html.twig',
|
||||
{
|
||||
'item' : sms,
|
||||
'customButtons' : customButtons is defined ? customButtons : [],
|
||||
'templateButtons' : {
|
||||
'edit' : securityHasEntityAccess(
|
||||
permissions['sms:smses:editown'],
|
||||
permissions['sms:smses:editother'],
|
||||
sms.getCreatedBy()
|
||||
),
|
||||
'clone' : permissions['sms:smses:create'],
|
||||
'delete' : securityHasEntityAccess(
|
||||
permissions['sms:smses:deleteown'],
|
||||
permissions['sms:smses:deleteother'],
|
||||
sms.getCreatedBy()
|
||||
),
|
||||
},
|
||||
'routeBase' : 'sms',
|
||||
}
|
||||
) -}}
|
||||
{% endblock %}
|
||||
|
||||
{% block publishStatus %}
|
||||
{{- include('@MauticCore/Helper/publishstatus_badge.html.twig', {
|
||||
'entity': sms,
|
||||
'status': sms.getPublishUp() is not null ? 'sending' : 'available'
|
||||
}) -}}
|
||||
<div class="label__divider"></div>
|
||||
{% set tags = [
|
||||
{
|
||||
color: 'warm-gray',
|
||||
label: smsType == 'list'
|
||||
? 'mautic.sms.type.list.header'
|
||||
: (smsType == 'template' ? 'mautic.sms.type.template.header' : type)
|
||||
}
|
||||
] %}
|
||||
|
||||
{# Translation tags #}
|
||||
{% set tags = tags
|
||||
|merge(sms.isTranslation and not sms.isTranslation(true)
|
||||
? [{ color: 'warm-gray', label: 'mautic.core.icon_tooltip.translation' }]
|
||||
: [])
|
||||
|merge(sms.isTranslation(true)
|
||||
? [{ color: 'warm-gray', label: 'mautic.core.translation_of'|trans({'%parent%' : translations.parent.name}), icon: 'ri-translate' }]
|
||||
: [])
|
||||
%}
|
||||
|
||||
{% include '@MauticCore/Helper/_tag.html.twig' with { tags: tags } %}
|
||||
{% endblock %}
|
||||
|
||||
{% set smsType = sms.getSmsType() %}
|
||||
{% if smsType is empty %}
|
||||
{% set smsType = 'template' %}
|
||||
{% endif %}
|
||||
|
||||
{% set translationContent = include('@MauticCore/Translation/index.html.twig',
|
||||
{
|
||||
'activeEntity' : sms,
|
||||
'translations' : translations,
|
||||
'model' : 'sms',
|
||||
'actionRoute' : 'mautic_sms_action',
|
||||
}
|
||||
) %}
|
||||
{% set showTranslations = translationContent|trim is not empty %}
|
||||
|
||||
{% block content %}
|
||||
<!-- start: box layout -->
|
||||
<div class="box-layout">
|
||||
<!-- left section -->
|
||||
<div class="col-md-7 col-lg-9 height-auto">
|
||||
<div>
|
||||
<!-- page detail header -->
|
||||
<!-- sms detail collapseable toggler -->
|
||||
<div class="collapse pr-md pl-md" id="sms-details">
|
||||
<div class="pr-md pl-md pb-md">
|
||||
<div class="panel shd-none mb-0">
|
||||
<table class="table table-hover mb-0">
|
||||
<tbody>
|
||||
{{- include('@MauticCore/Helper/details.html.twig', {'entity' : sms}) -}}
|
||||
{% if sms.getSmsType() == 'list' %}
|
||||
<tr>
|
||||
<td width="20%"><span class="fw-b textTitle">{{ 'mautic.lead.lead.lists'|trans }}</span></td>
|
||||
<td>
|
||||
{% set segments = sms.getLists %}
|
||||
{% set segmentNames = segments.toArray|map(segment => segment.getName) %}
|
||||
{{ segmentNames|join(', ') }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ sms detail collapseable toggler -->
|
||||
<div>
|
||||
<div class="hr-expand nm">
|
||||
<span data-toggle="tooltip" title="Detail">
|
||||
<a href="javascript:void(0)" class="arrow text-secondary collapsed" data-toggle="collapse" data-target="#sms-details">
|
||||
<span class="caret"></span> {{ 'mautic.core.details'|trans }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<!-- some stats -->
|
||||
<div class="pa-md">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
{% if security.isGranted('lead:leads:viewown') %}
|
||||
{{ include('@MauticCore/Modules/stat--icon.html.twig', {'stats': [
|
||||
{
|
||||
'title': 'mautic.lead.lead.contacts.sms_sent',
|
||||
'value': sms.sentCount,
|
||||
'link': path('mautic_contact_index', {
|
||||
'search': ('mautic.lead.lead.searchcommand.sms_sent'|trans) ~ ':' ~ sms.id
|
||||
}),
|
||||
'icon': 'ri-message-2-line'
|
||||
}
|
||||
]}) }}
|
||||
{% endif %}
|
||||
<div class="panel">
|
||||
<div class="panel-body box-layout">
|
||||
<div class="col-md-3 va-m">
|
||||
<h5 class="text-white dark-md fw-sb mb-xs">
|
||||
<span class="ri-line-chart-fill"></span>
|
||||
{{ 'mautic.core.stats'|trans }}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-md-9 va-m">
|
||||
{{- include('@MauticCore/Helper/graph_dateselect.html.twig', {'dateRangeForm' : dateRangeForm, 'class' : 'pull-right'}) -}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex fd-column pt-0 pl-15 pb-15 pr-15 min-h-256">
|
||||
{{- include('@MauticCore/Helper/chart.html.twig', {'chartData' : entityViews, 'chartType' : 'line', 'chartHeight' : 300}) -}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/ stats -->
|
||||
|
||||
{{ customContent('details.stats.graph.below', _context) }}
|
||||
|
||||
<!-- tabs controls -->
|
||||
<ul class="nav nav-tabs nav-tabs-contained">
|
||||
<li class="active">
|
||||
<a href="#clicks-container" role="tab" data-toggle="tab">
|
||||
{{ 'mautic.trackable.click_counts'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="#contacts-container" role="tab" data-toggle="tab">
|
||||
{{ 'mautic.lead.leads'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{% if showTranslations %}
|
||||
<li>
|
||||
<a href="#translation-container" role="tab" data-toggle="tab">
|
||||
{{ 'mautic.core.translations'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<!--/ tabs controls -->
|
||||
</div>
|
||||
|
||||
<!-- start: tab-content -->
|
||||
<div class="tab-content pa-md">
|
||||
<div class="tab-pane active bdr-w-0" id="clicks-container">
|
||||
{{- include('@MauticPage/Trackable/click_counts.html.twig', {
|
||||
'trackables' : trackables,
|
||||
'entity' : sms,
|
||||
'channel' : 'sms'
|
||||
}) -}}
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade in bdr-w-0 page-list" id="contacts-container">
|
||||
{{ contacts|raw }}
|
||||
</div>
|
||||
|
||||
{% if showTranslations %}
|
||||
<div class="tab-pane bdr-w-0" id="translation-container">
|
||||
{{ translationContent|raw }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- end: tab-content -->
|
||||
</div>
|
||||
<!--/ left section -->
|
||||
|
||||
<!-- right section -->
|
||||
<div class="col-md-5 col-lg-3 height-auto">
|
||||
<!-- activity feed -->
|
||||
<div class="mb-48" style="zoom: 0.8;">{{ include('@MauticSms/Sms/preview.html.twig') }}</div>
|
||||
{{- include('@MauticCore/Helper/recentactivity.html.twig', {'logs' : logs}) -}}
|
||||
</div>
|
||||
<!--/ right section -->
|
||||
<input name="entityId" id="entityId" type="hidden" value="{{ sms.getId() }}" />
|
||||
</div>
|
||||
<!--/ end: box layout -->
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,83 @@
|
||||
{% extends '@MauticCore/FormTheme/form_simple.html.twig' %}
|
||||
{% form_theme form with [
|
||||
'@MauticSms/FormTheme/SmsSendList/smssend_list_row.html.twig'
|
||||
] %}
|
||||
|
||||
{% block mauticContent %}sms{% endblock %}
|
||||
{# @var sms \Mautic\SmsBundle\Entity\Sms #}
|
||||
{% set type = sms.getSmsType() %}
|
||||
{% set isExisting = sms.getId() %}
|
||||
{% set translationBase = 'mautic.sms' %}
|
||||
{% set mauticContent = 'sms' %}
|
||||
|
||||
{% block primaryFormContent %}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{{ form_row(form.name) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="characters-count">
|
||||
<label class="control-label" for="" data-toggle="tooltip" data-container="body" data-placement="top" title="" data-original-title="{{ 'mautic.sms.form.nbcharacter.infobox'|trans }}">
|
||||
{{ 'mautic.sms.form.nbcharacter.counter'|trans }}
|
||||
<span size="sm" class="label label-gray" id="sms_nb_char">0</span>
|
||||
</label>
|
||||
</div>
|
||||
{{ form_row(form.message) }}
|
||||
<i class="text-secondary">{{ 'mautic.sms.token.dropdown.hint'|trans|purify }}</i>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block rightFormContent %}
|
||||
{{ form_row(form.category) }}
|
||||
{{ form_row(form.projects) }}
|
||||
{{ form_row(form.language) }}
|
||||
{{ form_row(form.translationParentSelector) }}
|
||||
{{ form_row(form.isPublished, {
|
||||
'attr': {
|
||||
'data-none': 'mautic.core.form.sending_paused',
|
||||
'data-start': 'mautic.core.form.sending_on_scheduled_start',
|
||||
'data-both': 'mautic.core.form.sending_during_scheduled_period',
|
||||
'data-end': 'mautic.core.form.available_until_scheduled_end'
|
||||
}
|
||||
}) }}
|
||||
|
||||
<div id="leadList"{% if 'template' == type %} class="hide"{% endif %}>
|
||||
{{ form_row(form.lists) }}
|
||||
{{ form_row(form.publishUp, {'label': 'mautic.core.form.sending.start_at'}) }}
|
||||
{{ form_row(form.publishDown, {'label': 'mautic.core.form.sending.stop_at'}) }}
|
||||
</div>
|
||||
|
||||
<div class="hide">
|
||||
{{ form_rest(form) }}
|
||||
</div>
|
||||
|
||||
{% if (updateSelect is not defined or updateSelect is empty) and not isExisting and not formContainsErrors(form) or type is empty %}
|
||||
{{- include('@MauticCore/Helper/form_selecttype.html.twig',
|
||||
{
|
||||
'item' : sms,
|
||||
'mauticLang' : {
|
||||
'newListSms' : 'mautic.sms.type.list.header',
|
||||
'newTemplateSms' : 'mautic.sms.type.template.header',
|
||||
},
|
||||
'typePrefix' : 'sms',
|
||||
'cancelUrl' : 'mautic_sms_index',
|
||||
'header' : 'mautic.sms.type.header',
|
||||
'typeOneHeader' : 'mautic.sms.type.template.header',
|
||||
'typeOnePictogram': 'process--automation',
|
||||
'typeOneTag' : 'mautic.sms.type.template.tag',
|
||||
'typeOneDifferences' : ['mautic.sms.type.template.differences.1st', 'mautic.sms.type.template.differences.2nd', 'mautic.sms.type.template.differences.3rd', 'mautic.sms.type.template.differences.4th', 'mautic.sms.type.template.differences.5th'],
|
||||
'typeOneOnClick' : "Mautic.selectSmsType('template');",
|
||||
'typeTwoHeader' : 'mautic.sms.type.list.header',
|
||||
'typeTwoTag' : 'mautic.sms.type.list.tag',
|
||||
'typeTwoPictogram': 'chart--pie',
|
||||
'typeTwoDifferences' : ['mautic.sms.type.list.differences.1st', 'mautic.sms.type.list.differences.2nd', 'mautic.sms.type.list.differences.3rd', 'mautic.sms.type.list.differences.4th', 'mautic.sms.type.list.differences.5th'],
|
||||
'typeTwoOnClick' : "Mautic.selectSmsType('list');",
|
||||
}
|
||||
) -}}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,26 @@
|
||||
{% extends '@MauticCore/Default/content.html.twig' %}
|
||||
{% block mauticContent %}sms{% endblock %}
|
||||
{% block headerTitle %}{{ 'mautic.sms.smses'|trans }}{% endblock %}
|
||||
{% block actions %}
|
||||
{{- include('@MauticCore/Helper/page_actions.html.twig',
|
||||
{
|
||||
'templateButtons' : {
|
||||
'new' : permissions['sms:smses:create'],
|
||||
},
|
||||
'routeBase' : 'sms',
|
||||
}
|
||||
) -}}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div id="page-list-wrapper" class="panel panel-default">
|
||||
{{- include('@MauticCore/Helper/list_toolbar.html.twig', {
|
||||
'searchValue' : searchValue,
|
||||
'searchId' : 'sms-search',
|
||||
'action' : currentRoute,
|
||||
}) -}}
|
||||
|
||||
<div class="page-list">
|
||||
{{ block('listResults') }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,218 @@
|
||||
{% set isIndex = tmpl == 'index' ? true : false %}
|
||||
{% set tmpl = 'list' %}
|
||||
{% extends isIndex ? '@MauticCore/Default/content.html.twig' : '@MauticCore/Default/raw_output.html.twig' %}
|
||||
{% block mauticContent %}sms{% endblock %}
|
||||
{% block headerTitle %}{{ 'mautic.sms.smses'|trans }}{% endblock %}
|
||||
{% block content %}
|
||||
{% if isIndex %}
|
||||
<div id="page-list-wrapper" class="{% if items|length > 0 or searchValue is not empty %}panel {% endif %}panel-default">
|
||||
{{- include('@MauticCore/Helper/list_toolbar.html.twig', {
|
||||
'searchValue': searchValue,
|
||||
'searchId': 'sms-search',
|
||||
'action': currentRoute,
|
||||
'page_actions': {
|
||||
'templateButtons': {
|
||||
'new': permissions['sms:smses:create']
|
||||
},
|
||||
'routeBase': 'sms'
|
||||
},
|
||||
'quickFilters': [
|
||||
{
|
||||
'search': 'mautic.core.searchcommand.ispublished',
|
||||
'label': 'mautic.core.form.available',
|
||||
'tooltip': 'mautic.core.searchcommand.ispublished.description',
|
||||
'icon': 'ri-check-line'
|
||||
},
|
||||
{
|
||||
'search': 'mautic.core.searchcommand.isunpublished',
|
||||
'label': 'mautic.core.form.unavailable',
|
||||
'tooltip': 'mautic.core.searchcommand.isunpublished.description',
|
||||
'icon': 'ri-close-line'
|
||||
},
|
||||
{
|
||||
'search': 'mautic.core.searchcommand.isuncategorized',
|
||||
'label': 'mautic.core.form.uncategorized',
|
||||
'tooltip': 'mautic.core.searchcommand.isuncategorized.description',
|
||||
'icon': 'ri-folder-unknow-line'
|
||||
},
|
||||
{
|
||||
'search': 'mautic.core.searchcommand.ismine',
|
||||
'label': 'mautic.core.searchcommand.ismine.label',
|
||||
'tooltip': 'mautic.core.searchcommand.ismine.description',
|
||||
'icon': 'ri-user-line'
|
||||
}
|
||||
]
|
||||
}) -}}
|
||||
|
||||
<div class="page-list">
|
||||
{{ block('listResults') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ include('@MauticCore/Modules/protip.html.twig', {
|
||||
tip: random(['mautic.protip.sms.concise', 'mautic.protip.sms.timesensitive', 'mautic.protip.sms.compliance'])
|
||||
}) }}
|
||||
{% else %}
|
||||
{{ block('listResults') }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block listResults %}
|
||||
{% if items|length > 0 %}
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover sms-list">
|
||||
<thead>
|
||||
<tr>
|
||||
{{- include(
|
||||
'@MauticCore/Helper/tableheader.html.twig',
|
||||
{
|
||||
'checkall' : 'true',
|
||||
'routeBase' : 'sms',
|
||||
'templateButtons' : {
|
||||
'delete' : permissions['sms:smses:deleteown'] or permissions['sms:smses:deleteother'],
|
||||
}
|
||||
}
|
||||
) -}}
|
||||
|
||||
{{- include(
|
||||
'@MauticCore/Helper/tableheader.html.twig',
|
||||
{
|
||||
'sessionVar' : 'sms',
|
||||
'orderBy' : 'e.name',
|
||||
'text' : 'mautic.core.name',
|
||||
'class' : 'col-sms-name',
|
||||
'default' : true,
|
||||
}
|
||||
) -}}
|
||||
|
||||
{{- include(
|
||||
'@MauticCore/Helper/tableheader.html.twig',
|
||||
{
|
||||
'sessionVar' : 'sms',
|
||||
'orderBy' : 'c.title',
|
||||
'text' : 'mautic.core.category',
|
||||
'class' : 'visible-md visible-lg col-sms-category',
|
||||
}
|
||||
) -}}
|
||||
|
||||
<th class="visible-sm visible-md visible-lg col-sms-stats">{{ 'mautic.core.stats'|trans }}</th>
|
||||
|
||||
{{- include(
|
||||
'@MauticCore/Helper/tableheader.html.twig',
|
||||
{
|
||||
'sessionVar' : 'sms',
|
||||
'orderBy' : 'e.id',
|
||||
'text' : 'mautic.core.id',
|
||||
'class' : 'visible-md visible-lg col-sms-id',
|
||||
}
|
||||
) -}}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{# @var item \Mautic\SmsBundle\Entity\Sms #}
|
||||
{% for item in items %}
|
||||
{% set type = item.getSmsType() %}
|
||||
<tr>
|
||||
<td>
|
||||
{% set edit = securityHasEntityAccess(
|
||||
permissions['sms:smses:editown'],
|
||||
permissions['sms:smses:editother'],
|
||||
item.getCreatedBy()
|
||||
) %}
|
||||
{% set customButtons = [
|
||||
{
|
||||
'attr' : {
|
||||
'data-toggle' : 'ajaxmodal',
|
||||
'data-target' : '#MauticSharedModal',
|
||||
'data-header' : 'mautic.sms.smses.header.preview'|trans,
|
||||
'data-footer' : 'false',
|
||||
'href' : path('mautic_sms_action', { 'objectId' : item.getId(), 'objectAction' : 'preview' }),
|
||||
},
|
||||
'btnText' : 'mautic.sms.preview'|trans,
|
||||
'iconClass' : 'ri-share-forward-box-fill',
|
||||
}
|
||||
] %}
|
||||
{{- include(
|
||||
'@MauticCore/Helper/list_actions.html.twig',
|
||||
{
|
||||
'item' : item,
|
||||
'templateButtons' : {
|
||||
'edit' : edit,
|
||||
'clone' : permissions['sms:smses:create'],
|
||||
'delete' : securityHasEntityAccess(
|
||||
permissions['sms:smses:deleteown'],
|
||||
permissions['sms:smses:deleteother'],
|
||||
item.getCreatedBy()
|
||||
),
|
||||
},
|
||||
'routeBase' : 'sms',
|
||||
'customButtons' : customButtons,
|
||||
}
|
||||
) -}}
|
||||
</td>
|
||||
<td>
|
||||
<div>
|
||||
{{- include('@MauticCore/Helper/publishstatus_icon.html.twig',
|
||||
{
|
||||
'item' : item,
|
||||
'model' : 'sms',
|
||||
}
|
||||
) -}}
|
||||
<a href="{{ path('mautic_sms_action', {'objectAction' : 'view', 'objectId' : item.getId()}) }}" data-toggle="ajax">
|
||||
{{ item.getName() }}
|
||||
{% if item.isTranslation() %}
|
||||
<span data-toggle="tooltip" title="{{ 'mautic.core.icon_tooltip.translation'|trans }}"><i class="ri-fw ri-translate fs-14"></i></span>
|
||||
{% endif %}
|
||||
{% if 'list' == type %}
|
||||
<span data-toggle="tooltip" title="{{ 'mautic.sms.icon_tooltip.list_sms'|trans }}">
|
||||
<i class="ri-pie-chart-line fs-14"></i>
|
||||
</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
{{ include('@MauticProject/Modules/projects.html.twig') }}
|
||||
</div>
|
||||
</td>
|
||||
<td class="visible-md visible-lg">
|
||||
{{ include('@MauticCore/Modules/category--expanded.html.twig', {'category': item.getCategory()}) }}
|
||||
</td>
|
||||
{{- include('@MauticSms/Sms/list_stats.html.twig', { 'item' : item }) -}}
|
||||
<td class="visible-md visible-lg">{{ item.getId() }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
{{- include('@MauticCore/Helper/pagination.html.twig', {
|
||||
'totalItems' : totalItems,
|
||||
'page' : page,
|
||||
'limit' : limit,
|
||||
'baseUrl' : path('mautic_sms_index'),
|
||||
'sessionVar' : 'sms',
|
||||
}) -}}
|
||||
</div>
|
||||
{% elseif not configured %}
|
||||
{{- include('@MauticCore/Helper/noresults.html.twig', { 'header' : 'mautic.sms.disabled', 'message' : 'mautic.sms.enable.in.configuration' }) -}}
|
||||
{% else %}
|
||||
{% if searchValue is not empty %}
|
||||
{{- include('@MauticCore/Helper/noresults.html.twig', {'tip' : 'mautic.category.noresults.tip'}) -}}
|
||||
{% else %}
|
||||
<div class="mt-80 col-md-offset-2 col-lg-offset-3 col-md-8 col-lg-5 height-auto">
|
||||
{% set childContainer %}
|
||||
<div class="mt-32 mb-md">
|
||||
{% include '@MauticCore/Components/pictogram.html.twig' with {
|
||||
'pictogram': 'mobile--chat',
|
||||
'size': '80'
|
||||
} %}
|
||||
</div>
|
||||
{% endset %}
|
||||
{% include '@MauticCore/Components/content-block.html.twig' with {
|
||||
heading: 'mautic.sms.contentblock.heading',
|
||||
subheading: 'mautic.sms.contentblock.subheading',
|
||||
copy: 'mautic.sms.contentblock.copy',
|
||||
childContainer: childContainer
|
||||
} %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,23 @@
|
||||
<div class="pa-md">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="panel">
|
||||
<div class="panel-body box-layout">
|
||||
<div class="col-xs-4 va-m">
|
||||
<h5 class="text-white dark-md fw-sb mb-xs">
|
||||
<span class="ri-mail-line"></span>
|
||||
{{ 'mautic.sms.lead.list.comparison'|trans }}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-xs-8 va-m" id="legend"></div>
|
||||
</div>
|
||||
<div class="pt-0 pl-15 pb-10 pr-15">
|
||||
<div>
|
||||
<canvas id="list-compare-chart" height="300"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div id="list-compare-chart-data" class="hide">{{ stats|json_encode|raw }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,23 @@
|
||||
{# @var item \Mautic\SmsBundle\Entity\Sms #}
|
||||
{% set type = item.getSmsType() %}
|
||||
<td class="visible-sm visible-md visible-lg col-stats" data-stats="{{ item.getId() }}">
|
||||
{% if 'list' == type %}
|
||||
<span size="sm" class="mt-xs label label-gray clickable-stat{{ item.getPendingCount() > 0 and 'list' == item.getSmsType() ? '' : ' hide' }}"
|
||||
id="pending-{{ item.getId() }}"
|
||||
data-toggle="tooltip"
|
||||
title="{{ 'mautic.channel.stat.leadcount.tooltip'|trans }}">
|
||||
<a href="{{ path('mautic_contact_index', { 'search' : 'mautic.lead.lead.searchcommand.sms_pending'|trans ~ ':' ~ item.getId() }) }}">
|
||||
{{ 'mautic.sms.stat.leadcount'|trans({'%count%' : item.getPendingCount()}) }}
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
<span class="mt-xs label label-green"
|
||||
id="sent-count-{{ item.getId() }}"
|
||||
data-toggle="tooltip"
|
||||
title="{{ 'mautic.channel.stat.leadcount.tooltip'|trans }}">
|
||||
<a href="{{ path('mautic_contact_index',{'search' : 'mautic.lead.lead.searchcommand.sms_sent'|trans ~ ':' ~ item.getId()}) }}">
|
||||
{{ 'mautic.sms.stat.sentcount'|trans({'%count%' : item.getSentCount(true)}) }}
|
||||
</a>
|
||||
</span>
|
||||
</td>
|
||||
@@ -0,0 +1,88 @@
|
||||
{# sms @var \Mautic\SmsBundle\Entity\Sms #}
|
||||
<div class="d-flex jc-center pa-md">
|
||||
<div class="phone-preview animation--slide-in-right">
|
||||
<div class="phone-preview__silence-switch phone-preview__button--outer"></div>
|
||||
<div class="phone-preview__volume-rocker--top phone-preview__button--outer"></div>
|
||||
<div class="phone-preview__volume-rocker--bottom phone-preview__button--outer"></div>
|
||||
<div class="phone-preview__power-button phone-preview__button--outer"></div>
|
||||
|
||||
<div class="phone-preview__top-section">
|
||||
<div class="phone-preview__top-bar">
|
||||
<div class="phone-preview__time">12:00</div>
|
||||
<div class="phone-preview__notch">
|
||||
<div class="phone-preview__speaker">
|
||||
<div class="phone-preview__front-camera"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="phone-preview__status-icons">
|
||||
<i class="ri-signal-tower-line"></i>
|
||||
<i class="ri-wifi-fill"></i>
|
||||
<i class="ri-battery-fill"></i>
|
||||
</div>
|
||||
</div>
|
||||
<i class="phone-preview__back-arrow phone-preview__back-arrow--left"></i>
|
||||
<div class="phone-preview__user-avatar">
|
||||
<i class="ri-account-circle-fill"></i>
|
||||
</div>
|
||||
<div class="phone-preview__user-name">{{ configGetParameter('brand_name') }}</div>
|
||||
</div>
|
||||
|
||||
<div class="phone-preview__messages">
|
||||
<div class="phone-preview__message phone-preview__message--from">
|
||||
<span class="phone-preview__message-content">{{ sms.getMessage() }}</span>
|
||||
</div>
|
||||
<div class="phone-preview__message phone-preview__message--to">{{ 'mautic.sms.preview.demo.message'|trans }}</div>
|
||||
</div>
|
||||
|
||||
<div class="phone-preview__keyboard">
|
||||
<div class="phone-preview__keyboard-input">
|
||||
<div class="phone-preview__input-addon">
|
||||
<i class="ri-camera-fill"></i>
|
||||
</div>
|
||||
<div class="phone-preview__cursor">
|
||||
<i class="ri-arrow-up-circle-fill phone-preview__send-button"></i>
|
||||
</div>
|
||||
<input type="text" class="phone-preview__input-field" placeholder="{{ 'mautic.sms.preview.input.placeholder'|trans }}" maxlength="1000"/>
|
||||
</div>
|
||||
|
||||
<div class="phone-preview__keypad">
|
||||
<div class="phone-preview__key-row">
|
||||
{% for letter in ['Q','W','E','R','T','Y','U','I','O','P'] %}
|
||||
<div class="phone-preview__key--white phone-preview__key--clickable">{{ letter }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="phone-preview__key-spacer"></div>
|
||||
<div class="phone-preview__key-row">
|
||||
{% for letter in ['A','S','D','F','G','H','J','K','L'] %}
|
||||
<div class="phone-preview__key--white phone-preview__key--clickable">{{ letter }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="phone-preview__key-spacer"></div>
|
||||
<div class="phone-preview__key-row">
|
||||
<div class="phone-preview__key--white phone-preview__key--shift">⇧</div>
|
||||
{% for letter in ['Z','X','C','V','B','N','M'] %}
|
||||
<div class="phone-preview__key--white phone-preview__key--clickable">{{ letter }}</div>
|
||||
{% endfor %}
|
||||
<div class="phone-preview__key--grey phone-preview__key--backspace">
|
||||
<i class="ri-delete-back-2-fill"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="phone-preview__key-spacer"></div>
|
||||
<div class="phone-preview__key-row">
|
||||
<div class="phone-preview__key--grey">123</div>
|
||||
<div class="phone-preview__key--grey phone-preview__key--emoji">
|
||||
<i class="ri-emoji-sticker-line"></i>
|
||||
</div>
|
||||
<div class="phone-preview__key--space">space</div>
|
||||
<div class="phone-preview__key--grey phone-preview__key--return">return</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="phone-preview__bottom-symbols">
|
||||
<i class="ri-global-fill phone-preview__symbol--globe"></i>
|
||||
<i class="ri-mic-fill phone-preview__symbol--mic"></i>
|
||||
</div>
|
||||
<div class="phone-preview__home-button"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,26 @@
|
||||
<div class="pa-md">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="panel">
|
||||
<div class="panel-body box-layout">
|
||||
<div class="col-xs-4 va-m">
|
||||
<h5 class="text-white dark-md fw-sb mb-xs">
|
||||
<span class="ri-mail-line"></span>
|
||||
{{ 'mautic.sms.stats'|trans }}
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-xs-6 va-m" id="legend"></div>
|
||||
<div class="col-xs-2 va-m">
|
||||
{{- include('@MauticCore/Helper/graph_dateselect.htm.twig', {'mescallbacksage' : 'updateSmsStatsChart'}) -}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="pt-0 pl-15 pb-10 pr-15">
|
||||
<div>
|
||||
<canvas id="stat-chart" height="300"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div id="stat-chart-data" class="hide">{{ stats|json_encode|raw }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,22 @@
|
||||
{% if showMore is defined %}
|
||||
<a href="{{ url('mautic_sms_index', {'search': searchString}) }}" data-toggle="ajax">
|
||||
<span>{{ 'mautic.core.search.more'|trans({'%count%': remaining}) }}</span>
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<a href="{{ url('mautic_sms_action', {'objectAction': 'view', 'objectId': item.id}) }}" data-toggle="ajax">
|
||||
<span class="fw-sb">{{ item.name }}</span>
|
||||
<span class="ml-4 mr-sm">#{{ item.id }}</span>
|
||||
{{- include('@MauticCore/Helper/publishstatus_badge.html.twig', {
|
||||
'entity': item,
|
||||
'status': 'active',
|
||||
'simplified': 'true'
|
||||
}) -}}
|
||||
</a>
|
||||
<span class="pull-right" data-toggle="tooltip" title="{{ 'mautic.sms.stat.sentcount.label'|trans }}"
|
||||
data-placement="left">
|
||||
<i class="ri-send-plane-line"></i>
|
||||
{{ item.sentCount }}
|
||||
</span>
|
||||
<div class="clearfix"></div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,56 @@
|
||||
{% set item = event.extra.stat is defined ? event.extra.stat : false %}
|
||||
{% if (item) %}
|
||||
{% set type = event.extra.type is defined ? event.extra.type : null %}
|
||||
<p>
|
||||
{% if item.isFailed is defined and item.isFailed is not empty and 'failed' == type %}
|
||||
{% set details = item.details|json_decode|raw %}
|
||||
{% set errors = '' %}
|
||||
{% if details.failed is defined %}
|
||||
{% set failedDetails = details.failed %}
|
||||
{% if failedDetails is not iterable %}
|
||||
{% set failedDetails = [failedDetails] %}
|
||||
{% endif %}
|
||||
{% set errors = failedDetails|join('<br />') %}
|
||||
{% endif %}
|
||||
<span class="text-danger mt-0 mb-10"><i class="ri-alert-line"></i>
|
||||
{% if errors is defined and errors is not empty %}
|
||||
{{ errors }}
|
||||
{% else %}
|
||||
{{ 'mautic.sms.timeline.event.failed'|trans }}
|
||||
{% endif %}
|
||||
</span>
|
||||
|
||||
{% endif %}
|
||||
{% if item.list_name is defined and item.list_name is not empty and 'failed' != type %}
|
||||
<br />{{ 'mautic.sms.timeline.event.list'|trans({ '%list%' : item.list_name }) }}
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
{% if errors is defined %}
|
||||
<p class="text-danger mt-0 mb-10">
|
||||
<i class="ri-alert-line"></i> {{ 'mautic.campaign.event.last_error'|trans ~ ': ' ~ errors }}
|
||||
</p>
|
||||
{% else %}
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{{ 'mautic.sms.timeline.status'|trans }}</dt>
|
||||
<dd>
|
||||
{% if item.is_failed is defined and item.is_failed is not empty %}
|
||||
{{ 'mautic.email.stat.failed'|trans }}
|
||||
{% else %}
|
||||
{{ 'mautic.email.send'|trans }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>{{ 'mautic.sms.timeline.type'|trans }}</dt>
|
||||
<dd>{{ item.type|trans }}</dd>
|
||||
</dl>
|
||||
{% endif %}
|
||||
|
||||
{% if item.message is defined and item.message is not empty %}
|
||||
<div class="small">
|
||||
<hr />
|
||||
<strong>{{ 'mautic.sms.timeline.content.heading'|trans }}</strong>
|
||||
<br />
|
||||
{{ item.message }}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -0,0 +1 @@
|
||||
<strong>{{ event.extra.message }}</strong>
|
||||
Reference in New Issue
Block a user