Add frame editing framework
authorJoey Schulze <joey@infodrom.org>
Sun, 8 May 2011 19:28:56 +0000 (21:28 +0200)
committerJoey Schulze <joey@infodrom.org>
Sun, 8 May 2011 19:28:56 +0000 (21:28 +0200)
Use the regular callback framework for storing values
Allow replacing the default menu and altering it

lib/functions.js
lib/mask.php
masks/README

index 6ff9c08..a09b726 100644 (file)
@@ -478,6 +478,79 @@ function grid_update_filters(grid)
     }
 }
 
+var grid_column_edit = new Array();
+
+function grid_cell_save(id,col,value)
+{
+    var source = document.getElementById('source');
+
+    if (!source) return false;
+
+    var parms = 'source=' + source.innerHTML;
+    parms += '&callback=cellsave';
+    parms += '&id=' + id;
+    parms += '&column=' + col;
+    parms += '&value=' + value;
+
+    ajax_request('function', parms, false);
+}
+
+function grid_cell_value()
+{
+    this.grid.menu.cancelmenu();
+
+    var bufRow = this.row;
+    if (this.grid.lastRowPos > 0) bufRow += this.grid.lastRowPos;
+
+    this.grid.buffer.setValue(bufRow, this.col, this.visible);
+
+    var cell = this.grid.cell(this.row,this.col);
+    cell.innerHTML = this.visible;
+
+    grid_cell_save(this.grid.buffer.getCell(bufRow,0), this.col, this.value);
+}
+
+function grid_dataMenuHandler(grid,row,col,onBlankRow)
+{
+    var default_menu = true;
+
+    if (grid_column_edit[col] &&
+       typeof grid_column_edit[col].default_menu !== 'undefined' &&
+       grid_column_edit[col].default_menu == false)
+       default_menu = false;
+
+    if (default_menu && typeof grid.menu.options.dataMenuHandlerOriginal == 'function') {
+       grid.menu.options.dataMenuHandlerOriginal(grid,row,col,onBlankRow);
+       grid.menu.div.style.width = '17em';
+    }
+
+    if (grid_column_edit[col]) {
+       var submenu;
+       if (default_menu) {
+           var submenu = new Rico.Menu(grid_column_edit[col].width);
+           submenu.createDiv();
+       } else
+           submenu = grid.menu;
+
+       for (i=0; i < grid_column_edit[col].values.length; i++)
+           submenu.addMenuItem(grid_column_edit[col].values[i][0],
+                               grid_cell_value.bind({grid: grid, row: row, col: col,
+                                           visible: grid_column_edit[col].values[i][1],
+                                           value: grid_column_edit[col].values[i][2]}));
+
+       if (!default_menu && typeof grid_column_edit[col].width !== 'undefined')
+           grid.menu.div.style.width = grid_column_edit[col].width;
+
+       if (default_menu)
+           grid.menu.addSubMenuItem('Wert setzen', submenu, true);
+    }
+
+    if (default_menu)
+       return true;
+    else
+       return false;
+}
+
 var calendars = new Array();
 function calendar_callback(value)
 {
index 8e58e45..2924486 100644 (file)
@@ -201,6 +201,10 @@ function build_grid($name, $mask, $gridname = false)
   $jscode[] = sprintf("%s = new Rico.LiveGrid ('grid_%s', new Rico.Buffer.AjaxSQL('ajax/ricoXMLquery.php'), %s_opts);", $gridname, $name, $name);
   $jscode[] = sprintf("%s.menu = new Rico.GridMenu();", $gridname);
   $jscode[] = sprintf("%s.edit = new Rico.TableEdit(%s);", $gridname, $gridname);
+  if ($gridname == 'grid') {
+    $jscode[] = sprintf("%s.menu.options.dataMenuHandlerOriginal = %s.menu.options.dataMenuHandler;", $gridname, $gridname);
+    $jscode[] = sprintf("%s.menu.options.dataMenuHandler = grid_dataMenuHandler;", $gridname);
+  }
   $jscode[] = '});';
 
   return $ret;
index 8d8d2ca..7ef7659 100644 (file)
@@ -94,3 +94,44 @@ Element details
   list = Array(id => Array)
 
     fetch = Funktion
+
+
+Zellen in der Liste editieren
+-----------------------------
+
+$jscode[] = <<<EOC
+grid_column_edit[1] = {
+    default_menu: false,
+    width: '9em',
+    values: [
+            ['löschen', '', 0],
+            ['1 mal bestellen', '1', 1],
+            ['2 mal bestellen', '2', 2],
+            ['3 mal bestellen', '3', 3],
+            ['4 mal bestellen', '4', 4],
+            ['5 mal bestellen', '5', 5],
+            ['6 mal bestellen', '6', 6],
+            ['7 mal bestellen', '7', 7],
+            ['8 mal bestellen', '8', 8],
+            ['9 mal bestellen', '9', 9]
+            ]
+};
+EOC;
+
+'callbacks' => array('cellsave' => cell_save),
+
+
+function cell_save()
+{
+  if ($_POST['value'] == 0)
+    $sql = sprintf("UPDATE metro_ordersatz_pos SET anzahl = NULL, sys_user = '%s', sys_edit = now() WHERE ordersatz = %d AND artikel = %d",
+                  pg_escape_string($_SESSION['sys']['login']),
+                  $_SESSION['ordersatz'], $_POST['id']);
+  else
+    $sql = sprintf("UPDATE metro_ordersatz_pos SET anzahl = %d, sys_user = '%s', sys_edit = now() WHERE ordersatz = %d AND artikel = %d",
+                  $_POST['value'], pg_escape_string($_SESSION['sys']['login']),
+                  $_SESSION['ordersatz'], $_POST['id']);
+
+  $sth = pg_query($sql);
+  error_log($sql);
+}