function handle_event($ev) { global $sql, $ddc_tables; $val = $_POST['val']; $vale = $sql->esc($val); $id = intval($_GET['id']); $r = $sql->fetch1($sql->query("SELECT count(1) FROM `" . TABLE_META_TREE_TMP . "`")); if ($r > 0) { $t = TABLE_META_TREE_TMP; } else { //working on real !! $t = TABLE_META_TREE; } $left_reload = false; /*if(preg_match('/right.e0.pr-/',$ev->rem_name)) { } else*/ switch ($ev->rem_name) { //handle root object events here /* case 'right.e0.id': if($sql->fetch1($sql->query("SELECT COUNT(1) FROM `".$t."` WHERE id='".$vale."'"))>0) { $ev->failure='Dupplicate id:'.$val; }; break; case 'right.e0.parentid': if($this->child_check($t,$id,$val)) { $left_reload=true; $sql->query("UPDATE `".$t."` SET parentid=".$vale." WHERE id=".$id); $ev->updated=true; }else{ $ev->failure='Loop detected:'.$val; }; break;*/ case 'right.e0.pr': if ($val == 'id') { break; } if ($val == 'verstamp') { break; } $left_reload = true; $sql->query("SET @v:=(SELECT `" . $sql->esc($val) . "` FROM `" . $t . "` WHERE id=" . $id . ")"); $sql->query("UPDATE `" . $t . "` AS u SET u.`" . $sql->esc($val) . "`=@v WHERE id IN (SELECT s.id FROM `" . TABLE_META_TREE_SELECTIONS . "` AS s WHERE s.selected=1 AND s.uid='" . $sql->esc($_SESSION['uid']) . "')"); $ev->updated = true; break; case 'right.e0.mmark': if ($val == 'id') { break; } if ($val == 'verstamp') { break; } $left_reload = true; $sql->query("SET @v:=(SELECT `" . $sql->esc($val) . "` FROM `" . $t . "` WHERE id=" . $id . ")"); $res = $sql->query("SELECT s.id FROM `" . $t . "` AS s WHERE s.`" . $sql->esc($val) . "`=@v"); while ($row = $sql->fetcha($res)) { $q = "INSERT INTO `" . TABLE_META_TREE_SELECTIONS . "` SET selected=1 ,uid='" . $sql->esc($_SESSION['uid']) . "' ,id='" . $row['id'] . "' ON DUPLICATE KEY UPDATE selected=1"; print "/*" . $q . "*/\n"; if (!$sql->query($q)) { print "/*" . $sql->err() . "*/\n"; } } $ev->updated = true; $ev->reload_state = true; break; case 'right.e0.mumark': if ($val == 'id') { break; } if ($val == 'verstamp') { break; } $left_reload = true; $sql->query("SET @v:=(SELECT `" . $sql->esc($val) . "` FROM `" . $t . "` WHERE id=" . $id . ")"); $res = $sql->query("SELECT s.id FROM `" . $t . "` AS s WHERE s.`" . $sql->esc($val) . "`=@v"); while ($row = $sql->fetcha($res)) { $q = "INSERT INTO `" . TABLE_META_TREE_SELECTIONS . "` SET selected=0 ,uid='" . $sql->esc($_SESSION['uid']) . "' ,id='" . $row['id'] . "' ON DUPLICATE KEY UPDATE selected=0"; print "/*" . $q . "*/\n"; if (!$sql->query($q)) { print "/*" . $sql->err() . "*/\n"; } } $ev->updated = true; $ev->reload_state = true; break; case 'right.e0.invs': if ($val == 'id') { break; } if ($val == 'verstamp') { break; } $left_reload = true; $sql->query("SET @v:=(SELECT `" . $sql->esc($val) . "` FROM `" . $t . "` WHERE id=" . $id . ")"); $res = $sql->query("SELECT s.id FROM `" . $t . "` AS s WHERE s.`" . $sql->esc($val) . "`=@v"); while ($row = $sql->fetcha($res)) { $q = "INSERT INTO `" . TABLE_META_TREE_SELECTIONS . "` SET selected= ! selected ,uid='" . $sql->esc($_SESSION['uid']) . "' ,id='" . $row['id'] . "' ON DUPLICATE KEY UPDATE selected= ! selected"; print "/*" . $q . "*/\n"; if (!$sql->query($q)) { print "/*" . $sql->err() . "*/\n"; } } $ev->updated = true; $ev->reload_state = true; break; case 'fields': break; $st = new settings_tool(); $sq = $st->set_query($ev->context[$ev->parent_name]['oid'], $ev->parent_name . '.right._mode', $_SESSION['uid'], 0, 0); $sql->query($sq); //print 'window.location.reload(true);'; //exit; $right_reload = true; break; case 'setfromsql': $ddc = new ddc_key(); $ddc->attach($t, $sql); $ddc->meta_from_sql_0($_GET['id']); //print 'window.location.reload(true);'; //exit; $right_reload = true; $ev->updated = true; break; case 'inheritance_update': $ddc = new ddc_key(); $ddc->attach($t, $sql); $ddc->inheritance_update(false); print 'window.location.reload(true);'; exit; //$right_reload=true; //$ev->updated=true; break; case 'discard': $sql->query("DELETE FROM `" . TABLE_META_TREE_TMP . "`"); $go_id = $sql->fetch1($sql->query("SELECT id FROM `" . TABLE_META_TREE_SELECTIONS . "` WHERE id=" . $sql->esc($_GET['id']))); $this->go($go_id); //print 'window.location.reload(true);'; exit; break; case 'load': $sql->query("DELETE FROM `" . TABLE_META_TREE_TMP . "`"); $wh = ""; foreach ($ddc_tables[TABLE_META_TREE_TMP]->cols as $o) { if ($wh != '') { $wh .= ", "; } $wh .= "`" . $sql->esc($o['name']) . "`"; } $sql->query("INSERT INTO `" . TABLE_META_TREE_TMP . "` (" . $wh . ") SELECT " . $wh . " FROM `" . TABLE_META_TREE . "`"); $go_id = $sql->fetch1($sql->query("SELECT id FROM `" . TABLE_META_TREE_TMP . "` WHERE id=" . $sql->esc($_GET['id']))); $this->go($go_id); //print 'window.location.reload(true);'; exit; break; case 'saveuncond': $sql->query("DELETE FROM `" . TABLE_META_TREE . "`"); $wh = ''; foreach ($ddc_tables[TABLE_META_TREE]->cols as $o) { if ($wh != '') { $wh .= ", "; } $wh .= "`" . $sql->esc($o['name']) . "`"; } $sql->query("INSERT INTO `" . TABLE_META_TREE . "` (" . $wh . ") SELECT " . $wh . " FROM `" . TABLE_META_TREE_TMP . "`"); $go_id = $sql->fetch1($sql->query("SELECT id FROM `" . TABLE_META_TREE . "` WHERE id=" . $sql->esc($_GET['id']))); $this->go($go_id); //print 'window.location.reload(true);'; exit; break; case 'apply_nonint_single': if ($t == TABLE_META_TREE) { print "alert('Open and make some changes first');"; break; } $new = new ddc_key(); $new->attach(TABLE_META_TREE_TMP, $sql); $old = new ddc_key(); $old->attach(TABLE_META_TREE, $sql); $diff = $new->gen_changes($old); if (!is_array($diff) || count($diff) == 0) { print "alert('Open and make some changes first');"; break; } reset($diff); foreach ($diff as $e) { $sql->query($e->query); } $sql->query("DELETE FROM `" . TABLE_META_TREE . "`"); $wh = ''; foreach ($ddc_tables[TABLE_META_TREE]->cols as $o) { if ($wh != '') { $wh .= ", "; } $wh .= "`" . $sql->esc($o['name']) . "`"; } $sql->query("INSERT INTO `" . TABLE_META_TREE . "` (" . $wh . ") SELECT " . $wh . " FROM `" . TABLE_META_TREE_TMP . "`"); $go_id = $sql->fetch1($sql->query("SELECT id FROM `" . TABLE_META_TREE . "` WHERE id=" . $sql->esc($_GET['id']))); $this->go($go_id); //print 'window.location.reload(true);'; exit; break; case 'del': $res = $sql->query("SELECT id FROM `" . TABLE_META_TREE_SELECTIONS . "` WHERE selected=1 AND uid='" . $_SESSION['uid'] . "'"); while ($row = $sql->fetcha($res)) { $q = "DELETE FROM `" . TABLE_META_TREE_TMP . "` WHERE id=" . $row['id']; $rr = $sql->query($q); $q = "DELETE FROM `" . TABLE_META_TREE_SELECTIONS . "` WHERE id=" . $row['id'] . " AND uid='" . $_SESSION['uid'] . "'"; $rr = $sql->query($q); } $sql->free($res); $k = 0; while (true) { $res = $sql->query("SELECT b.id from `" . TABLE_META_TREE_TMP . "` as b LEFT OUTER JOIN `" . TABLE_META_TREE_TMP . "` as c ON b.parentid=c.id WHERE c.id IS NULL AND b.parentid != 0"); $f = 0; if ($res) { while ($row = $sql->fetchn($res)) { $sql->query("DELETE FROM `" . TABLE_META_TREE_TMP . "` WHERE id=" . $row[0]); $f = 1; } $sql->free($res); } $res = $sql->query("SELECT b.id from `" . TABLE_META_TREE_SELECTIONS . "` as b LEFT OUTER JOIN `" . TABLE_META_TREE_TMP . "` as c ON b.id=c.id WHERE c.id IS NULL AND c.uid ='" . $_SESSION['uid'] . "'"); $d = 0; if ($res) { while ($row = $sql->fetchn($res)) { $sql->query("DELETE FROM `" . TABLE_META_TREE_SELECTIONS . "` WHERE id=" . $row[0] . " AND uid ='" . $_SESSION['uid'] . "'"); $d = 1; } $sql->free($res); } if ($f == 0) { break; } $k++; if ($k == 10) { break; } //10 iterations??????????????? Maybe do more, or do delete twice. } $go_id = $sql->fetch1($sql->query("SELECT id FROM `" . TABLE_META_TREE_TMP . "` WHERE id=" . $sql->esc($_GET['id']))); $this->go($go_id); //print 'window.location.reload(true);'; exit; break; case 'add': $parent = intval($_GET['id']); if ($t != TABLE_META_TREE_TMP) { $parent = 0; } $sql->query("INSERT INTO `" . TABLE_META_TREE_TMP . "` SET id=0,parentid=" . $parent); $id = $sql->fetch1($sql->query("SELECT LAST_INSERT_ID()")); $this->go($id); exit; break; case 'clone': if (isset($_GET['id'])) { $id = $this->clone_recursive($_GET['id']); $this->go($id); } exit; break; case 'copy': if (isset($_GET['id'])) { $_SESSION['clipboard']['format'] = 'ddc_meta_node'; $_SESSION['clipboard']['data'] = $_GET['id']; } break; case 'paste': if (isset($_SESSION['clipboard']['data']) && $_SESSION['clipboard']['format'] == 'ddc_meta_node') { $id = $this->clone_recursive($_SESSION['clipboard']['data']); $sql->query("UPDATE `" . $t . "` SET parentid=" . $_GET['id'] . " WHERE id=" . $id); $ev->updated = true; } break; case 'desel': $sql->query("UPDATE `" . TABLE_META_TREE_SELECTIONS . "` SET selected=0 WHERE uid='" . $_SESSION['uid'] . "'"); $ev->updated = true; $ev->reload_state = true; break; case 'selchildren': if (!isset($_GET['id'])) { exit; } $f_q = "SELECT id FROM `" . $t . "` WHERE parentid=" . intval($_GET['id']); $ev->updated = true; $ev->reload_state = true; case 'selnear': if (!isset($_GET['id'])) { exit; } $p_id = $sql->fetch1($sql->query("SELECT parentid FROM `" . $t . "` WHERE id=" . intval($_GET['id']))); if (!isset($f_q)) { $f_q = "SELECT id FROM `" . $t . "` WHERE parentid=" . $p_id; } $ev->reload_state = true; case 'foldall': case 'unfoldall': $v = new sql_immed(editor_meta_tree_node::FOLDING_MODE); if ($ev->rem_name == 'unfoldall') { $v->val = $v->val == 1 ? 0 : 1; } $m_Col = 'folded'; if (!isset($f_q)) { $f_q = "SELECT id FROM `" . $t . "`"; } if ($ev->rem_name == 'selnear' || $ev->rem_name == 'selchildren') { $m_Col = 'selected'; $v->val = 1; } $q = new query_gen_ext('INSERT UPDATE'); $i_id = new sql_immed(); $q->into->exprs[] = new sql_column(NULL, TABLE_META_TREE_SELECTIONS); $q->set->exprs[] = new sql_expression('=', array(new sql_column(NULL, NULL, $m_Col), $v)); $q->set->exprs[] = new sql_expression('=', array(new sql_column(NULL, NULL, 'id'), $i_id)); $q->set->exprs[] = new sql_expression('=', array(new sql_column(NULL, NULL, 'uid'), new sql_immed($_SESSION['uid']))); $res = $sql->query($f_q); while ($row = $sql->fetcha($res)) { $i_id->val = $row['id']; $sql->query($q->result()); } $ev->updated = true; break; default: } if ($right_reload) { $right_id = $ev->context[$ev->parent_name]['right_id']; $e = $this->editors['right']; unset($e->com_parent); $e->context =& $ev->context; $e->name = $ev->parent_name . '.right'; $e->etype = $ev->parent_type . '.' . $e->etype; $e->oid = -1; $e->keys = array(); print "\$i('" . js_escape($right_id) . "').innerHTML="; reload_object($e, true); } $left_id = $ev->context[$ev->parent_name]['left_id']; $state_view_id = $ev->context[$ev->parent_name]['state_view_id']; $e = $this->editors['node']; unset($e->com_parent); $e->context =& $ev->context; $e->name = $ev->parent_name . '.node'; $e->etype = $ev->parent_type . '.' . $e->etype; $e->oid = -1; $e->keys = array(); $e->keys['id'] = 0; $e->args['folded'] = editor_meta_tree_node::FOLDING_MODE == 1 ? 0 : 1; editor_generic::handle_event($ev); if ($ev->updated) { print "\$i('" . js_escape($left_id) . "').innerHTML="; reload_object($e); } if ($ev->reload_state) { $this->editors['state_view']->id_alloc(); print "\$i('" . js_escape($state_view_id) . "').innerHTML="; reload_object($this->editors['state_view'], true); } }