/code/web/app/app_achievements_admin/class/AdmAtom_class.php
PHP | 347 lines | 223 code | 59 blank | 65 comment | 18 complexity | 548a79ccd60368eeecab8b5a16f1ab88 MD5 | raw file
Possible License(s): AGPL-3.0, GPL-3.0, LGPL-2.1
- <?php
- class AdmAtom extends Node implements ADM {
- #########################
- # PHP 5.3 compatible
- # AdmDispatcher_trait replaces this in PHP 5.4
-
- function insertNode($n) {
- $n->setParent($this);
- $n->insert();
- $this->addChild($n);
- }
-
- function removeNode($id) {
- $res = $this->getChildDataByID($id);
- if($res != null) {
- $res->delete_me();
- $this->removeChild($id);
- }
- }
-
- function updateNode($id) { // PROBABLY USELESS!
- $res = $this->getChildDataByID($id);
- if($res != null) {
- $res->update();
- }
- }
-
- function getPathID($path = "") {
- if($path != "") {
- $path = ";".$path;
- }
- $path = $this->getID().$path;
- if($this->parent != null) {
- return $this->parent->getPathID($path);
- }
-
- return $path;
- }
-
- function getElementByPath($pid) {
- $tmp = explode(";",$pid);
- if($tmp[0] == $this->getID()) {
- if(sizeof($tmp) > 1) {
- $c = $this->getChildDataByID($tmp[1]);
- if($c != null) {
- unset($tmp[0]);
- return $c->getElementByPath(implode(";",$tmp));
- }
- return null;
- }
- else {
- return $this;
- }
- }
- return null;
- }
- #########################
-
- protected $objective;
- protected $mandatory;
- protected $ruleset;
- protected $ruleset_parsed;
- protected $parent_id;
-
- function AdmAtom($data,$parent) {
- $this->parent = $parent;
- $this->id = $data['atom_id'];
- $this->objective = $data['atom_objective'];
- $this->mandatory = $data['atom_mandatory'];
- $this->ruleset = $data['atom_ruleset'];
- $this->ruleset_parsed = $data['atom_ruleset_parsed'];
- }
-
- function delete_me() { // aaaaand... it's gone ^^
- global $DBc;
-
- $DBc->sqlQuery("DELETE FROM ach_atom WHERE atom_id='".$this->id."'");
- $DBc->sqlQuery("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."'");
- }
-
- function update() { // write updated data to database
- global $DBc;
-
- $DBc->sqlQuery("UPDATE ach_atom SET atom_mandatory='".$this->getMandatory()."',atom_ruleset='".$DBc->sqlEscape($this->getRuleset())."',atom_ruleset_parsed='".$DBc->sqlEscape($this->getRulesetParsed())."' WHERE atom_id='".$this->id."'");
- }
-
- function insert() { // insert atoms as new row
- global $DBc;
-
- $DBc->sqlQuery("INSERT INTO ach_atom (atom_objective,atom_mandatory,atom_ruleset,atom_ruleset_parsed) VALUES ('".$this->getObjective()."','".$this->getMandatory()."','".$DBc->sqlEscape($this->getRuleset())."','".$DBc->sqlEscape($this->getRulesetParsed())."')");
- $id = $DBc->insertID();
- $this->setID($id);
- }
-
- function getObjective() {
- return $this->objective;
- }
-
- function setObjective($o) {
- $this->objective = $o;
- }
-
- function setMandatory($ft) {
- if($ft == true) {
- $this->mandatory = 1;
- }
- else {
- $this->mandatory = 0;
- }
- }
-
- function setRuleset($r) {
- $this->ruleset = $r;
- $this->parse();
- }
-
- function getMandatory() {
- return $this->mandatory;
- }
-
- function isMandatory() {
- return ($this->mandatory == 1);
- }
-
- function getRuleset() {
- return $this->ruleset;
- }
-
- function getRulesetParsed() {
- return $this->ruleset_parsed;
- }
-
- private function parse() { // parsing the ruleset
- /*
- VALUE _money AS $money {
-
- CACHE blach AS $test;
-
- if($money >= 10000 && $test == 0) {
- RESET;
- GRANT $money UNTIL TIMER:3600;
- FINAL;
- }
- else {
- CACHE blach SET $money;
- }
-
- SCRIPT wealth($money) AS $res;
-
- if($res == "lol") {
- DENY;
- }
- }
-
- ENTITY _pos AS $pos {
- SCRIPT inside($pos,"majestic_garden") AS $region;
-
- if($region == true) {
- GRANT;
- }
- }
- */
-
- $res = $this->ruleset;
-
- #VALUE ([^ ]+) AS ([$][^ ]+) {#
- $match = array();
- preg_match_all("#VALUE ([^ ]+) AS ([$][^ ]+) {#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $func = "_".md5(microtime());
-
- $tmp = '$this->registerValue("'.$match[1][$key].'","'.$func.'");
-
- function '.$func.'('.$match[2][$key].',$_P,$_CB) {
- global $_CACHE;
- $_IDENT = "'.$match[1][$key].'";';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #ENTITY ([^ ]+) AS ([$][^ ]+) {#
- $match = array();
- preg_match_all("#ENTITY ([^ ]+) AS ([$][^ ]+) {#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $func = "_".md5(microtime());
-
- $tmp = '$this->registerEntity("'.$match[1][$key].'","'.$func.'");
-
- function '.$func.'('.$match[2][$key].',$_P,$_CB) {
- global $_CACHE;
- $_IDENT = "'.$match[1][$key].'";';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #EVENT ([^ ]+) AS ([$][^ ]+) {#
- $match = array();
- preg_match_all("#EVENT ([^ ]+) AS ([$][^ ]+) {#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $func = "_".md5(microtime());
-
- $tmp = '$this->registerEvent("'.$match[1][$key].'","'.$func.'");
-
- function '.$func.'('.$match[2][$key].',$_P,$_CB) {
- global $_CACHE;
- $_IDENT = "'.$match[1][$key].'";';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #GRANT ([^;]*);#
- $match = array();
- preg_match_all("#GRANT ([^;]*);#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $tmp = '$_P->grant('.$match[1][$key].');';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #GRANT;#
- $match = array();
- preg_match_all("#GRANT;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->grant();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #DENY;#
- $match = array();
- preg_match_all("#DENY;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->deny();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #UNLOCK;#
- $match = array();
- preg_match_all("#UNLOCK;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->unlock();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #RESET;#
- $match = array();
- preg_match_all("#RESET;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->reset_();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #UNLOCK_ALL;#
- $match = array();
- preg_match_all("#UNLOCK_ALL;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->unlock_all();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #RESET_ALL;#
- $match = array();
- preg_match_all("#RESET_ALL;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->reset_all();';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #FINAL VALUE;#
- $match = array();
- preg_match_all("#FINAL VALUE;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->unregisterValue($_IDENT,$_CB);';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #FINAL ENTITY;#
- $match = array();
- preg_match_all("#FINAL ENTITY;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->unregisterEntity($_IDENT,$_CB);';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
- #FINAL EVENT;#
- $match = array();
- preg_match_all("#FINAL EVENT;#",$this->ruleset,$match);
- foreach($match[0] as $elem) {
- $tmp = '$_P->unregisterEvent($_IDENT,$_CB);';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #CACHE ([^ ]+) AS ([$][^ ]+);#
- $match = array();
- preg_match_all("#CACHE ([^ ]+) AS ([$][^;]+);#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $tmp = $match[2][$key].' = $_CACHE->getData(\''.$match[1][$key].'\');';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #CACHE ([^ ]+) SET ([$][^ ]+);#
- $match = array();
- preg_match_all("#CACHE ([^ ]+) SET ([$][^;]+);#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $tmp = '$_CACHE->writeData(\''.$match[1][$key].'\','.$match[2][$key].');';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- #SCRIPT ([^ ]+) AS ([$][^ ]+);#
- $match = array();
- preg_match_all("#SCRIPT ([^\(]+)\(([^\)]*)\) AS ([$][^;]+);#",$this->ruleset,$match);
- foreach($match[0] as $key=>$elem) {
- $tmp = '@include_once("script/'.$match[1][$key].'_script.php");
- '.$match[3][$key].' = '.$match[1][$key].'('.$match[2][$key].');';
-
- //replace
- $res = str_replace($elem,$tmp,$res);
- }
-
- $this->ruleset_parsed = $res;
- }
- }
- ?>