contact.twig (11753B)
1 {{ header }}{{ column_left }} 2 <div id="content"> 3 <div class="page-header"> 4 <div class="container-fluid"> 5 <div class="pull-right"> 6 <button id="button-send" data-loading-text="{{ text_loading }}" data-toggle="tooltip" title="{{ button_send }}" class="btn btn-primary" onclick="send('index.php?route=marketing/contact/send&user_token={{ user_token }}');"><i class="fa fa-envelope"></i></button> 7 <a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div> 8 <h1>{{ heading_title }}</h1> 9 <ul class="breadcrumb"> 10 {% for breadcrumb in breadcrumbs %} 11 <li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li> 12 {% endfor %} 13 </ul> 14 </div> 15 </div> 16 <div class="container-fluid"> 17 <div class="panel panel-default"> 18 <div class="panel-heading"> 19 <h3 class="panel-title"><i class="fa fa-envelope"></i> {{ heading_title }}</h3> 20 </div> 21 <div class="panel-body"> 22 <form class="form-horizontal"> 23 <div class="form-group"> 24 <label class="col-sm-2 control-label" for="input-store">{{ entry_store }}</label> 25 <div class="col-sm-10"> 26 <select name="store_id" id="input-store" class="form-control"> 27 <option value="0">{{ text_default }}</option> 28 29 {% for store in stores %} 30 31 <option value="{{ store.store_id }}">{{ store.name }}</option> 32 33 {% endfor %} 34 35 </select> 36 </div> 37 </div> 38 <div class="form-group"> 39 <label class="col-sm-2 control-label" for="input-to">{{ entry_to }}</label> 40 <div class="col-sm-10"> 41 <select name="to" id="input-to" class="form-control"> 42 <option value="newsletter">{{ text_newsletter }}</option> 43 <option value="customer_all">{{ text_customer_all }}</option> 44 <option value="customer_group">{{ text_customer_group }}</option> 45 <option value="customer">{{ text_customer }}</option> 46 <option value="affiliate_all">{{ text_affiliate_all }}</option> 47 <option value="affiliate">{{ text_affiliate }}</option> 48 <option value="product">{{ text_product }}</option> 49 </select> 50 </div> 51 </div> 52 <div class="form-group to" id="to-customer-group"> 53 <label class="col-sm-2 control-label" for="input-customer-group">{{ entry_customer_group }}</label> 54 <div class="col-sm-10"> 55 <select name="customer_group_id" id="input-customer-group" class="form-control"> 56 57 {% for customer_group in customer_groups %} 58 59 <option value="{{ customer_group.customer_group_id }}">{{ customer_group.name }}</option> 60 61 {% endfor %} 62 63 </select> 64 </div> 65 </div> 66 <div class="form-group to" id="to-customer"> 67 <label class="col-sm-2 control-label" for="input-customer"><span data-toggle="tooltip" title="{{ help_customer }}">{{ entry_customer }}</span></label> 68 <div class="col-sm-10"> 69 <input type="text" name="customers" value="" placeholder="{{ entry_customer }}" id="input-customer" class="form-control" /> 70 <div class="well well-sm" style="height: 150px; overflow: auto;"></div> 71 </div> 72 </div> 73 <div class="form-group to" id="to-affiliate"> 74 <label class="col-sm-2 control-label" for="input-affiliate"><span data-toggle="tooltip" title="{{ help_affiliate }}">{{ entry_affiliate }}</span></label> 75 <div class="col-sm-10"> 76 <input type="text" name="affiliates" value="" placeholder="{{ entry_affiliate }}" id="input-affiliate" class="form-control" /> 77 <div class="well well-sm" style="height: 150px; overflow: auto;"></div> 78 </div> 79 </div> 80 <div class="form-group to" id="to-product"> 81 <label class="col-sm-2 control-label" for="input-product"><span data-toggle="tooltip" title="{{ help_product }}">{{ entry_product }}</span></label> 82 <div class="col-sm-10"> 83 <input type="text" name="products" value="" placeholder="{{ entry_product }}" id="input-product" class="form-control" /> 84 <div class="well well-sm" style="height: 150px; overflow: auto;"></div> 85 </div> 86 </div> 87 <div class="form-group required"> 88 <label class="col-sm-2 control-label" for="input-subject">{{ entry_subject }}</label> 89 <div class="col-sm-10"> 90 <input type="text" name="subject" value="" placeholder="{{ entry_subject }}" id="input-subject" class="form-control" /> 91 </div> 92 </div> 93 <div class="form-group required"> 94 <label class="col-sm-2 control-label" for="input-message">{{ entry_message }}</label> 95 <div class="col-sm-10"> 96 <textarea name="message" placeholder="{{ entry_message }}" id="input-message" data-toggle="summernote" data-lang="{{ summernote }}" class="form-control"></textarea> 97 </div> 98 </div> 99 </form> 100 </div> 101 </div> 102 </div> 103 <link href="view/javascript/codemirror/lib/codemirror.css" rel="stylesheet" /> 104 <link href="view/javascript/codemirror/theme/monokai.css" rel="stylesheet" /> 105 <script type="text/javascript" src="view/javascript/codemirror/lib/codemirror.js"></script> 106 <script type="text/javascript" src="view/javascript/codemirror/lib/xml.js"></script> 107 <script type="text/javascript" src="view/javascript/codemirror/lib/formatting.js"></script> 108 <script type="text/javascript" src="view/javascript/summernote/summernote.js"></script> 109 <link href="view/javascript/summernote/summernote.css" rel="stylesheet" /> 110 <script type="text/javascript" src="view/javascript/summernote/summernote-image-attributes.js"></script> 111 <script type="text/javascript" src="view/javascript/summernote/opencart.js"></script> 112 <script type="text/javascript"><!-- 113 $('select[name=\'to\']').on('change', function() { 114 $('.to').hide(); 115 116 $('#to-' + this.value.replace('_', '-')).show(); 117 }); 118 119 $('select[name=\'to\']').trigger('change'); 120 //--></script> 121 <script type="text/javascript"><!-- 122 // Customers 123 $('input[name=\'customers\']').autocomplete({ 124 'source': function(request, response) { 125 $.ajax({ 126 url: 'index.php?route=customer/customer/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request), 127 dataType: 'json', 128 success: function(json) { 129 response($.map(json, function(item) { 130 return { 131 label: item['name'], 132 value: item['customer_id'] 133 } 134 })); 135 }, 136 error: function(xhr, ajaxOptions, thrownError) { 137 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 138 } 139 }); 140 }, 141 'select': function(item) { 142 $('input[name=\'customers\']').val(''); 143 144 $('#input-customer' + item['value']).remove(); 145 146 $('#input-customer').parent().find('.well').append('<div id="customer' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="customer[]" value="' + item['value'] + '" /></div>'); 147 } 148 }); 149 150 $('#input-customer').parent().find('.well').delegate('.fa-minus-circle', 'click', function() { 151 $(this).parent().remove(); 152 }); 153 154 // Affiliates 155 $('input[name=\'affiliates\']').autocomplete({ 156 'source': function(request, response) { 157 $.ajax({ 158 url: 'index.php?route=customer/customer/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request) + '&filter_affiliate=1', 159 dataType: 'json', 160 success: function(json) { 161 response($.map(json, function(item) { 162 return { 163 label: item['name'], 164 value: item['customer_id'] 165 } 166 })); 167 }, 168 error: function(xhr, ajaxOptions, thrownError) { 169 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 170 } 171 }); 172 }, 173 'select': function(item) { 174 $('input[name=\'affiliates\']').val(''); 175 176 $('#input-affiliate' + item['value']).remove(); 177 178 $('#input-affiliate').parent().find('.well').append('<div id="affiliate' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="affiliate[]" value="' + item['value'] + '" /></div>'); 179 } 180 }); 181 182 $('#input-affiliate').parent().find('.well').delegate('.fa-minus-circle', 'click', function() { 183 $(this).parent().remove(); 184 }); 185 186 // Products 187 $('input[name=\'products\']').autocomplete({ 188 'source': function(request, response) { 189 $.ajax({ 190 url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request), 191 dataType: 'json', 192 success: function(json) { 193 response($.map(json, function(item) { 194 return { 195 label: item['name'], 196 value: item['product_id'] 197 } 198 })); 199 }, 200 error: function(xhr, ajaxOptions, thrownError) { 201 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 202 } 203 }); 204 }, 205 'select': function(item) { 206 $('input[name=\'products\']').val(''); 207 208 $('#input-product' + item['value']).remove(); 209 210 $('#input-product').parent().find('.well').append('<div id="product' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product[]" value="' + item['value'] + '" /></div>'); 211 } 212 }); 213 214 $('#input-product').parent().find('.well').delegate('.fa-minus-circle', 'click', function() { 215 $(this).parent().remove(); 216 }); 217 218 function send(url) { 219 $.ajax({ 220 url: url, 221 type: 'post', 222 data: $('#content select, #content input, #content textarea'), 223 dataType: 'json', 224 beforeSend: function() { 225 $('#button-send').button('loading'); 226 }, 227 complete: function() { 228 $('#button-send').button('reset'); 229 }, 230 success: function(json) { 231 $('.alert-dismissible, .text-danger').remove(); 232 233 if (json['error']) { 234 if (json['error']['warning']) { 235 $('#content > .container-fluid').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> ' + json['error']['warning'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>'); 236 } 237 238 if (json['error']['email']) { 239 $('#content > .container-fluid').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> ' + json['error']['email'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>'); 240 } 241 242 if (json['error']['subject']) { 243 $('input[name=\'subject\']').after('<div class="text-danger">' + json['error']['subject'] + '</div>'); 244 } 245 246 if (json['error']['message']) { 247 $('textarea[name=\'message\']').parent().append('<div class="text-danger">' + json['error']['message'] + '</div>'); 248 } 249 } 250 251 if (json['success']) { 252 $('#content > .container-fluid').prepend('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>'); 253 } 254 255 if (json['next']) { 256 send(json['next']); 257 } 258 }, 259 error: function(xhr, ajaxOptions, thrownError) { 260 alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 261 } 262 }); 263 } 264 //--></script></div> 265 {{ footer }}