/** name:SQLX_Update parm:string/array table parm:array Row In its most basic form, this routine accepts a [[Row Array]] and attempts to update that row in the table. The first entry can be either a [[Table Reference]] or the name of a table. The second entry is always a [[Row Array]]. This function makes use of the dictionary to determine the correct formatting of all columns, and ignores any column in the [[Row Array]] that is not in the table. */ function SQLX_Update($table, $colvals, $errrow = array()) { if (!is_array($table)) { $table = DD_TableRef($table); } $table_id = $table["table_id"]; $view_id = DDTable_IDResolve($table_id); $tabflat =& $table["flat"]; $sql = ""; $st_skey = isset($colvals["skey"]) ? $colvals["skey"] : CleanGet("gp_skey"); foreach ($tabflat as $colname => $colinfo) { if (isset($colvals[$colname])) { if (DD_ColUpdatesOK($colinfo)) { $sql .= ListDelim($sql) . $colname . " = " . SQL_FORMAT($colinfo["type_id"], $colvals[$colname]); } } } if ($sql != '') { $sql = "UPDATE " . $view_id . " SET " . $sql . " WHERE skey = " . $st_skey; // ERRORROW CHANGE 5/30/07, big change, SQLX_* routines now save // the row for the table if there was an error $errflag = false; #hprint_r($sql); SQL($sql, $errflag); if ($errflag) { vgfSet('ErrorRow_' . $table_id, $errrow); } // Possibly cache the row if (!Errors()) { $cache_pkey0 = vgfget('cache_pkey', array()); $cache_pkey = array_flip($cache_pkey0); if (isset($cache_pkey[$table_id])) { CacheRowPutBySkey($table, $st_skey); } } } }
function hBoxes($mode) { // Obtain a row depending on the mode we are in. If there // wdas an error then reload the first row for this table if (is_array(vgfGet('ErrorRow_' . $this->table_id, ''))) { $row = vgfGet('ErrorRow_' . $this->table_id); $row['skey'] = gp('gpx_skey'); } else { switch ($mode) { case 'search': // if a previous search, use that, else fall through // to using current row $row = ConGet('table', $this->table_id, 'search', array()); if (count($row) != 0) { break; } case 'ins': $row = DrillDownMatches(); if (count($row) == 0) { $row = aFromGP('pre_'); } // KFD 8/13/07, part of COPY ability if (gp('gp_action') == 'copy') { $row2 = SQL_OneRow("SELECT * FROM " . $this->table_id . " where skey=" . SQLFN(gp('gp_skey'))); foreach ($row2 as $column_id => $colvalue) { if (is_numeric($column_id)) { continue; } if (!isset($this->table['flat'][$column_id])) { continue; } $aid = $this->table['flat'][$column_id]['automation_id']; if ($aid == 'SEQUENCE' || $column_id == gp('gp_exclude')) { unset($row2[$column_id]); } } $row = array_merge($row, $row2); } break; case 'upd': $skey = gp('gp_skey'); hidden('gp_skey', ''); if (trim($skey) == '') { $row = array(); } else { $skey = " WHERE skey=" . $skey; $sq = "Select * FROM " . $this->view_id . $skey; $row = SQL_OneRow($sq); } } } // Save the row for other routines $this->row = $row; // Find out what skey we are on, give a next/prev // kind of button for stuff like that. // Set the next/prev stuff based on rows $HTML_PagePrev = $HTML_PageNext = $HTML_ViewingPage = ""; if ($mode == "upd") { $lprev = $lnext = false; $skey = $this->row['skey']; $sess_skeys = ConGet("table", $this->table_id, "skeys", array()); if (count($sess_skeys) > 1) { $sess_srows = array_flip($sess_skeys); $sess_srow = $sess_srows[$row['skey']]; $lprev = $sess_srow == 0 ? false : true; $skeyf = $sess_srow == 0 ? 0 : $sess_skeys[0]; $skeyp = $sess_srow == 0 ? 0 : $sess_skeys[$sess_srow - 1]; $skeyn = $sess_srow >= count($sess_srows) - 1 ? 0 : $sess_skeys[$sess_srow + 1]; $skeyl = $sess_srow >= count($sess_srows) - 1 ? 0 : $sess_skeys[count($sess_srows) - 1]; $hprev = hLinkImage('first', 'First', 'gp_skey', $skeyf, $lprev) . hLinkImage('previous', 'Previous', 'gp_skey', $skeyp, $lprev); $lnext = $sess_srow < count($sess_srows) - 1 ? true : false; $hnext = hLinkImage('next', 'Next', 'gp_skey', $skeyn, $lnext) . hLinkImage('last', 'Last', 'gp_skey', $skeyl, $lnext); $HTML_ViewingPage = "Page " . ($sess_srow + 1) . " of " . count($sess_srows); } } // Output and save the navbar ob_start(); if ($HTML_ViewingPage != '') { $hprev = $this->hTextButton('\\First', 'gp_skey', $skeyf, $lprev) . $this->hTextButton('\\Previous', 'gp_skey', $skeyp, $lprev); $hnext = $this->hTextButton('Ne\\xt', 'gp_skey', $skeyn, $lnext) . $this->hTextButton('Las\\t', 'gp_skey', $skeyl, $lnext); if (vgfget('buttons_in_commands')) { $this->h['NavBar'] = ''; vgfSet('html_navbar', $hprev . $hnext); } else { $this->h['NavBar'] = "\n<div class=\"x2menubar\">\n" . $hprev . $HTML_ViewingPage . " " . $hnext . "\n</div><br>"; } } // Second output is main content // KFD 8/9/07, Project DUPECHECK // If a "dupecheck" projection exists, and they are // doing a new entry, we first ask them to enter // those values $dc = ArraySafe($this->table['projections'], 'dupecheck'); if ($dc != '' && $mode == 'ins' && !gpExists('gp_nodupecheck')) { hidden('gp_action', 'dupecheck'); $this->h['Content'] = $this->hBoxesX3($mode, 'dupecheck'); $this->h['Content'] .= '<br/><br/>' . '<button class="btn btn-primary id="object_for_enter" onclick="formSubmit()">(ENTER) Check For Duplicates</button>'; } else { $this->h['Content'] = $this->hBoxesDefault($mode); } }