<?php include("conn.php"); function parseConditionString($str, $resptype) { $condtypes = array(); $q = mysql_query("SELECT * FROM `conditions`"); while($cond = mysql_fetch_object($q)) { $condtypes[$cond->id] = $cond->friendlyname; } $ret = "IF "; $conds = explode(";",$str); $conds = array_slice($conds, 0, count($conds)-1); foreach($conds as $cond) { $tk = explode(",",$cond); if(count($tk) > 3) { for($i = 0; $i < intval($tk[0]); $i++) $ret .= "("; if($tk[1] == "1") $ret .= "not "; $ret .= "<b>". $condtypes[intval($tk[2])] ."</b> ". $tk[3]; for($i = 0; $i < intval($tk[4]); $i++) $ret .= ")"; $ret .= " "; } else { if($tk[0] == 0) $ret .= "AND "; else if($tk[0] == 1) $ret .= "OR "; } } $ret .= "THEN <i>". strtolower($resptype) ."</i>"; return $ret; } if($_GET['del']) { mysql_query("DELETE FROM `responses` WHERE `id`=".$_GET['del']); header("Location: resp.php"); } if($_POST["editId"]) { $c = ""; for($i=1;;$i++) { if(!isset($_POST["if". $i ."param"])) break; $c .= $_POST['if'.$i.'lpar'].",".$_POST['if'.$i.'not'].",".$_POST['if'.$i.'cond'].",".$_POST['if'.$i.'param'].",".$_POST['if'.$i.'rpar'].";"; if(isset($_POST["op".$i])) $c .= $_POST["op".$i] .";"; } mysql_query("UPDATE `responses` SET `conditions`='". mysql_real_escape_string($c) ."', `respid`=". $_POST['resptype'] .", `parameters`='". mysql_real_escape_string($_POST['parameters']) ."', `cooldown`=". (($_POST['cdd']==0)?-1:$_POST['cooldown']) .", `independent`=". (($_POST['indie'])?"1":"0") ." WHERE `id`=". $_POST['editId']) or die(mysql_error()); mysql_query("UPDATE `updater` SET `responses`=1 WHERE `id`=1"); header("Location: resp.php"); } if($_POST["resptype"] && !$_POST["editId"]) { $c = ""; for($i=1;;$i++) { if(!isset($_POST["if". $i ."param"])) break; $c .= $_POST['if'.$i.'lpar'].",".$_POST['if'.$i.'not'].",".$_POST['if'.$i.'cond'].",".$_POST['if'.$i.'param'].",".$_POST['if'.$i.'rpar'].";"; if(isset($_POST["op".$i])) $c .= $_POST["op".$i] .";"; } mysql_query("INSERT INTO `responses` (`conditions`,`respid`,`parameters`,`cooldown`,`independent`) VALUES ('". mysql_real_escape_string($c) ."',". $_POST['resptype'] .",'". mysql_real_escape_string($_POST['parameters']) ."',". (($_POST['cdd']==0)?-1:$_POST['cooldown']) .",". (($_POST['indie'])?"1":"0") .")") or die(mysql_error()); mysql_query("UPDATE `updater` SET `responses`=1 WHERE `id`=1"); header("Location: resp.php"); } include("header.php"); ?> <script type="text/javascript"> var defaultCool = <?php echo $config->cooldown; ?>; function confirmDeletion(id) { var q = confirm("Are you sure you want to delete this response?"); if(q) window.location.href = "resp.php?del="+id; } function handleRespChange() { document.getElementById("respDesc").innerHTML = document.getElementById(""+document.getElementById("resptype").selectedIndex).innerHTML; } function coolChange() { if(document.getElementById("cdd").selectedIndex == 0) { document.getElementById("cooldown").disabled = true; document.getElementById("indie").disabled = true; document.getElementById("cooldown").value = defaultCool; document.getElementById("indie").selectedIndex = 0; } else { document.getElementById("cooldown").disabled = false; document.getElementById("indie").disabled = false; } } function redrawList() { var selectedValues = Array(); var tmpr = document.getElementById("ifholder").children; if(tmpr[0].children.length < 3) { document.getElementById("ifholder").removeChild(tmpr[0]); tmpr = document.getElementById("ifholder").children; } var tmp = Array(); for(i = 0; i < tmpr.length; i++) { if(tmpr[i].children.length > 3) { selectedValues[i*5] = tmpr[i].children[0].selectedIndex; selectedValues[i*5+1] = tmpr[i].children[1].selectedIndex; selectedValues[i*5+2] = tmpr[i].children[2].selectedIndex; selectedValues[i*5+3] = tmpr[i].children[3].value; selectedValues[i*5+4] = tmpr[i].children[4].selectedIndex; } else { selectedValues[i*5] = tmpr[i].children[0].selectedIndex; selectedValues[i*5+1] = "operator"; } tmp[i] = tmpr[i].cloneNode(true); } document.getElementById("ifholder").innerHTML = ""; var j = 1; for(i = 0; i < tmp.length; i++) { if(selectedValues[i*5+1] != "operator") { tmp[i].setAttribute("id","if"+j); var tmpc = tmp[i].children; tmpc[0].name = "if"+ j +"lpar"; tmpc[0].selectedIndex = selectedValues[i*5]; tmpc[1].name = "if"+ j +"not"; tmpc[1].selectedIndex = selectedValues[i*5+1]; tmpc[2].name = "if"+ j +"cond"; tmpc[2].selectedIndex = selectedValues[i*5+2]; tmpc[3].name = "if"+ j +"param"; tmpc[3].value = selectedValues[i*5+3]; tmpc[4].name = "if"+ j +"rpar"; tmpc[4].selectedIndex = selectedValues[i*5+4]; tmpc[5].setAttribute("onclick","handleRowUp("+ j +");"); tmpc[6].setAttribute("onclick","handleRowDown("+ j +");"); tmpc[7].setAttribute("onclick","handleRowDelete("+ j +");"); if(i%2==1) { if(document.getElementById("op"+ (j-1)) == null) { var op = document.createElement("span"); op.setAttribute("id","op"+(j-1)); op.setAttribute("class","block"); op.innerHTML = "<select name='op"+ (j-1) +"'><option value='0'>and</option><option value='1'>or</option></select>"; document.getElementById("ifholder").appendChild(op); } } j++; document.getElementById("ifholder").appendChild(tmp[i]); /*if(i != tmp.length) tmp.innerHTML += "<br />";*/ } else { if(i != tmp.length-1 && i != 0) { if(selectedValues[(i-1)*5+1] != "operator") { tmp[i].setAttribute("id","op"+(j-1)); tmp[i].children[0].name = "op"+(j-1); tmp[i].children[0].selectedIndex = selectedValues[i*5]; document.getElementById("ifholder").appendChild(tmp[i]); } } } } var childs = document.getElementById("ifholder").children; for(i = 0; i < childs.length; i++) { if((i%2==0 && childs[i].children.length < 3) || (i%2==1 && childs[i].children.length > 3)) { redrawList(); break; } } } function addCondition() { var cond = document.createElement("span"); cond.setAttribute("id","if1"); cond.setAttribute("class","block"); cond.innerHTML = '<select name="if1lpar">' + '<?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\">"; for($j = 0; $j < $i; $j++) echo "("; echo "</option>"; } ?>' + '</select>' + ' <select name="if1not"><option value="0"></option><option value="1">not</option></select>' + ' <select name="if1cond">' + '<?php $q = mysql_query("SELECT * FROM `conditions`"); while($cond = mysql_fetch_object($q)) { echo "<option value=\"". $cond->id ."\">". $cond->friendlyname ."</option>"; } ?>' + '</select>' + ' <input type="text" name="if1param" />' + ' <select name="if1rpar">' + '<?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\">"; for($j = 0; $j < $i; $j++) echo ")"; echo "</option>"; } ?>' + '</select>' + ' <img src="img/arrow_up.png" class="fakelink" style="vertical-align: text-bottom;" onclick="handleRowUp(1);" />' + ' <img src="img/arrow_down.png" class="fakelink" style="vertical-align: text-bottom;" onclick="handleRowDown(1);" />' + ' <img src="img/delete.png" class="fakelink" style="vertical-align: text-bottom;" onclick="handleRowDelete(1);" />' document.getElementById("ifholder").appendChild(cond); redrawList(); } function handleRowUp(r) { if(r != 1) { var child = document.getElementById("if"+r); var clone = child.cloneNode(true); clone.children[0].selectedIndex = child.children[0].selectedIndex; clone.children[1].value = child.children[1].value; clone.children[2].selectedIndex = child.children[2].selectedIndex; clone.children[3].value = child.children[3].value; clone.children[4].selectedIndex = child.children[4].selectedIndex; document.getElementById("ifholder").removeChild(child); document.getElementById("ifholder").insertBefore(clone, document.getElementById("if"+(r-1))); redrawList(); } } function handleRowDown(r) { if(r != (document.getElementById("ifholder").children.length+1)/2) { var child = document.getElementById("if"+r); var clone = child.cloneNode(true); clone.children[0].selectedIndex = child.children[0].selectedIndex; clone.children[1].value = child.children[1].value; clone.children[2].selectedIndex = child.children[2].selectedIndex; clone.children[3].value = child.children[3].value; clone.children[4].selectedIndex = child.children[4].selectedIndex; document.getElementById("ifholder").removeChild(child); document.getElementById("ifholder").insertBefore(clone, document.getElementById("if"+(r+2))); /*if(r+2 != (document.getElementById("ifholder").children.length+1)/2) { var opchild = document.getElementById("op"+r); var opclone = opchild.cloneNode(true); opclone.children[0].selectedIndex = opchild.children[0].selectedIndex; document.getElementById("ifholder").removeChild(opchild); document.getElementById("ifholder").insertBefore(opclone, document.getElementById("if"+(r+2))); }*/ redrawList(); } } function evaluateCondition() { var childs = document.getElementById("ifholder").children; var parens = 0; for(i = 0; i < childs.length; i+=2) { if(childs[i].children[3].value.trim() == "") { alert("Condition parameters cannot be empty!"); return; } parens += childs[i].children[0].selectedIndex - childs[i].children[4].selectedIndex; if(parens < 0) { alert("There are mismatched parentheses!"); return; } } if(parens != 0) { alert("There are mismatched parentheses!"); return; } if(document.getElementById("cdd").selectedIndex == 1 && (document.getElementById("cooldown").value.trim() == "" || isNaN(document.getElementById("cooldown").value))) { alert("Custom cooldown must not be empty and must be a number!"); return; } document.getElementById("resp").submit(); } function handleRowDelete(r) { if(document.getElementById("ifholder").children.length > 1) { document.getElementById("ifholder").removeChild(document.getElementById("if"+r)); var oper = document.getElementById("op"+r); if(oper != null) document.getElementById("ifholder").removeChild(oper); redrawList(); } else { alert("You need at least one condition!"); } } </script> <center> <fieldset class="wide" style="padding-bottom: 0;"> <?php if(!$_GET["do"]) { ?> <legend>Response List</legend> <p style="margin-top: 0;"><a href="resp.php?do=new">New Response</a></p> <center> <?php $q = mysql_query("SELECT * FROM `responses`"); while($resp = mysql_fetch_object($q)) { echo " <table border='0' style='width:790px;border:1px solid black;margin:5px;'> <tr> <td style='width:50px;text-align:center;verticle-align:middle;'> <a href='resp.php?do=edit&id=". $resp->id ."' style='verticle-align: middle;'><img src='img/edit.png' border='0' /></a> <img src='img/delete.png' border='0' class='fakelink' onclick='confirmDeletion(". $resp->id .");' /> </td> <td> ". parseConditionString($resp->conditions, mysql_fetch_object(mysql_query("SELECT * FROM `resptypes` WHERE `id`=". $resp->respid))->friendlyname) ." </td> </tr> </table>"; } ?> </center> <?php } else if($_GET["do"]=="new") { ?> <legend>Create New Response</legend> <form method="post" action="" id="resp"> <p> If <span id="ifholder"> <span id="if1" class="block"> <select name="if1lpar"> <?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\">"; for($j = 0; $j < $i; $j++) echo "("; echo "</option>"; } ?> </select> <select name="if1not"> <option value="0"></option> <option value="1">not</option> </select> <select name="if1cond"> <?php $q = mysql_query("SELECT * FROM `conditions`"); while($cond = mysql_fetch_object($q)) { echo "<option value='". $cond->id ."'>". $cond->friendlyname ."</option>"; } ?> </select> <input type="text" name="if1param" /> <select name="if1rpar"> <?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\">"; for($j = 0; $j < $i; $j++) echo ")"; echo "</option>"; } ?> </select> <img src='img/arrow_up.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowUp(1);' /> <img src='img/arrow_down.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowDown(1);' /> <img src='img/delete.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowDelete(1);' /> </span> </span> <span class="block"> <a href="javascript:addCondition();">Add Condition</a> </span> </p> <p> then <select name="resptype" id="resptype" onchange="handleRespChange();"> <?php $q = mysql_query("SELECT * FROM `resptypes`"); $descarr = array(); for($i = 0;;$i++) { $type = mysql_fetch_object($q); if(!$type) break; echo "<option value='". $type->id ."'>". $type->friendlyname ."</option>"; $descarr[$i] = $type->description; } ?> </select> <?php $i = 0; foreach($descarr as $desc) { echo "<p style='display:none;' id='$i'>". $desc ."</p>"; $i++; } ?> </p> <p> <span class="block" id="respDesc"> <?php echo $descarr[0]; ?> </span> <span class="block">Parameters: <center> <textarea name="parameters" rows="8" style="width:95%;"></textarea> </center></span> </p> <p> Cooldown: <select name="cdd" id="cdd" onchange="coolChange();"> <option value="0">Default</option> <option value="1">Custom</option> </select> <input type="textbox" name="cooldown" id="cooldown" size="6" value="<?php echo $config->cooldown; ?>" disabled="disabled" /> seconds <select name="indie" id="indie" disabled="disabled"> <option value="0">dependent on the default cooldown</option> <option value="1">independent of the default cooldown</option> </select> </p> <p> <input type="button" name="addResponse" value="Add Response" onclick="evaluateCondition();" /> <input type="button" value="Cancel" onclick="window.location.href = 'resp.php';" /> </p> </form> <?php } else if($_GET["do"]=="edit") { $response = mysql_fetch_object(mysql_query("SELECT * FROM `responses` WHERE `id`=".$_GET['id'])); ?> <legend>Edit Response</legend> <form method="post" action="" id="resp"> <p> If <span id="ifholder"> <?php $conds = mysql_fetch_object(mysql_query("SELECT * FROM `responses` WHERE `id`=". $_GET['id']))->conditions; $conds = explode(";",$conds); $conds = array_slice($conds, 0, count($conds)-1); $on = 1; foreach($conds as $cond) { $tk = explode(",",$cond); if(count($tk) > 3) { ?> <span id="if<?php echo $on; ?>" class="block"> <select name="if<?php echo $on; ?>lpar"> <?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\""; if($i==intval($tk[0])) echo " selected='selected'"; echo ">"; for($j = 0; $j < $i; $j++) echo "("; echo "</option>"; } ?> </select> <select name="if<?php echo $on; ?>not"> <option value="0"></option> <option value="1"<?php if(intval($tk[1])==1) { ?> selected="selected"<?php } ?>>not</option> </select> <select name="if<?php echo $on; ?>cond"> <?php $q = mysql_query("SELECT * FROM `conditions`"); while($cond = mysql_fetch_object($q)) { echo "<option value='". $cond->id ."'"; if($cond->id == intval($tk[2])) echo " selected='selected'"; echo ">". $cond->friendlyname ."</option>"; } ?> </select> <input type="text" name="if<?php echo $on; ?>param" value="<?php echo escapeDoubleQuotes($tk[3]); ?>" /> <select name="if<?php echo $on; ?>rpar"> <?php for($i = 0; $i < 6; $i++) { echo "<option value=\"$i\""; if($i==intval($tk[4])) echo " selected='selected'"; echo ">"; for($j = 0; $j < $i; $j++) echo ")"; echo "</option>"; } ?> </select> <img src='img/arrow_up.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowUp(<?php echo $on; ?>);' /> <img src='img/arrow_down.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowDown(<?php echo $on; ?>);' /> <img src='img/delete.png' class='fakelink' style='vertical-align: text-bottom;' onclick='handleRowDelete(<?php echo $on; ?>);' /> </span> <?php for($i = 0; $i < intval($tk[0]); $i++) $ret .= "("; if($tk[1] == "1") $ret .= "not "; $ret .= $condtypes[intval($tk[2])] ." ". $tk[3]; for($i = 0; $i < intval($tk[4]); $i++) $ret .= ")"; $ret .= " "; $i++; } else { ?> <span id="op<?php echo $i; ?>"> <select name='op<?php echo $i; ?>'> <option value='0'>and</option> <option value='1'<?php if(intval($tk[0]==1)) { ?> selected="selected" <?php } ?>>or</option> </select> </span> <?php } } ?> </span> <span class="block"> <a href="javascript:addCondition();">Add Condition</a> </span> </p> <p> then <select name="resptype" id="resptype" onchange="handleRespChange();"> <?php $q = mysql_query("SELECT * FROM `resptypes`"); $descarr = array(); for($i = 0;;$i++) { $type = mysql_fetch_object($q); if(!$type) break; echo "<option value='". $type->id ."'"; if($type->id==$response->respid) echo " selected='selected'"; echo ">". $type->friendlyname ."</option>"; $descarr[$i] = $type->description; } ?> </select> <?php $i = 0; foreach($descarr as $desc) { echo "<p style='display:none;' id='$i'>". $desc ."</p>"; $i++; } ?> </p> <p> <span class="block" id="respDesc"> <?php echo $d = mysql_fetch_object(mysql_query("SELECT * FROM `resptypes` WHERE `id`=". $response->respid))->description; ?> </span> <span class="block">Parameters: <center> <textarea name="parameters" rows="8" style="width:95%;"><?php echo $response->parameters; ?></textarea> </center></span> </p> <p> Cooldown: <select name="cdd" id="cdd" onchange="coolChange();"> <option value="0">Default</option> <option value="1"<?php if($response->cooldown != -1) { ?> selected="selected"<?php } ?>>Custom</option> </select> <input type="textbox" name="cooldown" id="cooldown" size="6" value="<?php if($response->cooldown == -1) echo $config->cooldown; else echo $response->cooldown; ?>"<?php if($response->cooldown == -1) { ?> disabled="disabled"<?php } ?> /> seconds <select name="indie" id="indie"<?php if($response->cooldown == -1) { ?> disabled="disabled"<?php } ?>> <option value="0">dependent on the default cooldown</option> <option value="1"<?php if($response->independent) { ?> selected="selected"<?php } ?>>independent of the default cooldown</option> </select> </p> <p> <input type="button" name="editResponse" value="Edit Response" onclick="evaluateCondition();" /> <input type="hidden" name="editId" value="<?php echo $_GET['id']; ?>" /> <input type="button" value="Cancel" onclick="window.location.href = 'resp.php';" /> </p> </form> <script type="text/javascript"> redrawList(); </script> <?php } ?> </fieldset> </center> <?php include("footer.php"); ?>