]> git.andy128k.dev Git - ipf.git/commitdiff
ordered set
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 14 Sep 2014 12:41:36 +0000 (15:41 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 14 Sep 2014 12:41:36 +0000 (15:41 +0300)
ipf/admin/templates/admin/change.html
ipf/form/field/file.php
ipf/form/field/orderedset.php [new file with mode: 0644]
ipf/form/widget/fileinput.php
ipf/form/widget/htmlinput.php
ipf/form/widget/orderedsettable.php [new file with mode: 0644]

index 6cb00a05d4aa8af8c79c3520342c7e232f24407f..4a9d4f56f6688e0bb0f42f278544298bd3fc93b3 100644 (file)
 {/block}
 
 {block scripts}
-<script type="text/javascript" src="{$ADMIN_MEDIA_URL}js/jquery.tablednd.js"></script>
-<script type="text/javascript">
-{literal}
-$(document).ready(function(){
+<script>{literal}
+$(function(){
     $("#id_ipf_referrer").val(document.referrer);
     var del_href = $("#id_a_delete").attr("href");
     $("#id_a_delete").attr("href", del_href+'?ipf_referrer='+document.referrer);
-
-    $('.orderable-inlne').each(function(){
-        var $table = $(this);
-        $table.tableDnD({
-            onDragClass: "ItemsDragClass",
-            onDrop: function(table, row) {
-                var ids = [];
-                $table.find('tr[data-id]').each(function(){
-                    ids.push($(this).data('id'));
-                });
-                $.post($table.data('url') + 'reorder/', { 'ids[]': ids }, function(data){});
-            }
-        });
-    });
 });
-{/literal}
-</script>
+{/literal}</script>
 {foreach $extra_js as $js}
 {$js|safe}
 {/foreach}
index 14c0b2a1d0995d8905c479d8c2dabb24fa20ccca..18cac3369de55bf191a4f8b49f1f1f2fe28fe693 100644 (file)
@@ -40,14 +40,18 @@ class IPF_Form_Field_File extends IPF_Form_Field
         IPF_Utils::makeDirectories($this->getAbsolutePath(''));
 
         if (\PFF\Arr::get($value, 'remove'))
-            return $this->removeFile($value['data']);
+            return $this->removeFile($value['file']);
 
         $oldname = \PFF\Arr::get($value, 'name', '');
         $newname = \PFF\Arr::get($value, 'rename', '');
         if ($oldname != $newname)
             return $this->renameFile($oldname, $newname);
 
-        switch (\PFF\Arr::get($value['data'], 'error')) {
+        if (!isset($value['file'])) {
+            return IPF_Utils::cleanFileName($value['name'], $this->getAbsolutePath('')); // initial
+        }
+
+        switch (\PFF\Arr::get($value['file'], 'error')) {
         case UPLOAD_ERR_OK:
             break;
         default:
@@ -56,7 +60,7 @@ class IPF_Form_Field_File extends IPF_Form_Field
             return $oldname;
         }
 
-        $data = $value['data'];
+        $data = $value['file'];
         switch ($data['error']) {
             case UPLOAD_ERR_OK:
                 break;
diff --git a/ipf/form/field/orderedset.php b/ipf/form/field/orderedset.php
new file mode 100644 (file)
index 0000000..773e372
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+class IPF_Form_Field_OrderedSet extends IPF_Form_Field_Set
+{
+    public $widget = 'IPF_Form_Widget_OrderedSetTable';
+    public $orderBy;
+
+    public function clean($value)
+    {
+        if (!$value)
+            return $value;
+
+        $reorder = \PFF\Arr::pop($value, 'reorder');
+        $value = parent::clean($value);
+        $value['reorder'] = $reorder;
+
+        return $value;
+    }
+
+    protected function createWidget($args)
+    {
+        $args['orderBy'] = $this->orderBy;
+        return parent::createWidget($args);
+    }
+}
+
index 4b6a4b588389e6960f419f526ab22f5f00212f73..8c3743f6b1a397d5f2708391d7e8d8d992d16c05 100644 (file)
@@ -24,13 +24,13 @@ class IPF_Form_Widget_FileInput extends IPF_Form_Widget_Input
 
         if ($this->allow_extended) {
             $sim = 'Currently: ' .
-                Tag::input(array('name' => "{$name}_name", 'value' => $filename, 'type' => 'hidden')) .
-                Tag::input(array('name' => "{$name}_rename", 'value' => $filename, 'id' => "id_{$name}_rename", 'type' => 'text', 'style' => 'width:150px;')) .
+                Tag::input(array('name' => "{$name}[name]", 'value' => $filename, 'type' => 'hidden')) .
+                Tag::input(array('name' => "{$name}[rename]", 'value' => $filename, 'id' => "id_{$name}_rename", 'type' => 'text', 'style' => 'width:150px;')) .
                 $this->viewCurrentValue($filename);
 
             if ($this->allow_delete)
                 $sim .= '&nbsp;|&nbsp;' .
-                    Tag::input(array('name' => "{$name}_remove", 'value' => 1, 'id' => "id_{$name}_remove", 'type' => 'checkbox')) .
+                    Tag::input(array('name' => "{$name}[remove]", 'value' => 1, 'id' => "id_{$name}_remove", 'type' => 'checkbox')) .
                     '&nbsp;' .
                     Tag::label(array('class' => 'file_remove', 'for' => "id_{$name}_remove"), 'Remove');
 
@@ -46,12 +46,10 @@ class IPF_Form_Widget_FileInput extends IPF_Form_Widget_Input
     {
         if (is_string($value) && $value)
             $sim = $this->currentValue($name, $value);
-        elseif (isset($value['data']) && is_string($value['data']) && $value['data'])
-            $sim = $this->currentValue($name, $value['data']);
         else
             $sim = '';
 
-        return $sim . parent::render($name, '', $extra_attrs);
+        return $sim . parent::render($name.'[file]', '', $extra_attrs);
     }
 
     public function valueFromFormData($name, $data)
@@ -59,20 +57,10 @@ class IPF_Form_Widget_FileInput extends IPF_Form_Widget_Input
         if (!isset($data[$name]))
             return null;
 
-        $remove = isset($data[$name.'_remove']) && $data[$name.'_remove'] == 1;
-
-        $res = array(
-            'data' => $data[$name],
-            'remove' => $remove,
-        );
-
-        if (isset($data[$name.'_rename']))
-            $res['rename'] = $data[$name.'_rename'];
-
-        if (isset($data[$name.'_name']))
-            $res['name'] = $data[$name.'_name'];
-
-        return $res;
+        $value = $data[$name];
+        if (!isset($value['file']) && !isset($value['name']))
+            return null;
+        return $value;
     }
 }
 
index 197d99815a1cbf9a92262d6596cba1c52ede1583..044a036f181a238c97fea1b89cbdcc1ac14f4244 100644 (file)
@@ -40,7 +40,7 @@ class IPF_Form_Widget_HTMLInput extends IPF_Form_Widget
             }
         }
 
-        return Tag::textarea($final_attrs)
+        return Tag::textarea()
             ->attr('cols', 70)
             ->attr('rows', 20)
             ->attrs($this->attrs)
@@ -54,7 +54,7 @@ class IPF_Form_Widget_HTMLInput extends IPF_Form_Widget
     public function extra_js()
     {
         return array(
-            '<script type="text/javascript" src="'.$this->tiny_mce_url.'tiny_mce.js"></script>',
+            '<script type="text/javascript" src="'.$this->tinymce_url.'tiny_mce.js"></script>',
             '<script type="text/javascript">
 function ipf_filebrowser(field_name, url, type, win) {
   var cmsURL = "/admin/filebrowser/";
diff --git a/ipf/form/widget/orderedsettable.php b/ipf/form/widget/orderedsettable.php
new file mode 100644 (file)
index 0000000..60ca43c
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+use \PFF\HtmlBuilder\Tag as Tag;
+
+class IPF_Form_Widget_OrderedSetTable extends IPF_Form_Widget_SetTable
+{
+    public $orderBy;
+
+    public function __construct($attrs=array())
+    {
+        $this->orderBy = \PFF\Arr::pop($attrs, 'orderBy');
+        parent::__construct($attrs);
+    }
+
+    public function render($name, $value, $extra_attrs=array())
+    {
+        if (array_key_exists('class', $extra_attrs))
+            $extra_attrs['class'] .= ' orderable-set-table';
+        else
+            $extra_attrs['class'] = 'orderable-set-table';
+
+        $extra_attrs['data-reorder'] = $name.'[reorder]';
+
+        return parent::render($name, $value, $extra_attrs);
+    }
+
+    protected function renderRow($prefix, $obj, $errors, $index)
+    {
+        $tr = parent::renderRow($prefix, $obj, $errors, $index);
+
+        if (array_key_exists('id', $obj))
+            $tr->attr('data-id', $obj['id']);
+        else
+            $tr->addClass('nodrag')->addClass('nodrop');
+
+        return $tr;
+    }
+
+    public function extra_js()
+    {
+        $js = parent::extra_js();
+
+        $js[] = '<script src="'.IPF::get('static_url').'admin/js/jquery.tablednd.js"></script>';
+        $js[] = '<script>
+$(function(){
+    $(\'.orderable-set-table\').each(function(){
+        var $table = $(this), $form = $table.closest("form"), reorder = $table.data("reorder");
+        $table.tableDnD({
+            onDragClass: "ItemsDragClass",
+            onDrop: function(table, row) {
+                var i;
+                $form.find("[name=\'"+reorder+"[]\']").remove();
+                $table.find(\'tr[data-id]\').each(function(){
+                    i = $("<input/>").attr("type", "hidden").attr("name", reorder+"[]").attr("value", $(this).data(\'id\'));
+                    $form.append(i);
+                });
+            }
+        });
+    });
+});
+</script>';
+        return $js;
+    }
+
+    public function valueFromFormData($name, $data)
+    {
+        if (!isset($data[$name]))
+            return null;
+
+        $value = $data[$name];
+        $reorder = \PFF\Arr::pop($value, 'reorder');
+        $data[$name] = $value;
+
+        $value = parent::valueFromFormData($name, $data);
+        $value['reorder'] = $reorder;
+
+        return $value;
+    }
+}
+