Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0 / 0  | 
              | 
      100.00%  | 
      0 / 0  | 
      CRAP |         | 
      0.00%  | 
      0 / 445  | 
     |
| {# | |
| This file is part of EC-CUBE | |
| Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved. | |
| http://www.lockon.co.jp/ | |
| This program is free software; you can redistribute it and/or | |
| modify it under the terms of the GNU General Public License | |
| as published by the Free Software Foundation; either version 2 | |
| of the License, or (at your option) any later version. | |
| This program is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with this program; if not, write to the Free Software | |
| Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
| #} | |
| {% extends 'default_frame.twig' %} | |
| {% set menus = ['product', 'product_edit'] %} | |
| {% block title %}商品管理{% endblock %} | |
| {% block sub_title %}商品登録{% endblock %} | |
| {% form_theme form 'Form/bootstrap_3_horizontal_layout.html.twig' %} | |
| {% block stylesheet %} | |
| <link rel="stylesheet" href="{{ app.config.admin_urlpath }}/assets/css/fileupload/jquery.fileupload.css"> | |
| <link rel="stylesheet" href="{{ app.config.admin_urlpath }}/assets/css/fileupload/jquery.fileupload-ui.css"> | |
| <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> | |
| <style> | |
| .ui-state-highlight { | |
| height: 148px; | |
| border: dashed 1px #ccc; | |
| background: #fff; | |
| } | |
| </style> | |
| {% endblock stylesheet %} | |
| {% block javascript %} | |
| <script src="{{ app.config.admin_urlpath }}/assets/js/vendor/fileupload/vendor/jquery.ui.widget.js"></script> | |
| <script src="{{ app.config.admin_urlpath }}/assets/js/vendor/fileupload/jquery.iframe-transport.js"></script> | |
| <script src="{{ app.config.admin_urlpath }}/assets/js/vendor/fileupload/jquery.fileupload.js"></script> | |
| <script src="{{ app.config.admin_urlpath }}/assets/js/vendor/fileupload/jquery.fileupload-process.js"></script> | |
| <script src="{{ app.config.admin_urlpath }}/assets/js/vendor/fileupload/jquery.fileupload-validate.js"></script> | |
| <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> | |
| <script> | |
| $(function() { | |
| $("#thumb").sortable({ | |
| cursor: 'move', | |
| opacity: 0.7, | |
| placeholder: 'ui-state-highlight', | |
| update: function (event, ui) { | |
| updateRank(); | |
| } | |
| }); | |
| {% if has_class == false %} | |
| if ($("#{{ form.class.stock_unlimited.vars.id }}").prop("checked")) { | |
| $("#{{ form.class.stock.vars.id }}").attr("disabled", "disabled").val(''); | |
| } else { | |
| $("#{{ form.class.stock.vars.id }}").removeAttr("disabled"); | |
| } | |
| $("#{{ form.class.stock_unlimited.vars.id }}").on("click change", function () { | |
| if ($(this).prop("checked")) { | |
| $("#{{ form.class.stock.vars.id }}").attr("disabled", "disabled").val(''); | |
| } else { | |
| $("#{{ form.class.stock.vars.id }}").removeAttr("disabled"); | |
| } | |
| }); | |
| {% endif %} | |
| var proto_img = '' | |
| + '<li class="ui-state-default">' | |
| + '<img src="__path__" />' | |
| + '<a class="delete-image">' | |
| + '<svg class="cb cb-close">' | |
| + '<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#cb-close"></use>' | |
| + '</svg>' | |
| + '</a>' | |
| + '</li>'; | |
| var proto_add = '{{ form_widget(form.add_images.vars.prototype) }}'; | |
| var proto_del = '{{ form_widget(form.delete_images.vars.prototype) }}'; | |
| {% for image in form.images %} | |
| var $img = $(proto_img.replace(/__path__/g, '{{ app.config.image_save_urlpath }}/{{ image.vars.value }}')); | |
| var $widget = $('{{ form_widget(image) }}'); | |
| $widget.val('{{ image.vars.value }}'); | |
| $("#thumb").append($img.append($widget)); | |
| {% endfor %} | |
| {% for add_image in form.add_images %} | |
| var $img = $(proto_img.replace(/__path__/g, '{{ app.config.image_temp_urlpath }}/{{ add_image.vars.value }}')); | |
| var $widget = $('{{ form_widget(add_image) }}'); | |
| $widget.val('{{ add_image.vars.value }}'); | |
| $("#thumb").append($img.append($widget)); | |
| {% endfor %} | |
| {% for delete_image in form.delete_images %} | |
| $("#thumb").append('{{ form_widget(delete_image) }}'); | |
| {% endfor %} | |
| var hideSvg = function () { | |
| if ($("#thumb li").length > 0) { | |
| $("#icon_no_image").css("display", "none"); | |
| } else { | |
| $("#icon_no_image").css("display", ""); | |
| } | |
| }; | |
| var updateRank = function () { | |
| $("#thumb li").each(function (index) { | |
| $(this).find(".rank_images").remove(); | |
| filename = $(this).find("input[type='hidden']").val(); | |
| $rank = $('<input type="hidden" class="rank_images" name="rank_images[]" />'); | |
| $rank.val(filename + '//' + parseInt(index + 1)); | |
| $(this).append($rank); | |
| }); | |
| } | |
| hideSvg(); | |
| updateRank(); | |
| // 画像削除時 | |
| var count_del = 0; | |
| $("#thumb").on("click", ".delete-image", function () { | |
| var $new_delete_image = $(proto_del.replace(/__name__/g, count_del)); | |
| var src = $(this).prev().attr('src') | |
| .replace('{{ app.config.image_temp_urlpath }}/', '') | |
| .replace('{{ app.config.image_save_urlpath }}/', ''); | |
| $new_delete_image.val(src); | |
| $("#thumb").append($new_delete_image); | |
| $(this).parent("li").remove(); | |
| hideSvg(); | |
| updateRank(); | |
| count_del++; | |
| }); | |
| var count_add = {{ form.add_images|length|default(0) }}; | |
| $('#{{ form.product_image.vars.id }}').fileupload({ | |
| url: "{{ url('admin_product_image_add') }}", | |
| type: "post", | |
| dataType: 'json', | |
| done: function (e, data) { | |
| $('#progress').hide(); | |
| $.each(data.result.files, function (index, file) { | |
| var path = '{{ app.config.image_temp_urlpath }}/' + file; | |
| var $img = $(proto_img.replace(/__path__/g, path)); | |
| var $new_img = $(proto_add.replace(/__name__/g, count_add)); | |
| $new_img.val(file); | |
| $child = $img.append($new_img); | |
| $('#thumb').append($child); | |
| count_add++; | |
| }); | |
| hideSvg(); | |
| updateRank(); | |
| }, | |
| fail: function (e, data) { | |
| alert('アップロードに失敗しました。'); | |
| }, | |
| always: function (e, data) { | |
| $('#progress').hide(); | |
| $('#progress .progress-bar').width('0%'); | |
| }, | |
| start: function (e, data) { | |
| $('#progress').show(); | |
| }, | |
| acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, | |
| maxFileSize: 10000000, | |
| maxNumberOfFiles: 10, | |
| progressall: function (e, data) { | |
| var progress = parseInt(data.loaded / data.total * 100, 10); | |
| $('#progress .progress-bar').css( | |
| 'width', | |
| progress + '%' | |
| ); | |
| }, | |
| processalways: function (e, data) { | |
| if (data.files.error) { | |
| alert("画像ファイルサイズが大きいか画像ファイルではありません。"); | |
| } | |
| } | |
| }); | |
| // 画像アップロード | |
| $('#file_upload').on('click', function () { | |
| $('#{{ form.product_image.vars.id }}').click(); | |
| }); | |
| }); | |
| function fnConfirm(action) { | |
| document.form1.action = action; | |
| document.form1.submit(); | |
| } | |
| function fnDelete(action) { | |
| if (confirm('この商品情報を削除しても宜しいですか?')) { | |
| document.form1.action = action; | |
| document.form1.submit(); | |
| } | |
| } | |
| function fnCopy(action) { | |
| if (confirm('この商品情報を複製しても宜しいですか?')) { | |
| document.form1.action = action; | |
| document.form1.submit(); | |
| } | |
| } | |
| function fnClass(action) { | |
| document.form1.action = action; | |
| document.form1.submit(); | |
| } | |
| </script> | |
| {% endblock javascript %} | |
| {% block main %} | |
| <form role="form" name="form1" id="form1" method="post" action="" novalidate enctype="multipart/form-data"> | |
| {{ form_widget(form._token) }} | |
| <div class="row" id="aside_wrap"> | |
| <div id="detail_wrap" class="col-md-9"> | |
| <div id="detail_box" class="box form-horizontal"> | |
| <div id="detail_box__header" class="box-header"> | |
| <h3 class="box-title">基本情報</h3> | |
| </div><!-- /.box-header --> | |
| <div id="detail_box__body" class="box-body"> | |
| {# 商品ID #} | |
| {% if Product.id %} | |
| <div id="detail_box__id" class="form-group"> | |
| <label class="col-sm-3 col-lg-2 control-label">商品ID</label> | |
| <div class="col-sm-9 col-lg-10 padT07">{{ Product.id }}</div> | |
| </div> | |
| {% endif %} | |
| {{ form_row(form.name) }} | |
| {% if has_class == false %} | |
| {{ form_row(form.class.product_type, { attr : { class : 'form-inline padT07' } } ) }} | |
| {% endif %} | |
| <div id="detail_box__image" class="form-group"> | |
| <label class="col-sm-2 control-label" for="admin_product_product_image"> | |
| {{ form.product_image.vars.label }}<br> | |
| <span class="small">620px以上推奨</span> | |
| </label> | |
| <div id="detail_files_box" class="col-sm-9 col-lg-10"> | |
| <div class="photo_files" id="drag-drop-area"> | |
| <svg id="icon_no_image" class="cb cb-photo no-image"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#cb-photo"></use></svg> | |
| <ul id="thumb" class="clearfix"></ul> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="form-group marB30"> | |
| <div id="detail_box__file_upload" class="col-sm-offset-2 col-sm-9 col-lg-10 "> | |
| <div id="progress" class="progress progress-striped active" style="display:none;"> | |
| <div class="progress-bar progress-bar-info"></div> | |
| </div> | |
| {{ form_widget(form.product_image, { attr : { accept : 'image/*', style : 'display:none;' } }) }} | |
| <a id="file_upload" class="with-icon"> | |
| <svg class="cb cb-plus"> <use xlink:href="#cb-plus" /></svg>ファイルをアップロード | |
| </a> | |
| </div> | |
| </div> | |
| <div id="detail_description_box" class="form-group"> | |
| {{ form_label(form.description_detail) }} | |
| <div id="detail_description_box__detail" class="col-sm-9 col-lg-10"> | |
| {{ form_widget(form.description_detail) }} | |
| <div id="detail_description_box__list" class="accordion marT15 marB20"><a id="detail_description_box__list_toggle" class="toggle with-icon"><svg class="cb cb-plus icon_plus"> <use xlink:href="#cb-plus" /></svg>一覧コメントを追加</a> | |
| <div class="accpanel padT08"> | |
| {{ form_widget(form.description_list) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| {% if has_class == false %} | |
| <div id="detail_box__price" class="form-group"> | |
| {{ form_label(form.class.price02) }} | |
| <div id="detail_box__price02" class="col-sm-3 col-lg-3"> | |
| {{ form_widget(form.class.price02) }} | |
| {{ form_errors(form.class.price02) }} | |
| <div id="detail_box__price01" class="accordion marT15 marB20"><a class="toggle with-icon"><svg class="cb cb-plus icon_plus"> <use xlink:href="#cb-plus" /></svg>通常価格を追加</a> | |
| <div class="accpanel padT08"> | |
| {{ form_widget(form.class.price01) }} | |
| {{ form_errors(form.class.price01) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div id="detail_box__stock" class="form-group"> | |
| {{ form_label(form.class.stock) }} | |
| <div class="col-sm-9 col-lg-10"> | |
| <div class="row"> | |
| <div id="detail_box__unlimited" class="col-xs-12 form-inline"> | |
| {{ form_widget(form.class.stock) }} | |
| {{ form_errors(form.class.stock) }} | |
| {{ form_widget(form.class.stock_unlimited) }} | |
| {{ form_errors(form.class.stock_unlimited) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| {% endif %} | |
| <div id="detail_category_box" class="form-group"> | |
| {{ form_label(form.Category) }} | |
| <div class="col-sm-9 col-lg-10"> | |
| <div class="accordion marT05"> | |
| <a id="detail_category_box__toggle" class="toggle with-icon"><svg class="cb cb-plus icon_plus"> <use xlink:href="#cb-plus" /></svg>カテゴリを選択</a> | |
| <div id="detail_category_box__list" class="accpanel padT08{% if form.Category.vars.valid == false %} has-error{% endif %}"> | |
| {{ form_widget(form.Category) }} | |
| {{ form_errors(form.Category) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div id="detail_tag_box" class="form-group"> | |
| {{ form_label(form.Tag) }} | |
| <div class="col-sm-9 col-lg-10"> | |
| <div class="accordion marT05"> | |
| <a id="detail_tags_box__toggle" class="toggle with-icon"><svg class="cb cb-plus icon_plus"> <use xlink:href="#cb-plus" /></svg>{{ 'Tag'|trans }}を選択</a> | |
| <div id="detail_tags_box__list" class="accpanel padT08"> | |
| {{ form_widget(form.Tag) }} | |
| {{ form_errors(form.Tag) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="extra-form"> | |
| {% for f in form.getIterator %} | |
| {% if f.vars.name matches '[^plg*]' %} | |
| {{ form_row(f) }} | |
| {% endif %} | |
| {% endfor %} | |
| </div> | |
| </div><!-- /.box-body --> | |
| </div><!-- /.box --> | |
| <div id="sub_detail_box" class="box accordion form-horizontal"> | |
| <div id="sub_detail_box__toggle" class="box-header toggle"> | |
| <h3 class="box-title">詳細な設定<svg class="cb cb-angle-down icon_down"> <use xlink:href="#cb-angle-down" /></svg></h3> | |
| </div><!-- /.box-header --> | |
| <div id="sub_detail_box__body" class="box-body accpanel"> | |
| {% if has_class == false %} | |
| {{ form_row(form.class.code) }} | |
| {{ form_row(form.class.sale_limit) }} | |
| {% endif %} | |
| {{ form_row(form.search_word) }} | |
| {% if has_class == false %} | |
| {{ form_row(form.class.delivery_date) }} | |
| {% if BaseInfo.option_product_delivery_fee %} | |
| <div id="sub_detail_box__delivery_fee" class="form-group"> | |
| {{ form_label(form.class.delivery_fee) }} | |
| <div class="col-sm-3 col-lg-3"> | |
| {{ form_widget(form.class.delivery_fee) }} | |
| </div> | |
| </div> | |
| {% endif %} | |
| {% if BaseInfo.option_product_tax_rule %} | |
| <div id="sub_detail_box__tax_rate" class="form-group"> | |
| {{ form_label(form.class.tax_rate) }} | |
| <div class="col-sm-3 col-lg-3"> | |
| {{ form_widget(form.class.tax_rate) }} | |
| </div> | |
| </div> | |
| {% endif %} | |
| {% endif %} | |
| </div> | |
| </div> | |
| <div id="free_box" class="box accordion"> | |
| <div id="free_box__body_toggle" class="box-header toggle"> | |
| <h3 class="box-title">フリーエリア<svg class="cb cb-angle-down icon_down"> <use xlink:href="#cb-angle-down" /></svg></h3> | |
| </div><!-- /.box-header --> | |
| <div id="free_box__body" class="box-body accpanel"> | |
| {{ form_widget(form.free_area, {id: 'wysiwyg-area'}) }} | |
| </div> | |
| </div> | |
| <div id="detail_box__footer" class="row hidden-xs hidden-sm"> | |
| <div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3 text-center btn_area"> | |
| <p><a href="{{ url('admin_product_page', { page_no : app.session.get('admin.product.search.page_no')|default('1') } ) }}?resume=1">検索画面に戻る</a></p> | |
| </div> | |
| </div> | |
| </div><!-- /.col --> | |
| <div id="common_box" class="col-md-3"> | |
| <div class="col_inner" id="aside_column"> | |
| <div id="common_button_box" class="box no-header"> | |
| <div id="common_button_box__body" class="box-body"> | |
| <div id="common_button_box__status" class="row"> | |
| <div class="col-xs-12"> | |
| <div class="form-group"> | |
| {{ form_widget(form.Status) }} | |
| {{ form_errors(form.Status) }} | |
| </div> | |
| </div> | |
| </div> | |
| <div id="common_button_box__insert_button" class="row text-center"> | |
| <div class="col-sm-6 col-sm-offset-3 col-md-12 col-md-offset-0"> | |
| <button type="submit" class="btn btn-primary btn-block btn-lg prevention-btn prevention-mask" >商品を登録</button> | |
| </div> | |
| </div> | |
| <div id="common_button_box__class_set_button" class="row text-center with-border"> | |
| <div class="col-sm-6 col-sm-offset-3 col-md-12 col-md-offset-0"> | |
| {% if id is null %} | |
| <button class="btn btn-default btn-block btn-sm" disabled> | |
| 規格設定 | |
| </button> | |
| {% else %} | |
| <button class="btn btn-default btn-block btn-sm" onclick="fnClass('{{ url('admin_product_product_class', { 'id' : id }) }}');return false;"> | |
| 規格設定 | |
| </button> | |
| {% endif %} | |
| </div> | |
| </div> | |
| <div id="common_button_box__operation_button" class="row text-center with-border"> | |
| <div class="col-sm-6 col-sm-offset-3 col-md-12 col-md-offset-0"> | |
| <ul class="col-3"> | |
| {% if id is null %} | |
| <li> | |
| <button class="btn btn-default btn-block btn-sm" disabled> | |
| 確認 | |
| </button> | |
| </li> | |
| <li> | |
| <button class="btn btn-default btn-block btn-sm" disabled> | |
| 複製 | |
| </button> | |
| </li> | |
| <li> | |
| <button class="btn btn-default btn-block btn-sm" disabled> | |
| 削除 | |
| </button> | |
| </li> | |
| {% else %} | |
| <li> | |
| <a class="btn btn-default btn-block btn-sm" href="{{ url('admin_product_product_display', {'id' : id}) }}" target="_blank"> | |
| 確認 | |
| </a> | |
| </li> | |
| <li> | |
| <a class="btn btn-default btn-block btn-sm" href="{{ url('admin_product_product_copy', {'id' : Product.id}) }}" {{ csrf_token_for_anchor() }} data-method="post" data-message="この商品情報を複製してもよろしいですか?"> | |
| 複製 | |
| </a> | |
| </li> | |
| <li> | |
| <a class="btn btn-default btn-block btn-sm" href="{{ url('admin_product_product_delete', {'id' : Product.id}) }}" {{ csrf_token_for_anchor() }} data-method="delete" data-message="この商品情報を削除してもよろしいですか?"> | |
| 削除 | |
| </a> | |
| </li> | |
| {% endif %} | |
| </ul> | |
| </div> | |
| </div> | |
| </div><!-- /.box-body --> | |
| </div><!-- /.box --> | |
| <div id="common_date_info_box" class="box no-header"> | |
| <div id="common_date_info_box__body" class="box-body update-area"> | |
| <p><svg class="cb cb-clock"> <use xlink:href="#cb-clock" /></svg>登録日:{{ Product.create_date|date_format }}</p> | |
| <p><svg class="cb cb-clock"> <use xlink:href="#cb-clock" /></svg>更新日:{{ Product.update_date|date_format }}</p> | |
| </div> | |
| </div><!-- /.box --> | |
| <div id="common_shop_note_box" class="box"> | |
| <div id="common_shop_note_box__header" class="box-header"> | |
| <h3 class="box-title">ショップ用メモ欄</h3> | |
| </div><!-- /.box-header --> | |
| <div id="common_shop_note_box__body" class="box-body"> | |
| {{ form_widget(form.note) }} | |
| </div> | |
| </div> | |
| </div> | |
| </div><!-- /.col --> | |
| </div> | |
| </form> | |
| {% endblock %} |