Example #1
0
 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);
     }
 }