From c6c47d6d88a48c42e63c2dcf97db811b97ed0430 Mon Sep 17 00:00:00 2001 From: SirCotare Date: Tue, 7 Aug 2012 17:41:50 +0200 Subject: [PATCH] #1470 repo update to latest version (web app) --HG-- branch : gsoc2012-achievements --- .../_AchWebParser/AchWebParser.php | 101 +- .../_AchWebParser/class/Atom_class.php | 23 +- .../class/DataDispatcher_class.php | 1 - .../_AchWebParser/class/Entity_abstract.php | 13 + .../_AchWebParser/class/Logfile_class.php | 34 +- .../_AchWebParser/class/mySQL_class.php | 4 +- .../app_achievements/_AchWebParser/conf.php | 26 +- .../_AchWebParser/script/in_region_script.php | 128 +++ .../script/include_InPoly_class.php | 68 ++ .../PDRtoXMLdriver/PDRtoXMLdriver_class.php | 654 ++++++++++++- .../entity/FactionPoints_entity.php | 10 + .../PDRtoXMLdriver/entity/Fame_entity.php | 12 + .../PDRtoXMLdriver/entity/Gear_entity.php | 9 + .../PDRtoXMLdriver/entity/Item_entity.php | 28 + .../entity/LastLogStats_entity.php | 11 + .../entity/MissionList_entity.php | 9 + .../PDRtoXMLdriver/entity/Mission_entity.php | 11 + .../entity/PermanentMod_entity.php | 10 + .../PDRtoXMLdriver/entity/Pet_entity.php | 24 + .../entity/PhysCharacs_entity.php | 10 + .../entity/PhysScores_entity.php | 15 + .../PDRtoXMLdriver/entity/Position_entity.php | 12 + .../entity/SkillList_entity.php | 9 + .../entity/SkillPoints_entity.php | 10 + .../PDRtoXMLdriver/entity/Skill_entity.php | 14 + .../entity/SpentSkillPoints_entity.php | 10 + .../app/app_achievements/_doc/devshot_005.jpg | Bin 0 -> 33804 bytes .../class/AchAchievement_class.php | 4 + .../class/AchMenuNode_class.php | 4 + .../app_achievements/class/AchMenu_class.php | 4 +- .../class/AchObjective_class.php | 2 +- .../app_achievements/class/AchPerk_class.php | 4 + .../class/AchSummary_class.php | 2 +- code/web/app/app_achievements/conf.php | 4 + code/web/app/app_achievements/fb.php | 57 ++ code/web/app/app_achievements/fb/facebook.php | 93 ++ .../include/ach_render_ig.php | 4 +- .../include/ach_render_web.php | 33 +- code/web/app/app_achievements/index.php | 208 ++-- .../app/app_achievements/pic/f-connect.png | Bin 0 -> 4336 bytes .../app_achievements/pic/facebook-logo.png | Bin 0 -> 22766 bytes .../class/AdmAchievement_class.php | 61 +- .../class/AdmAtom_class.php | 272 +++++- .../class/AdmCategory_class.php | 51 +- .../class/AdmMenuNode_class.php | 15 +- .../class/AdmMenu_class.php | 56 +- .../class/AdmObjective_class.php | 63 +- .../class/AdmPerk_class.php | 100 +- .../class/CSRAchievement_class.php | 64 +- .../class/CSRCategory_class.php | 64 +- .../class/CSRObjective_class.php | 64 +- .../class/CSRPerk_class.php | 64 +- .../include/adm_render_ach.php | 170 ++-- .../include/adm_render_atom.php | 910 +++--------------- .../include/adm_render_lang.php | 193 ++++ .../include/adm_render_menu.php | 10 +- code/web/app/app_achievements_admin/index.php | 117 ++- 57 files changed, 2819 insertions(+), 1130 deletions(-) create mode 100644 code/web/app/app_achievements/_AchWebParser/class/Entity_abstract.php create mode 100644 code/web/app/app_achievements/_AchWebParser/script/in_region_script.php create mode 100644 code/web/app/app_achievements/_AchWebParser/script/include_InPoly_class.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/FactionPoints_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Fame_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Gear_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Item_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/LastLogStats_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/MissionList_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Mission_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PermanentMod_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Pet_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysCharacs_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysScores_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Position_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillList_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillPoints_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Skill_entity.php create mode 100644 code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SpentSkillPoints_entity.php create mode 100644 code/web/app/app_achievements/_doc/devshot_005.jpg create mode 100644 code/web/app/app_achievements/fb.php create mode 100644 code/web/app/app_achievements/fb/facebook.php create mode 100644 code/web/app/app_achievements/pic/f-connect.png create mode 100644 code/web/app/app_achievements/pic/facebook-logo.png create mode 100644 code/web/app/app_achievements_admin/include/adm_render_lang.php diff --git a/code/web/app/app_achievements/_AchWebParser/AchWebParser.php b/code/web/app/app_achievements/_AchWebParser/AchWebParser.php index 0d02dcc70..3394635f3 100644 --- a/code/web/app/app_achievements/_AchWebParser/AchWebParser.php +++ b/code/web/app/app_achievements/_AchWebParser/AchWebParser.php @@ -9,39 +9,34 @@ require_once("class/mySQL_class.php"); require_once("conf.php"); require_once("include/functions_inc.php"); + require_once("class/Entity_abstract.php"); - $_REQUEST['file'] = $argv[1]; + if(!$_REQUEST['file']) { + $_REQUEST['file'] = $argv[1]; + } - - /*$logfile = false; + $log = new Logfile(); if($CONF['logging'] == true) { require_once("class/Logfile_class.php"); - #$logfile = fopen($CONF['logfile'].'.'.date("Ymd",time()).'.txt','a'); - $logfile = new Logfile($CONF['logfile']);#!! MUST HAVE ONE LOGFILE PER RUN!! - }*/ + $log = new Logfile($CONF['logfile']); + } - //set mode: cron || single with given cid - #MISSING: conf to allow external calls; whitelist ips - /*$MODE = "CRON"; - if($_REQUEST["cid"] > 0 || $_REQUEST["invoke"] == "TRUE") { - if($_REQUEST["cid"] > 0 && $_REQUEST["invoke"] == "TRUE") { - $MODE = "SINGLE"; - $CID = $DBc->mre($_REQUEST["cid"]); - } - else { - $e = "Failed to start SINGLE mode; cid=".$_REQUEST["cid"]; - logf($e); - die($e); - } - }*/ + $log->logf("File: '".$_REQUEST['file']."'"); + + $log->logf("Starting up... ",false); + + if(!$_REQUEST['file']) { + $log->logf("ERROR: no file given! EXITING!"); + die(); + } //create database connection $DBc = new mySQL($CONF['mysql_error']); $DBc->connect($CONF['mysql_server'],$CONF['mysql_user'],$CONF['mysql_pass'],$CONF['mysql_database']); - #if($MODE == "CRON") { - # $RID = $DBc->sendSQL("INSERT INTO ach_monitor_state (ams_start,ams_end) VALUES ('".time()."','0')","INSERT"); // insert run into monitoring table - #} + $DBc_char = new mySQL($_CONF['mysql_error']); + $DBc_char->connect($CONF['char_mysql_server'],$CONF['char_mysql_user'],$CONF['char_mysql_pass'],$CONF['char_mysql_database']); + require_once("class/DataDispatcher_class.php"); require_once("class/DataSourceHandler_class.php"); @@ -50,11 +45,8 @@ require_once("class/ValueCache_class.php"); require_once("class/Atom_class.php"); - #MISSING: static ValueCache! - $_CACHE = new ValueCache(); - //create datasource handler $_DISPATCHER = new DataDispatcher(); $_DATASOURCE = new DataSourceHandler(); @@ -64,87 +56,98 @@ $_DATASOURCE->addSource($tmp); } - // fetch candidates - /*if($MODE == "SINGLE") { - $chars = array(); - $chars[] = array('amc_character',$CID); - } - else { - #$chars = array(); - - $DBc->sendSQL("UPDATE ach_monitor_character SET amc_working='0' WHERE amc_last_import<'".(time()-60*60)."'"); // unlock if something went wrong - - $DBc->sendSQL("UPDATE ach_monitor_character SET amc_working='".$RID."' WHERE amc_last_login>amc_last_import AND amc_working='0'","NONE"); - - $chars = $DBc->sendSQL("SELECT amc_character FROM ach_monitor_character WHERE amc_working='".$RID."'","ARRAY"); - }*/ + #REPLACE WITH REGEX!!! $tmp = explode("/",$_REQUEST['file']); $tmp2 = explode("_",$tmp[(sizeof($tmp)-1)]); $chars = array(($tmp2[1]*16+$tmp2[2])); + + $log->logf(" done!"); foreach($chars as $cid) { #STEP 1: load and register atoms + $log->logf("Processing char '".$cid."' ..."); + + $log->logi("Loading and registering Atoms... ",false); + $atom_list = array(); $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$cid."' AND app_perk=ap_id)","ARRAY"); foreach($res as $perk) { //get unfinished atoms belonging to unfinished objectives - $res2 = $DBc->sendSQL("SELECT ach_atom.* FROM ach_atom,ach_objective WHERE ao_perk='".$perk['ap_id']."' AND ao_id=atom_objective AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_player='".$cid."' AND apo_objective=ao_id)","ARRAY"); + $res2 = $DBc->sendSQL("SELECT ach_atom.* FROM ach_atom,ach_objective,ach_achievement WHERE ao_perk='".$perk['ap_id']."' AND ao_id=atom_objective AND ap_achievement=aa_id AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_player='".$cid."' AND apo_objective=ao_id) AND (aa_tie_race IS NULL OR aa_tie_race='') AND (aa_tie_cult IS NULL OR aa_tie_cult='') AND (aa_tie_civ IS NULL OR aa_tie_civ='')","ARRAY"); foreach($res2 as $atom) { $a = new Atom($atom,$cid); $atom_list[] = $a; $a->register(); } } + + $log->logf("done!"); + + $log->logi("Driving data... ",false); #STEP 2: drive data $_CACHE->setChar($cid); $_DATASOURCE->drive($cid); + $log->logf("done!"); + #STEP 3: detect obj/perk progression + $log->logi("Detecting Objectives... ",false); //obj - $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='all' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND NOT EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id AND EXISTS (SELECT * FROM ach_player_atom WHERE apa_atom=atom_id AND apa_state!='GRANT' AND apa_player='".$cid."'))","ARRAY"); + $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='all' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND NOT EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id AND NOT EXISTS (SELECT * FROM ach_player_atom WHERE apa_atom=atom_id AND apa_state='GRANT' AND apa_player='".$cid."')) AND EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id)","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_objective (apo_objective,apo_player,apo_date) VALUES ('".$res[$i]['ao_id']."','".$cid."','".time()."')","NONE"); } - $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='value' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND ao_value<=(SELECT count(*) FROM ach_atom WHERE atom_objective=ao_id AND EXISTS (SELECT * FROM ach_player_atom WHERE apa_atom=atom_id AND apa_state='GRANT' AND apa_player='".$cid."'))","ARRAY"); + $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='value' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND ao_value<=(SELECT sum(apa_value) FROM ach_atom,ach_player_atom WHERE atom_objective=ao_id AND apa_atom=atom_id AND apa_state='GRANT' AND apa_player='".$cid."') AND EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id)","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_objective (apo_objective,apo_player,apo_date) VALUES ('".$res[$i]['ao_id']."','".$cid."','".time()."')","NONE"); } - $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='any' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id AND EXISTS (SELECT * FROM ach_player_atom WHERE apa_atom=atom_id AND apa_state='GRANT' AND apa_player='".$cid."'))","ARRAY"); + $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='any' AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."') AND EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id AND EXISTS (SELECT * FROM ach_player_atom WHERE apa_atom=atom_id AND apa_state='GRANT' AND apa_player='".$cid."')) AND EXISTS (SELECT * FROM ach_atom WHERE atom_objective=ao_id)","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_objective (apo_objective,apo_player,apo_date) VALUES ('".$res[$i]['ao_id']."','".$cid."','".time()."')","NONE"); } + $log->logf("done!"); + $log->logi("Clearing atom data... ",false); + + //clear atom state for completed objectives + $DBc->sendSQL("DELETE FROM ach_player_atom WHERE EXISTS (SELECT * FROM ach_player_objective,ach_atom WHERE atom_id=apa_atom AND apa_player='".$cid."' AND atom_objective=ao_id)"); + + $log->logf("done!"); + //perk - $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='all' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND NOT EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."'))","ARRAY"); + $log->logi("Detecting Perks... ",false); + $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='all' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND NOT EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id AND NOT EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."')) AND EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id) AND ap_dev='0'","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_perk (app_perk,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$cid."','".time()."')","NONE"); } - $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='value' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND ap_value<=(SELECT count(*) FROM ach_objective WHERE ao_perk=ap_id AND EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."'))","ARRAY"); + $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='value' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND ap_value<=(SELECT count(*) FROM ach_objective WHERE ao_perk=ap_id AND EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."')) AND EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id) AND ap_dev='0'","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_perk (app_perk,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$cid."','".time()."')","NONE"); } - $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='any' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id AND EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."'))","ARRAY"); + $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='any' AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_perk=ap_id AND app_player='".$cid."') AND EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id AND EXISTS (SELECT * FROM ach_player_objective WHERE apo_objective=ao_id AND apo_player='".$cid."')) AND EXISTS (SELECT * FROM ach_objective WHERE ao_perk=ap_id) AND ap_dev='0'","ARRAY"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $DBc->sendSQL("INSERT INTO ach_player_perk (app_perk,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$cid."','".time()."')","NONE"); } + + $log->logf("done!"); } - - + $log->logf("Run complete; exiting..."); + exit(0); ?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php b/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php index 700475e45..9e9bc30ab 100644 --- a/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php +++ b/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php @@ -17,7 +17,7 @@ function register() { global $DBc,$_DATA; - echo "register
"; + #echo "register
"; try { return eval($this->ruleset); @@ -40,18 +40,29 @@ $_DISPATCHER->unregisterValue($name,$callback); } - function grant() { + function registerEntity($name,$func) { + global $_DISPATCHER; + + $tmp = new Callback($this,$func); + $_DISPATCHER->registerEntity($name,$tmp); + } + + function unregisterEntity($name,$callback) { + global $_DISPATCHER; + + $_DISPATCHER->unregisterEntity($name,$callback); + } + + function grant($count = 1) { global $DBc; - echo "G
"; - - $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state) VALUES ('".$this->id."','".$this->user."','".time()."',null,'GRANT')","NONE"); + $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state,apa_value) VALUES ('".$this->id."','".$this->user."','".time()."',null,'GRANT','".$count."')","NONE"); } function deny() { global $DBc; - $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state) VALUES ('".$this->id."','".$this->user."','".time()."',null,'DENY')","NONE"); + $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state) VALUES ('".$this->id."','".$this->user."','".time()."',null,'DENY','1')","NONE"); } function reset_() { diff --git a/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php b/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php index b20239821..2ee25d979 100644 --- a/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php +++ b/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php @@ -53,7 +53,6 @@ } function dispatchValue($key,$val) { - echo "dispatching: $key=>$val
"; if(is_array($this->value[$key])) { foreach($this->value[$key] as $callback) { $callback->call($val); diff --git a/code/web/app/app_achievements/_AchWebParser/class/Entity_abstract.php b/code/web/app/app_achievements/_AchWebParser/class/Entity_abstract.php new file mode 100644 index 000000000..e7322444a --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/class/Entity_abstract.php @@ -0,0 +1,13 @@ +name; + } + + function setName($n) { + $this->name = $n; + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/class/Logfile_class.php b/code/web/app/app_achievements/_AchWebParser/class/Logfile_class.php index 58254ff3c..aab4cb01c 100644 --- a/code/web/app/app_achievements/_AchWebParser/class/Logfile_class.php +++ b/code/web/app/app_achievements/_AchWebParser/class/Logfile_class.php @@ -3,20 +3,34 @@ private $logfile; private $buffer; - function Logfile($f) { - $this->logfile = $f; - $this->buffer = ""; + function Logfile($f = false) { + $this->logfile = false; + + if($f != false) { + $this->logfile = fopen($this->logfile.'.'.$_REQUEST['file'].'.'.date("Ymd",time()).'.txt','a');; + } } - function append($t) { - $this->buffer .= $t; + function logf($t,$nl = true) { + $this->write($t); + if($nl == true) { + $this->write("\n"); + } } - function write() { - $f = fopen($this->logfile.'.'.date("Ymd",time()).'.txt','a'); - fwrite($f,$this->buffer); - fclose($f); - $this->buffer = ""; + function logi($t,$nl = true) { + $this->write(" > ".$t); + if($nl == true) { + $this->write("\n"); + } + } + + function write($txt) { + fwrite($this->logfile,$txt); + } + + function close() { + fclose($this->logfile); } } ?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/class/mySQL_class.php b/code/web/app/app_achievements/_AchWebParser/class/mySQL_class.php index dba981254..5aca70da4 100644 --- a/code/web/app/app_achievements/_AchWebParser/class/mySQL_class.php +++ b/code/web/app/app_achievements/_AchWebParser/class/mySQL_class.php @@ -132,6 +132,8 @@ } private function error($error,$query = false) { + global $log; + $this->DBstats['error']++; if($query != false) { @@ -149,7 +151,7 @@ echo ""; break; case 'LOG': - logf("MySQL ERROR: ".$error); + $log->logf("MySQL ERROR: ".$error); break; default: flush(); diff --git a/code/web/app/app_achievements/_AchWebParser/conf.php b/code/web/app/app_achievements/_AchWebParser/conf.php index 5cf0e27ff..dc5286fd1 100644 --- a/code/web/app/app_achievements/_AchWebParser/conf.php +++ b/code/web/app/app_achievements/_AchWebParser/conf.php @@ -1,31 +1,21 @@ \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/script/in_region_script.php b/code/web/app/app_achievements/_AchWebParser/script/in_region_script.php new file mode 100644 index 000000000..282670c79 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/script/in_region_script.php @@ -0,0 +1,128 @@ +sendSQL("SELECT c_pos_x,c_pos_y FROM ryzom_character WHERE c_xmlid='".$xmlid."'","ARRAY"); + #$points[] = floor($comp[0]['c_pos_x'])." ".floor($comp[0]['c_pos_y']); + $points[] = floor($pos->x/1000)." ".floor($pos->y/1000); + + $pointLocation = new pointLocation(); + + foreach($points as $point) { + if($pointLocation->pointInPolygon($point, $region[$where], false) != "outside") { + return true; + } + } + + echo "false"; + + return false; + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/script/include_InPoly_class.php b/code/web/app/app_achievements/_AchWebParser/script/include_InPoly_class.php new file mode 100644 index 000000000..491fa11bb --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/script/include_InPoly_class.php @@ -0,0 +1,68 @@ +pointOnVertex = $pointOnVertex; + + // Transform string coordinates into arrays with x and y values + $point = $this->pointStringToCoordinates($point); + $vertices = array(); + foreach($polygon as $vertex) { + $vertices[] = $this->pointStringToCoordinates($vertex); + } + + // Check if the point sits exactly on a vertex + if($this->pointOnVertex == true and $this->pointOnVertex($point, $vertices) == true) { + return "vertex"; + } + + // Check if the point is inside the polygon or on the boundary + $intersections = 0; + $vertices_count = count($vertices); + + for($i=1; $i < $vertices_count; $i++) { + $vertex1 = $vertices[$i-1]; + $vertex2 = $vertices[$i]; + if($vertex1['y'] == $vertex2['y'] and $vertex1['y'] == $point['y'] and $point['x'] > min($vertex1['x'], $vertex2['x']) and $point['x'] < max($vertex1['x'], $vertex2['x'])) { // Check if point is on an horizontal polygon boundary + return "boundary"; + } + if($point['y'] > min($vertex1['y'], $vertex2['y']) and $point['y'] <= max($vertex1['y'], $vertex2['y']) and $point['x'] <= max($vertex1['x'], $vertex2['x']) and $vertex1['y'] != $vertex2['y']) { + $xinters = ($point['y'] - $vertex1['y']) * ($vertex2['x'] - $vertex1['x']) / ($vertex2['y'] - $vertex1['y']) + $vertex1['x']; + if($xinters == $point['x']) { // Check if point is on the polygon boundary (other than horizontal) + return "boundary"; + } + if($vertex1['x'] == $vertex2['x'] || $point['x'] <= $xinters) { + $intersections++; + } + } + } + // If the number of edges we passed through is even, then it's in the polygon. + if ($intersections % 2 != 0) { + return "inside"; + } + else { + return "outside"; + } + } + + function pointOnVertex($point, $vertices) { + foreach($vertices as $vertex) { + if ($point == $vertex) { + return true; + } + } + + } + + function pointStringToCoordinates($pointString) { + $coordinates = explode(" ", $pointString); + return array("x" => $coordinates[0], "y" => $coordinates[1]); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/PDRtoXMLdriver_class.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/PDRtoXMLdriver_class.php index 60241dca2..b48da1c0d 100644 --- a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/PDRtoXMLdriver_class.php +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/PDRtoXMLdriver_class.php @@ -1,9 +1,34 @@ lock = 0; + $this->open = null; + $this->entity = null; + $this->inv = null; + $this->iblock = false; + $this->gear = new Gear(); + $this->skills = new SkillList(); + $this->mission = new MissionList(); + + //these nodes are ignored, but children are processed $this->ignore = array(); $this->ignore[] = "XML"; $this->ignore[] = "ENTITYBASE"; $this->ignore[] = "NORMALPOSITIONS"; $this->ignore[] = "_VEC"; $this->ignore[] = "SESSIONID"; - $this->ignore[] = "POSSTATE"; + #$this->ignore[] = "POSSTATE"; $this->ignore[] = "_PLAYERROOM"; $this->ignore[] = "_INVENTORYID"; $this->ignore[] = "_PHYSCHARACS"; $this->ignore[] = "_PHYSSCORES"; $this->ignore[] = "_SKILLS"; $this->ignore[] = "_FAMES"; - + + //these nodes are ignored, as well as their children $this->ignore_block = array(); $this->ignore_block[] = "_MEMORIZEDPHRASES"; $this->ignore_block[] = "_FORBIDPOWERDATES"; @@ -45,7 +80,7 @@ } function drive($cid) { - global $CONF; + global $CONF,$_DISPATCHER; echo "kk"; @@ -64,6 +99,10 @@ echo "error"; } xml_parser_free($xml_parser); + + $_DISPATCHER->dispatchEntity($this->gear->getName(),$this->gear); + $_DISPATCHER->dispatchEntity($this->skills->getName(),$this->skills); + $_DISPATCHER->dispatchEntity($this->skills->mission(),$this->mission); } function startElement($parser, $name, $attrs) { @@ -81,17 +120,624 @@ $this->lock = 1; return null; } + + /* faction points */ + if($name == "FACTIONPOINTS") { + $this->open = "FACTIONPOINTS"; + return null; + } + + if($this->open == "FACTIONPOINTS") { + if($name == "__KEY__") { + $this->entity = new FactionPoints(); + $this->entity->faction = $attrs["VALUE"]; + return null; + } + + if($name == "__VAL__") { + $this->entity->value = $attrs["VALUE"]; + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + return null; + } + + /* Fame */ + if($name == "_FAME") { + $this->open = "_FAME"; + return null; + } + + if($this->open == "_FAME") { + if($name == "__KEY__") { + $this->entity = new Fame(); + $this->entity->faction = $attrs["VALUE"]; + return null; + } + + if($name == "FAME") { + $this->entity->fame = $attrs["VALUE"]; + return null; + } + if($name == "FAMEMEMORY") { + $this->entity->famememory = $attrs["VALUE"]; + return null; + } + if($name == "LASTFAMECHANGETREND") { + $this->entity->lastfamechangetrend = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* last log stats */ + if($name == "_LASTLOGSTATS") { + $this->open = "_LASTLOGSTATS"; + $this->entity = new LastLogStats(); + return null; + } + + if($this->open == "_LASTLOGSTATS") { + if($name == "LOGINTIME") { + $this->entity->logintime = $attrs["VALUE"]; + return null; + } + if($name == "DURATION") { + $this->entity->duration = $attrs["VALUE"]; + return null; + } + if($name == "LOGOFFTIME") { + $this->entity->logofftime = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* mission */ + if($name == "_MISSIONHISTORIES") { + $this->open = "_MISSIONHISTORIES"; + return null; + } + + if($this->open == "_MISSIONHISTORIES") { + if($name == "__KEY__") { + $this->entity = new Mission(); + $this->entity->mission = $attrs["VALUE"]; + return null; + } + + if($name == "SUCCESSFULL") { + $this->entity->successfull = $attrs["VALUE"]; + return null; + } + if($name == "UTC_LASTSUCCESSDATE") { + $this->entity->utc_lastsuccessdate = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* permanent mod */ + if($name == "SCOREPERMANENTMODIFIERS") { + $this->open = "SCOREPERMANENTMODIFIERS"; + return null; + } + + if($this->open == "SCOREPERMANENTMODIFIERS") { + if($name == "__KEY__") { + $this->entity = new PermanentMod(); + $this->entity->score = $attrs["VALUE"]; + return null; + } + + if($name == "__VAL__") { + $this->entity->value = $attrs["VALUE"]; + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + return null; + } + + /* pet */ + if($name == "_PLAYERPETS") { + $this->open = "_PLAYERPETS"; + return null; + } + + if($this->open == "_PLAYERPETS") { + if($name == "__KEY__") { + $this->entity = new Pet(); + $this->entity->pet = $attrs["VALUE"]; + return null; + } + + if($name == "TICKETPETSHEETID") { + $this->entity->ticketpetsheetid = $attrs["VALUE"]; + return null; + } + if($name == "PETSHEETID") { + $this->entity->petsheetid = $attrs["VALUE"]; + return null; + } + if($name == "PRICE") { + $this->entity->price = $attrs["VALUE"]; + return null; + } + if($name == "OWNERID") { + $this->entity->ownerid = $attrs["VALUE"]; + return null; + } + if($name == "STABLEALIAS") { + $this->entity->stablealias = $attrs["VALUE"]; + return null; + } + if($name == "LANDSCAPE_X") { + $this->entity->landscape_x = $attrs["VALUE"]; + return null; + } + if($name == "LANDSCAPE_Y") { + $this->entity->landscape_y = $attrs["VALUE"]; + return null; + } + if($name == "LANDSCAPE_Z") { + $this->entity->landscape_z = $attrs["VALUE"]; + return null; + } + if($name == "UTC_DEATHTICK") { + $this->entity->utc_deathtick = $attrs["VALUE"]; + return null; + } + if($name == "PETSTATUS") { + $this->entity->petstatus = $attrs["VALUE"]; + return null; + } + if($name == "SLOT") { + $this->entity->slot = $attrs["VALUE"]; + return null; + } + if($name == "ISTPALLOWED") { + $this->entity->istpallowed = $attrs["VALUE"]; + return null; + } + if($name == "SATIETY") { + $this->entity->satiety = $attrs["VALUE"]; + return null; + } + if($name == "CUSTOMNAME") { + $this->entity->customname = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* physical characteristics */ + if($name == "_PHYSICALCHARACTERISTICS") { + $this->open = "_PHYSICALCHARACTERISTICS"; + return null; + } + + if($this->open == "_PHYSICALCHARACTERISTICS") { + if($name == "__KEY__") { + $this->entity = new PhysCharacs(); + $this->entity->charac = $attrs["VALUE"]; + return null; + } + + if($name == "__VAL__") { + $this->entity->value = $attrs["VALUE"]; + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + return null; + } + + /* physical scores */ + if($name == "PHYSICALSCORES") { + $this->open = "PHYSICALSCORES"; + return null; + } + + if($this->open == "PHYSICALSCORES") { + if($name == "__KEY__") { + $this->entity = new PhysScores(); + $this->entity->score = $attrs["VALUE"]; + return null; + } + + if($name == "CURRENT") { + $this->entity->current = $attrs["VALUE"]; + return null; + } + if($name == "BASE") { + $this->entity->base = $attrs["VALUE"]; + return null; + } + if($name == "MAX") { + $this->entity->max = $attrs["VALUE"]; + return null; + } + if($name == "BASEREGENERATEREPOS") { + $this->entity->baseregeneraterepos = $attrs["VALUE"]; + return null; + } + if($name == "BASEREGENERATEACTION") { + $this->entity->baseregenerateaction = $attrs["VALUE"]; + return null; + } + if($name == "CURRENTREGENERATE") { + $this->entity->currentregenerate = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* skill points */ + if($name == "SKILLPOINTS") { + $this->open = "SKILLPOINTS"; + return null; + } + + if($this->open == "SKILLPOINTS") { + if($name == "__KEY__") { + $this->entity = new SkillPoints(); + $this->entity->skill = $attrs["VALUE"]; + return null; + } + + if($name == "__VAL__") { + $this->entity->value = $attrs["VALUE"]; + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + return null; + } + + /* spent skill points */ + if($name == "SPENTSKILLPOINTS") { + $this->open = "SPENTSKILLPOINTS"; + return null; + } + + if($this->open == "SPENTSKILLPOINTS") { + if($name == "__KEY__") { + $this->entity = new SpentSkillPoints(); + $this->entity->skill = $attrs["VALUE"]; + return null; + } + + if($name == "__VAL__") { + $this->entity->value = $attrs["VALUE"]; + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + return null; + } + + /* skills */ + if($name == "SKILLS") { + $this->open = "SKILLS"; + return null; + } + + if($this->open == "SKILLS") { + if($name == "__KEY__") { + $this->entity = new Skills(); + $this->entity->skill = $attrs["VALUE"]; + return null; + } + + if($name == "BASE") { + $this->entity->base = $attrs["VALUE"]; + return null; + } + if($name == "CURRENT") { + $this->entity->current = $attrs["VALUE"]; + return null; + } + if($name == "MAXLVLREACHED") { + $this->entity->maxlvlreached = $attrs["VALUE"]; + return null; + } + if($name == "XP") { + $this->entity->xp = $attrs["VALUE"]; + return null; + } + if($name == "XPNEXTLVL") { + $this->entity->xpnextlvl = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* Position */ + if($name == "POSSTATE") { + $this->open = "POSSTATE"; + $this->entity = new Position(); + return null; + } + + if($this->open == "POSSTATE") { + if($name == "X") { + $this->entity->x = $attrs["VALUE"]; + return null; + } + if($name == "Y") { + $this->entity->y = $attrs["VALUE"]; + return null; + } + if($name == "Z") { + $this->entity->z = $attrs["VALUE"]; + return null; + } + if($name == "HEADING") { + $this->entity->heading = $attrs["VALUE"]; + return null; + } + + return null; + } + + /* items */ + + if($name == "ROOMINVENTORY") { + $this->inv = "room"; + return null; + } + + if($name == "INVENTORY") { + $this->iblock = true; + return null; + } + + if($this->iblock == true) { + if($name == "__KEY__") { + $this->inv = $attrs["VALUE"]; + } + if($name == "__VAL__") { + return null; + } + } + + if($name == "_ITEMS" || $name == "_ITEM") { + $this->open = "_ITEM"; + $this->entity = new Item(); + $this->entity->inventory = $this->inv; + return null; + } + + if($this->open == "_ITEM") { + if($name == "_CRAFTPARAMETERS") { + $this->icraft = true; + return null; + } + + if($this->icraft == true) { + $this->entity->_craftparameters[strtolower($name)] = $attrs["VALUE"]; + return null; + } + + if($name == "_ITEMID") { + $this->entity->_itemid = $attrs["VALUE"]; + return null; + } + if($name == "_SHEETID") { + $this->entity->_sheetid = $attrs["VALUE"]; + return null; + } + if($name == "_LOCSLOT") { + $this->entity->_locslot = $attrs["VALUE"]; + return null; + } + if($name == "_HP") { + $this->entity->_hp = $attrs["VALUE"]; + return null; + } + if($name == "_RECOMMENDED") { + $this->entity->_recommended = $attrs["VALUE"]; + return null; + } + if($name == "_CREATORID") { + $this->entity->_creatorid = $attrs["VALUE"]; + return null; + } + if($name == "_PHRASEID") { + $this->entity->_phraseid = $attrs["VALUE"]; + return null; + } + if($name == "_REFINVENTORYSLOT") { + $this->entity->_refinventoryslot = $attrs["VALUE"]; + return null; + } + if($name == "REFINVENTORYID") { + $this->entity->refinventoryid = $attrs["VALUE"]; + return null; + } + if($name == "_USENEWSYSTEMREQUIREMENT") { + $this->entity->_usenewsystemrequirement = $attrs["VALUE"]; + return null; + } + if($name == "_REQUIREDSKILLLEVEL") { + $this->entity->_requiredskilllevel = $attrs["VALUE"]; + return null; + } + if($name == "_CUSTOMTEXT") { + $this->entity->_customtext = $attrs["VALUE"]; + return null; + } + if($name == "_LOCKEDBYOWNER") { + $this->entity->_lockedbyowner = $attrs["VALUE"]; + return null; + } + if($name == "_DROPABLE") { + $this->entity->_dropable = $attrs["VALUE"]; + return null; + } + if($name == "STACKSIZE") { + $this->entity->stacksize = $attrs["VALUE"]; + return null; + } + } + + + + if($attrs["VALUE"] != "") { - echo "dispatching"; $_DISPATCHER->dispatchValue(strtolower($name),$attrs["VALUE"]); } } function endElement($parser, $name) { + global $_DISPATCHER; + if(in_array($name,$this->ignore_block)) { $this->lock = 0; } + + /* faction points */ + if($name == "FACTIONPOINTS") { + $this->open = null; + return null; + } + + /* fame */ + if($name == "__VAL__" && $this->open == "FAME") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + if($name == "_FAME") { + $this->open = null; + return null; + } + + /* last log stats */ + if($name == "_LASTLOGSTATS") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + /* mission */ + if($name == "__VAL__" && $this->open == "_MISSIONHISTORIES") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->mission->missions[] = $this->entity; + $this->entity = null; + return null; + } + + if($name == "_MISSIONHISTORIES") { + $this->open = null; + return null; + } + + /* permanent mod */ + if($name == "SCOREPERMANENTMODIFIERS") { + $this->open = null; + return null; + } + + /* pet */ + if($name == "__VAL__" && $this->open == "_PLAYERPETS") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + #echo "dispatched"; + $this->entity = null; + return null; + } + + if($name == "_PLAYERPETS") { + $this->open = null; + return null; + } + + /* physical characteristics */ + if($name == "_PHYSICALCHARACTERISTICS") { + $this->open = null; + return null; + } + + /* physical scores */ + if($name == "__VAL__" && $this->open == "PHYSICALSCORES") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + if($name == "PHYSICALSCORES") { + $this->open = null; + return null; + } + + /* skill points */ + if($name == "SKILLPOINTS") { + $this->open = null; + return null; + } + + /* spent skill points */ + if($name == "SPENTSKILLPOINTS") { + $this->open = null; + return null; + } + + /* skills */ + if($name == "__VAL__" && $this->open == "SKILLS") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->skills->skills[] = $this->entity; + $this->entity = null; + return null; + } + + if($name == "SKILLS") { + $this->open = null; + return null; + } + + /* position */ + if($name == "POSSTATE") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + $this->entity = null; + return null; + } + + /* items */ + if($name == "_ITEMS") { + $_DISPATCHER->dispatchEntity($this->entity->getName(),$this->entity); + if($this->entity->refinventoryid != null) { + $this->gear->items[] = $this->entity; + } + $this->entity = null; + return null; + } + + if($name == "INVENTORY") { + $this->iblock = false; + return null; + } + + if($name == "_ITEM" || $name == "_ITEMS") { + $this->open = null; + return null; + } + + } diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/FactionPoints_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/FactionPoints_entity.php new file mode 100644 index 000000000..fa18a0fc6 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/FactionPoints_entity.php @@ -0,0 +1,10 @@ +setName("faction_points"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Fame_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Fame_entity.php new file mode 100644 index 000000000..0cfc5f15b --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Fame_entity.php @@ -0,0 +1,12 @@ +setName("fame"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Gear_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Gear_entity.php new file mode 100644 index 000000000..b84008061 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Gear_entity.php @@ -0,0 +1,9 @@ +setName("gear"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Item_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Item_entity.php new file mode 100644 index 000000000..2ffb89316 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Item_entity.php @@ -0,0 +1,28 @@ +setName("item"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/LastLogStats_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/LastLogStats_entity.php new file mode 100644 index 000000000..30878f04a --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/LastLogStats_entity.php @@ -0,0 +1,11 @@ +setName("lastlogstats"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/MissionList_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/MissionList_entity.php new file mode 100644 index 000000000..ab4a7bea9 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/MissionList_entity.php @@ -0,0 +1,9 @@ +setName("missionlist"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Mission_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Mission_entity.php new file mode 100644 index 000000000..7a95ac744 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Mission_entity.php @@ -0,0 +1,11 @@ +setName("mission"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PermanentMod_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PermanentMod_entity.php new file mode 100644 index 000000000..008a74895 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PermanentMod_entity.php @@ -0,0 +1,10 @@ +setName("permanentmodifiers"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Pet_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Pet_entity.php new file mode 100644 index 000000000..e92499d93 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Pet_entity.php @@ -0,0 +1,24 @@ +setName("pet"); + #echo "created"; + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysCharacs_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysCharacs_entity.php new file mode 100644 index 000000000..c71109d02 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysCharacs_entity.php @@ -0,0 +1,10 @@ +setName("phys_characs"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysScores_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysScores_entity.php new file mode 100644 index 000000000..d7deca5bb --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/PhysScores_entity.php @@ -0,0 +1,15 @@ +setName("phys_scores"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Position_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Position_entity.php new file mode 100644 index 000000000..029b1525b --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Position_entity.php @@ -0,0 +1,12 @@ +setName("position"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillList_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillList_entity.php new file mode 100644 index 000000000..b3e885b81 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillList_entity.php @@ -0,0 +1,9 @@ +setName("skilllist"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillPoints_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillPoints_entity.php new file mode 100644 index 000000000..81582b703 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SkillPoints_entity.php @@ -0,0 +1,10 @@ +setName("skillpoints"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Skill_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Skill_entity.php new file mode 100644 index 000000000..f06132ac8 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/Skill_entity.php @@ -0,0 +1,14 @@ +setName("skill"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SpentSkillPoints_entity.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SpentSkillPoints_entity.php new file mode 100644 index 000000000..5bacb0e52 --- /dev/null +++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/entity/SpentSkillPoints_entity.php @@ -0,0 +1,10 @@ +setName("spentskillpoints"); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/_doc/devshot_005.jpg b/code/web/app/app_achievements/_doc/devshot_005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63fc3380d04c923f20f8ba5d6b88e36df590c7e1 GIT binary patch literal 33804 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 literal 0 HcmV?d00001 diff --git a/code/web/app/app_achievements/class/AchAchievement_class.php b/code/web/app/app_achievements/class/AchAchievement_class.php index 67d0360d9..4de86b646 100644 --- a/code/web/app/app_achievements/class/AchAchievement_class.php +++ b/code/web/app/app_achievements/class/AchAchievement_class.php @@ -1,5 +1,8 @@ dev = $d; } + ######################### protected $parent_id; protected $category; diff --git a/code/web/app/app_achievements/class/AchMenuNode_class.php b/code/web/app/app_achievements/class/AchMenuNode_class.php index ef232d520..8676ab974 100644 --- a/code/web/app/app_achievements/class/AchMenuNode_class.php +++ b/code/web/app/app_achievements/class/AchMenuNode_class.php @@ -1,5 +1,8 @@ dev = $d; } + ######################### protected $parent_id; protected $name; diff --git a/code/web/app/app_achievements/class/AchMenu_class.php b/code/web/app/app_achievements/class/AchMenu_class.php index 60f21f17b..6d11b10df 100644 --- a/code/web/app/app_achievements/class/AchMenu_class.php +++ b/code/web/app/app_achievements/class/AchMenu_class.php @@ -15,14 +15,14 @@ $this->open = $open; // the summary page is autogenerated and has no database entry. We add it manually here. - /*$tmp = array(); + $tmp = array(); $tmp['ac_id'] = 0; $tmp['ac_parent'] = null; $tmp['acl_name'] = get_translation('ach_summary',$_USER->getLang()); $tmp['ac_image'] = "test.png"; $tmp['ac_order'] = -1; $tmp['open'] = $open; - $this->addChild(new AchMenuNode($tmp,$this));*/ + $this->addChild(new AchMenuNode($tmp,$this)); $res = $DBc->sqlQuery("SELECT * FROM ach_category LEFT JOIN (ach_category_lang) ON (acl_lang='".$_USER->getLang()."' AND acl_category=ac_id) WHERE ac_parent IS NULL ORDER by ac_order ASC, acl_name ASC"); diff --git a/code/web/app/app_achievements/class/AchObjective_class.php b/code/web/app/app_achievements/class/AchObjective_class.php index 2f5a38543..5a314a8fc 100644 --- a/code/web/app/app_achievements/class/AchObjective_class.php +++ b/code/web/app/app_achievements/class/AchObjective_class.php @@ -27,7 +27,7 @@ $this->progress = $this->value; if(!$this->isDone()) { - $res = $DBc->sqlQuery("SELECT count(*) as anz FROM ach_player_atom,ach_atom WHERE apa_atom=atom_id AND atom_objective='".$this->id."' AND apa_player='".$_USER->getID()."'"); + $res = $DBc->sqlQuery("SELECT sum(apa_value) as anz FROM ach_player_atom,ach_atom WHERE apa_atom=atom_id AND atom_objective='".$this->id."' AND apa_player='".$_USER->getID()."'"); $this->progress = $res[0]['anz']; } } diff --git a/code/web/app/app_achievements/class/AchPerk_class.php b/code/web/app/app_achievements/class/AchPerk_class.php index bef5e5d71..25585db11 100644 --- a/code/web/app/app_achievements/class/AchPerk_class.php +++ b/code/web/app/app_achievements/class/AchPerk_class.php @@ -1,5 +1,8 @@ dev = $d; } + ######################### protected $achievement; protected $value; diff --git a/code/web/app/app_achievements/class/AchSummary_class.php b/code/web/app/app_achievements/class/AchSummary_class.php index 85ca43b37..c607774de 100644 --- a/code/web/app/app_achievements/class/AchSummary_class.php +++ b/code/web/app/app_achievements/class/AchSummary_class.php @@ -13,7 +13,7 @@ //read all recent perks of user //make distinct achievement list - $res = $DBc->sqlQuery("SELECT DISTINCT aa_id,ach.*,(SELECT aal_name FROM ach_achievement_lang WHERE aal_lang='".$_USER->getLang()."' AND aal_achievement=ach.aa_id) as aal_name FROM ach_achievement as ach,ach_perk,ach_player_perk WHERE ap_achievement=aa_id AND app_player='".$_USER->getID()."' AND app_perk=ap_id ORDER by app_date DESC LIMIT 0,".($size-1)); + $res = $DBc->sqlQuery("SELECT DISTINCT aa_id,ach.*,(SELECT aal_name FROM ach_achievement_lang WHERE aal_lang='".$_USER->getLang()."' AND aal_achievement=ach.aa_id) as aal_name, (SELECT aal_template FROM ach_achievement_lang WHERE aal_lang='".$_USER->getLang()."' AND aal_achievement=ach.aa_id) as aal_template FROM ach_achievement as ach,ach_perk,ach_player_perk WHERE ap_achievement=aa_id AND app_player='".$_USER->getID()."' AND app_perk=ap_id ORDER by app_date DESC LIMIT 0,".($size-1)); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { diff --git a/code/web/app/app_achievements/conf.php b/code/web/app/app_achievements/conf.php index a9ff621a3..f31fc7bc3 100644 --- a/code/web/app/app_achievements/conf.php +++ b/code/web/app/app_achievements/conf.php @@ -10,4 +10,8 @@ $_CONF['enable_webig'] = true; $_CONF['enable_offgame'] = true; $_CONF['image_url'] = "http://www.3025-game.de/special/app_achievements/"; + + $_CONF['use_fb'] = true; + $_CONF['fb_id'] = "447985781893176"; + $_CONF['fb_secret'] = "f953772f1f7d871db022a6023e7a3f42"; ?> \ No newline at end of file diff --git a/code/web/app/app_achievements/fb.php b/code/web/app/app_achievements/fb.php new file mode 100644 index 000000000..57b33dbbd --- /dev/null +++ b/code/web/app/app_achievements/fb.php @@ -0,0 +1,57 @@ + $_CONF['fb_id'], + 'secret' => $_CONF['fb_secret'], + 'cookie' => true + )); + + // Get the url to redirect for login to facebook + // and request permission to write on the user's wall. + $login_url = $facebook->getLoginUrl( + array('scope' => 'publish_stream') + ); + + + // If not authenticated, redirect to the facebook login dialog. + // The $login_url will take care of redirecting back to us + // after successful login. + if (!$facebook->getUser()) { + + echo ''; + } + else { + echo var_export($facebook->getUser(),true); + // Do the wall post. + try { + + $facebook->api("/me/feed", "post", array( + message => "My character Talvela just earned 'Bejeweled' on Ryzom!", + picture => "http://www.3025-game.de/special/app_achievements/pic/icon/test.png", + link => "http://www.ryzom.com", + name => "Ryzom - MMO", + caption => "Join and play for fee!" + )); + echo "post"; + + } catch (FacebookApiException $e) { + echo $e; + $login_url = $facebook->getLoginUrl( array( + 'scope' => 'publish_stream' + )); + echo 'Please login.'; + #error_log($e->getType()); + #error_log($e->getMessage()); + } + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements/fb/facebook.php b/code/web/app/app_achievements/fb/facebook.php new file mode 100644 index 000000000..c577c2aa4 --- /dev/null +++ b/code/web/app/app_achievements/fb/facebook.php @@ -0,0 +1,93 @@ +constructSessionVariableName($key); + $_SESSION[$session_var_name] = $value; + } + + protected function getPersistentData($key, $default = false) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to getPersistentData.'); + return $default; + } + + $session_var_name = $this->constructSessionVariableName($key); + return isset($_SESSION[$session_var_name]) ? + $_SESSION[$session_var_name] : $default; + } + + protected function clearPersistentData($key) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to clearPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + unset($_SESSION[$session_var_name]); + } + + protected function clearAllPersistentData() { + foreach (self::$kSupportedKeys as $key) { + $this->clearPersistentData($key); + } + } + + protected function constructSessionVariableName($key) { + return implode('_', array('fb', + $this->getAppId(), + $key)); + } +} diff --git a/code/web/app/app_achievements/include/ach_render_ig.php b/code/web/app/app_achievements/include/ach_render_ig.php index dee5e19c9..e9f54c163 100644 --- a/code/web/app/app_achievements/include/ach_render_ig.php +++ b/code/web/app/app_achievements/include/ach_render_ig.php @@ -413,12 +413,12 @@ diff --git a/code/web/app/app_achievements/include/ach_render_web.php b/code/web/app/app_achievements/include/ach_render_web.php index 3058b2890..8c9df92bd 100644 --- a/code/web/app/app_achievements/include/ach_render_web.php +++ b/code/web/app/app_achievements/include/ach_render_web.php @@ -4,7 +4,14 @@ $c = "
"; - if(($prog/$val) > 0.85) { + if(($prog/$val) > 0.5) { $html .= " ".nf($prog)." / ".nf($val)." "; } $html .= " "; - if(($prog/$val) <= 0.85) { + if(($prog/$val) <= 0.5) { $html .= " ".nf($prog)." / ".nf($val)." "; } $html .= "
- +
".ach_render_yubopoints($user['id'])." +
+
".ach_render_yubopoints($user['id'])."
+
".ach_render_facebook()."
+
+
+ +
"; @@ -120,13 +127,29 @@ $res = $DBc->sqlQuery("SELECT sum(ap_value) as anz FROM ach_perk,ach_player_perk WHERE ap_id=app_perk AND app_player='".$_USER->getID()."'"); - $html = "
".$_USER->getName()."  ".max(0,$res[0]['anz'])."
"; + $html = "
".$_USER->getName()."  ".max(0,$res[0]['anz'])."
"; return $html; } function ach_render_facebook() { - + return "
+
+ +
+ +
"; } function ach_render_twitter() { @@ -446,12 +469,12 @@ diff --git a/code/web/app/app_achievements/index.php b/code/web/app/app_achievements/index.php index 316b636ae..79edf6bfb 100644 --- a/code/web/app/app_achievements/index.php +++ b/code/web/app/app_achievements/index.php @@ -1,79 +1,129 @@ -isIG()) { - require_once("include/ach_render_ig.php"); -} -else { - require_once("include/ach_render_web.php"); -} -require_once("include/ach_render_common.php"); - -require_once("class/DLL_class.php"); -#require_once("class/InDev_trait.php"); -require_once("class/Node_abstract.php"); -require_once("class/AVLTree_class.php"); -require_once("class/Parentum_abstract.php"); -require_once("class/AchList_abstract.php"); -require_once("class/Tieable_inter.php"); -require_once("class/NodeIterator_class.php"); - - -require_once("class/AchMenu_class.php"); -require_once("class/AchMenuNode_class.php"); -require_once("class/AchSummary_class.php"); -require_once("class/AchCategory_class.php"); -require_once("class/AchAchievement_class.php"); -require_once("class/AchPerk_class.php"); -require_once("class/AchObjective_class.php"); - - - -// Update user acces on Db -#$DBc = ryDB::getInstance(APP_NAME."_test"); -$DBc = ryDB::getInstance(APP_NAME); -#$DBc = ryDB::getInstance("ahufler"); - - -if(!$_USER->isIG && $_CONF['enable_webig'] == false) { - $c = ach_render_forbidden(false); -} -elseif($_USER->isIG && $_CONF['enable_offgame'] == false) { - $c = ach_render_forbidden(true); -} -else { - $c = ach_render(); -} - - -echo ryzom_app_render("achievements", $c, $_USER->isIG()); - -?> +isIG()) { + require_once("include/ach_render_ig.php"); +} +else { + require_once("include/ach_render_web.php"); +} +require_once("include/ach_render_common.php"); + +require_once("class/DLL_class.php"); +#require_once("class/InDev_trait.php"); +require_once("class/Node_abstract.php"); +require_once("class/AVLTree_class.php"); +require_once("class/Parentum_abstract.php"); +require_once("class/AchList_abstract.php"); +require_once("class/Tieable_inter.php"); +require_once("class/NodeIterator_class.php"); + + +require_once("class/AchMenu_class.php"); +require_once("class/AchMenuNode_class.php"); +require_once("class/AchSummary_class.php"); +require_once("class/AchCategory_class.php"); +require_once("class/AchAchievement_class.php"); +require_once("class/AchPerk_class.php"); +require_once("class/AchObjective_class.php"); + +require_once("fb/facebook.php"); + +// Update user acces on Db +#$DBc = ryDB::getInstance(APP_NAME."_test"); +#$DBc = ryDB::getInstance(APP_NAME); +$DBc = ryDB::getInstance("ahufler"); + +$c = ""; +if(!$_USER->isIG()) { + $facebook = new Facebook(array( + 'appId' => $_CONF['fb_id'], + 'secret' => $_CONF['fb_secret'], + 'cookie' => true + )); + + // Get the url to redirect for login to facebook + // and request permission to write on the user's wall. + $login_url = $facebook->getLoginUrl( + array('scope' => 'publish_stream') + ); + + // If not authenticated, redirect to the facebook login dialog. + // The $login_url will take care of redirecting back to us + // after successful login. + if (! $facebook->getUser()) { + $c .= ';'; + } + else { + echo var_export($facebook->getUser(),true); + // Do the wall post. + try { + + /*$facebook->api("/me/feed", "post", array( + message => "My character Talvela just achieved \"Bejeweled\" on Ryzom!", + picture => "http://www.3025-game.de/special/app_achievements/pic/icon/test.png", + link => "http://www.ryzom.com", + name => "Ryzom", + caption => "Join and play for fee!" + ));*/ + + } catch (FacebookApiException $e) { + echo $e; + $login_url = $facebook->getLoginUrl( array( + 'scope' => 'publish_stream' + )); + echo 'Please login.'; + #error_log($e->getType()); + #error_log($e->getMessage()); + } + + + } + + +} + +if(!$_USER->isIG && $_CONF['enable_webig'] == false) { + $c .= ach_render_forbidden(false); +} +elseif($_USER->isIG && $_CONF['enable_offgame'] == false) { + $c .= ach_render_forbidden(true); +} +else { + $c .= ach_render(); +} + + +echo ryzom_app_render("achievements", $c, $_USER->isIG()); + +?> diff --git a/code/web/app/app_achievements/pic/f-connect.png b/code/web/app/app_achievements/pic/f-connect.png new file mode 100644 index 0000000000000000000000000000000000000000..ee067c17bae5407ca4793b5b5db35ba8b5bd0e40 GIT binary patch literal 4336 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 literal 0 HcmV?d00001 diff --git a/code/web/app/app_achievements_admin/class/AdmAchievement_class.php b/code/web/app/app_achievements_admin/class/AdmAchievement_class.php index bb01aafe1..635aef466 100644 --- a/code/web/app/app_achievements_admin/class/AdmAchievement_class.php +++ b/code/web/app/app_achievements_admin/class/AdmAchievement_class.php @@ -1,6 +1,55 @@ 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; + } function AdmAchievement($data,$parent) { parent::__construct($data,$parent); @@ -34,10 +83,10 @@ function update() { global $DBc; - $DBc->sqlQuery("UPDATE ach_achievement SET aa_category='".$this->getCategory()."',aa_parent=NULL,aa_tie_race=".mkn($this->getTieRace()).",aa_tie_cult=".mkn($this->getTieCult()).",aa_tie_civ=".mkn($this->getTieCiv()).",aa_image='".mysql_real_escape_string($this->getImage())."',aa_dev='".$this->getDev()."' WHERE aa_id='".$this->getID()."'"); + $DBc->sqlQuery("UPDATE ach_achievement SET aa_category='".$this->getCategory()."',aa_parent=NULL,aa_tie_race=".mkn($this->getTieRace()).",aa_tie_cult=".mkn($this->getTieCult()).",aa_tie_civ=".mkn($this->getTieCiv()).",aa_image='".$DBc->sqlEscape($this->getImage())."',aa_dev='".$this->getDev()."' WHERE aa_id='".$this->getID()."'"); #MISSING: update lang entry - $DBc->sqlQuery("INSERT INTO ach_achievement_lang (aal_achievement,aal_lang,aal_name,aal_template) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."',".mkn($this->getTemplate()).") ON DUPLICATE KEY UPDATE aal_name='".mysql_real_escape_string($this->getName())."',aal_template=".mkn($this->getTemplate()).""); + $DBc->sqlQuery("INSERT INTO ach_achievement_lang (aal_achievement,aal_lang,aal_name,aal_template) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."',".mkn($this->getTemplate()).") ON DUPLICATE KEY UPDATE aal_name='".$DBc->sqlEscape($this->getName())."',aal_template=".mkn($this->getTemplate()).""); } function insert() { @@ -45,11 +94,11 @@ $this->dev = 1; - $DBc->sqlQuery("INSERT INTO ach_achievement (aa_category,aa_parent,aa_tie_race,aa_tie_cult,aa_tie_civ,aa_image,aa_dev) VALUES ('".$this->getCategory()."',NULL,".mkn($this->getTieRace()).",".mkn($this->getTieCult()).",".mkn($this->getTieCiv()).",'".mysql_real_escape_string($this->getImage())."','1')"); - $id = mysql_insert_id(); + $DBc->sqlQuery("INSERT INTO ach_achievement (aa_category,aa_parent,aa_tie_race,aa_tie_cult,aa_tie_civ,aa_image,aa_dev) VALUES ('".$this->getCategory()."',NULL,".mkn($this->getTieRace()).",".mkn($this->getTieCult()).",".mkn($this->getTieCiv()).",'".$DBc->sqlEscape($this->getImage())."','1')"); + $id = $DBc->insertID(); $this->setID($id); - $DBc->sqlQuery("INSERT INTO ach_achievement_lang (aal_achievement,aal_lang,aal_name,aal_template) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."',".mkn($this->getTemplate()).")"); + $DBc->sqlQuery("INSERT INTO ach_achievement_lang (aal_achievement,aal_lang,aal_name,aal_template) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."',".mkn($this->getTemplate()).")"); } diff --git a/code/web/app/app_achievements_admin/class/AdmAtom_class.php b/code/web/app/app_achievements_admin/class/AdmAtom_class.php index 9ede36606..19c606d04 100644 --- a/code/web/app/app_achievements_admin/class/AdmAtom_class.php +++ b/code/web/app/app_achievements_admin/class/AdmAtom_class.php @@ -1,5 +1,56 @@ 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; @@ -23,15 +74,27 @@ } function update() { - #$DBc->sqlQuery("UPDATE ach_atom SET atom_mandatory='".."',atom_ruleset='".."',atom_ruleset_parsed='".."' WHERE atom_id='".$this->id."'"); + 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() { - #$DBc->sqlQuery("INSERT INTO ach_atom (atom_objective,atom_mandatory,atom_ruleset,atom_ruleset_parsed) VALUES ('".."','".."','".."','".."')"); - $id = mysql_insert_id(); + 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; @@ -58,73 +121,222 @@ return $this->ruleset; } - private function parse() { - /*VALUE _money AS $money { - CACHE blach AS $test + function getRulesetParsed() { + return $this->ruleset_parsed; + } - if($money >= 10000 && $test == 0) { - GRANT - FINAL - } - else { - CACHE blach SET $money - } - } + private function parse() { + /* +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 ([^ ]+) {# + #VALUE ([^ ]+) AS ([$][^ ]+) {# $match = array(); - preg_match_all("#VALUE ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match); + 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) { - $_IDENT = "'.$match[1][$key].'";'; +function '.$func.'('.$match[2][$key].',$_P,$_CB) { + global $_CACHE; + $_IDENT = "'.$match[1][$key].'";'; //replace $res = str_replace($elem,$tmp,$res); } - #ENTITY ([^ ]+) AS ([^ ]+) {# + #ENTITY ([^ ]+) AS ([$][^ ]+) {# $match = array(); - preg_match_all("#ENTITY ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match); + 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) { - $_IDENT = "'.$match[1][$key].'";'; +function '.$func.'('.$match[2][$key].',$_P,$_CB) { + global $_CACHE; + $_IDENT = "'.$match[1][$key].'";'; //replace $res = str_replace($elem,$tmp,$res); } - #EVENT ([^ ]+) AS ([^ ]+) {# + #EVENT ([^ ]+) AS ([$][^ ]+) {# $match = array(); - preg_match_all("#EVENT ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match); + 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) { - $_IDENT = "'.$match[1][$key].'";'; +function '.$func.'('.$match[2][$key].',$_P,$_CB) { + global $_CACHE; + $_IDENT = "'.$match[1][$key].'";'; //replace $res = str_replace($elem,$tmp,$res); } - #CACHE ([^ ]+) AS ([^ ]+)# + #GRANT ([^;]*);# + $match = array(); + preg_match_all("#GRANT ([^;]*);#",$this->ruleset,$match); + foreach($match[0] as $key=>$elem) { + $tmp = '$_P->grant('.$match[1][$key].');'; - #GRANT# + //replace + $res = str_replace($elem,$tmp,$res); + } - #FINAL# + #GRANT;# + $match = array(); + preg_match_all("#GRANT;#",$this->ruleset,$match); + foreach($match[0] as $key=>$elem) { + $tmp = '$_P->grant();'; - #CACHE ([^ ]+) SET ([^ ]+)#*/ + //replace + $res = str_replace($elem,$tmp,$res); + } + + #DENY;# + $match = array(); + preg_match_all("#DENY;#",$this->ruleset,$match); + foreach($match[0] as $key=>$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 $key=>$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 $key=>$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 $key=>$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 $key=>$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 $key=>$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 $key=>$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 $key=>$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; } } ?> \ No newline at end of file diff --git a/code/web/app/app_achievements_admin/class/AdmCategory_class.php b/code/web/app/app_achievements_admin/class/AdmCategory_class.php index cd0ff71a1..7a09fefab 100644 --- a/code/web/app/app_achievements_admin/class/AdmCategory_class.php +++ b/code/web/app/app_achievements_admin/class/AdmCategory_class.php @@ -1,6 +1,55 @@ 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; + } function AdmCategory($id,$race,$cult = null,$civ = null) { parent::__construct($id,$race,$cult,$civ); diff --git a/code/web/app/app_achievements_admin/class/AdmMenuNode_class.php b/code/web/app/app_achievements_admin/class/AdmMenuNode_class.php index 05064d28c..853700202 100644 --- a/code/web/app/app_achievements_admin/class/AdmMenuNode_class.php +++ b/code/web/app/app_achievements_admin/class/AdmMenuNode_class.php @@ -20,7 +20,9 @@ return true; } else { - foreach($this->nodes as $elem) { + $iter = $this->getIterator(); + while($iter->hasNext()) { + $elem = $iter->getNext(); $res = $elem->hasAchievements(); if($res == true) { return true; @@ -79,7 +81,7 @@ $DBc->sqlQuery("UPDATE ach_category SET ac_parent=".mkn($this->getParentID()).",ac_order='".$this->getOrder()."',ac_image=".mkn($this->getImage()).",ac_dev='".$this->getDev()."' WHERE ac_id='".$this->getID()."'"); #MISSING: update lang entry - $DBc->sqlQuery("INSERT IGNORE INTO ach_category_lang (acl_category,acl_lang,acl_name) VALUES ('".$this->getID()."','".$_USER->getLang()."','".mysql_real_escape_string($this->getName())."') ON DUPLICATE KEY UPDATE acl_name='".mysql_real_escape_string($this->getName())."'"); + $DBc->sqlQuery("INSERT IGNORE INTO ach_category_lang (acl_category,acl_lang,acl_name) VALUES ('".$this->getID()."','".$_USER->getLang()."','".$DBc->sqlEscape($this->getName())."') ON DUPLICATE KEY UPDATE acl_name='".$DBc->sqlEscape($this->getName())."'"); } function insert() { // write $this to the database as a new entry @@ -88,10 +90,10 @@ $this->setOrder($this->parent->getNextOrder()); $DBc->sqlQuery("INSERT INTO ach_category (ac_parent,ac_order,ac_image,ac_dev) VALUES (".mkn($this->getParentID()).",'".$this->getOrder()."',".mkn($this->getImage()).",'1')"); - $id = mysql_insert_id(); + $id = $DBc->insertID(); $this->setID($id); #MISSING: insert lang entry - $DBc->sqlQuery("INSERT INTO ach_category_lang (acl_category,acl_lang,acl_name) VALUES ('".$this->getID()."','".$_USER->getLang()."','".mysql_real_escape_string($this->getName())."')"); + $DBc->sqlQuery("INSERT INTO ach_category_lang (acl_category,acl_lang,acl_name) VALUES ('".$this->getID()."','".$_USER->getLang()."','".$DBc->sqlEscape($this->getName())."')"); } @@ -147,7 +149,10 @@ } $val = array(); - foreach($this->nodes as $elem) { + $iter = $this->getIterator(); + while($iter->hasNext()) { + #foreach($this->nodes as $elem) { + $elem = $iter->getNext(); $val[] = $elem->getOrder(); } diff --git a/code/web/app/app_achievements_admin/class/AdmMenu_class.php b/code/web/app/app_achievements_admin/class/AdmMenu_class.php index f646d0d3f..8fbc961bf 100644 --- a/code/web/app/app_achievements_admin/class/AdmMenu_class.php +++ b/code/web/app/app_achievements_admin/class/AdmMenu_class.php @@ -1,13 +1,62 @@ 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; + } function AdmMenu($open) { parent::__construct($open); #$this->drawTree(); - #$this->removeChild(0); // unset the auto-generated "summary" node + $this->removeChild(0); // unset the auto-generated "summary" node } protected function makeChild($d) { // override child generator to use admin classes @@ -18,7 +67,8 @@ $res = $this->getNode($id); if($res != null) { $res->delete_me(); - $this->removeChild($id); + $tmp = $res->getParent(); + $tmp->removeChild($id); } } diff --git a/code/web/app/app_achievements_admin/class/AdmObjective_class.php b/code/web/app/app_achievements_admin/class/AdmObjective_class.php index 82c301453..bec59b52b 100644 --- a/code/web/app/app_achievements_admin/class/AdmObjective_class.php +++ b/code/web/app/app_achievements_admin/class/AdmObjective_class.php @@ -1,13 +1,62 @@ 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; + } function AdmObjective($data,$parent) { parent::__construct($data,$parent); global $DBc; - $res = $DBc->sqlQuery("SELECT atom_id FROM ach_atom WHERE atom_objective='".$this->getID()."'"); + $res = $DBc->sqlQuery("SELECT * FROM ach_atom WHERE atom_objective='".$this->getID()."'"); $sz = sizeof($res); for($i=0;$i<$sz;$i++) { $this->addChild($this->makeChild($res[$i])); @@ -35,19 +84,19 @@ function update() { global $DBc; - $DBc->sqlQuery("UPDATE ach_objective SET ao_condition='".mysql_real_escape_string($this->getCondition())."',ao_value=".mkn($this->getValue()).",ao_display='".mysql_real_escape_string($this->getDisplay())."',ao_metalink=".mkn($this->getMetaImage())." WHERE ao_id='".$this->getID()."'"); + $DBc->sqlQuery("UPDATE ach_objective SET ao_condition='".$DBc->sqlEscape($this->getCondition())."',ao_value=".mkn($this->getValue()).",ao_display='".$DBc->sqlEscape($this->getDisplay())."',ao_metalink=".mkn($this->getMetaImage())." WHERE ao_id='".$this->getID()."'"); - $DBc->sqlQuery("INSERT INTO ach_objective_lang (aol_objective,aol_lang,aol_name) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."') ON DUPLICATE KEY UPDATE aol_name='".mysql_real_escape_string($this->getName())."'"); + $DBc->sqlQuery("INSERT INTO ach_objective_lang (aol_objective,aol_lang,aol_name) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."') ON DUPLICATE KEY UPDATE aol_name='".$DBc->sqlEscape($this->getName())."'"); } function insert() { global $DBc; - $DBc->sqlQuery("INSERT INTO ach_objective (ao_perk,ao_condition,ao_value,ao_display,ao_metalink) VALUES ('".$this->getPerk()."','".mysql_real_escape_string($this->getCondition())."',".mkn($this->getValue()).",'".mysql_real_escape_string($this->getDisplay())."',".mkn($this->getMetaImage()).")"); - $id = mysql_insert_id(); + $DBc->sqlQuery("INSERT INTO ach_objective (ao_perk,ao_condition,ao_value,ao_display,ao_metalink) VALUES ('".$this->getPerk()."','".$DBc->sqlEscape($this->getCondition())."',".mkn($this->getValue()).",'".$DBc->sqlEscape($this->getDisplay())."',".mkn($this->getMetaImage()).")"); + $id = $DBc->insertID(); $this->setID($id); - $DBc->sqlQuery("INSERT INTO ach_objective_lang (aol_objective,aol_lang,aol_name) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."')"); + $DBc->sqlQuery("INSERT INTO ach_objective_lang (aol_objective,aol_lang,aol_name) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."')"); } function setCondition($c) { diff --git a/code/web/app/app_achievements_admin/class/AdmPerk_class.php b/code/web/app/app_achievements_admin/class/AdmPerk_class.php index 73c446e40..8b0714961 100644 --- a/code/web/app/app_achievements_admin/class/AdmPerk_class.php +++ b/code/web/app/app_achievements_admin/class/AdmPerk_class.php @@ -1,6 +1,55 @@ 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 $condition; protected $condition_value; @@ -35,9 +84,9 @@ function update() { global $DBc; - $DBc->sqlQuery("UPDATE ach_perk SET ap_parent=".mkn($this->getParentID()).",ap_value='".mysql_real_escape_string($this->getValue())."',ap_condition='".mysql_real_escape_string($this->getCondition())."',ap_condition_value=".mkn($this->getConditionValue()).",ap_dev='".$this->getDev()."',ap_porder='".$this->porder."' WHERE ap_id='".$this->getID()."'"); + $DBc->sqlQuery("UPDATE ach_perk SET ap_parent=".mkn($this->getParentID()).",ap_value='".$DBc->sqlEscape($this->getValue())."',ap_condition='".$DBc->sqlEscape($this->getCondition())."',ap_condition_value=".mkn($this->getConditionValue()).",ap_dev='".$this->getDev()."',ap_porder='".$this->porder."' WHERE ap_id='".$this->getID()."'"); - $DBc->sqlQuery("INSERT INTO ach_perk_lang (apl_perk,apl_lang,apl_name,apl_template) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."',".mkn($this->getTemplate()).") ON DUPLICATE KEY UPDATE apl_name='".mysql_real_escape_string($this->getName())."',apl_template=".mkn($this->getTemplate()).""); + $DBc->sqlQuery("INSERT INTO ach_perk_lang (apl_perk,apl_lang,apl_name,apl_template) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."',".mkn($this->getTemplate()).") ON DUPLICATE KEY UPDATE apl_name='".$DBc->sqlEscape($this->getName())."',apl_template=".mkn($this->getTemplate()).""); } function insert() { @@ -45,11 +94,11 @@ $this->dev = 1; - $DBc->sqlQuery("INSERT INTO ach_perk (ap_achievement,ap_parent,ap_value,ap_condition,ap_condition_value,ap_dev,ap_porder) VALUES ('".$this->getAchievement()."',".mkn($this->getParentID()).",'".mysql_real_escape_string($this->getValue())."','".mysql_real_escape_string($this->getCondition())."',".mkn($this->getConditionValue()).",'1','".$this->porder."')"); - $id = mysql_insert_id(); + $DBc->sqlQuery("INSERT INTO ach_perk (ap_achievement,ap_parent,ap_value,ap_condition,ap_condition_value,ap_dev,ap_porder) VALUES ('".$this->getAchievement()."',".mkn($this->getParentID()).",'".$DBc->sqlEscape($this->getValue())."','".$DBc->sqlEscape($this->getCondition())."',".mkn($this->getConditionValue()).",'1','".$this->porder."')"); + $id = $DBc->insertID(); $this->setID($id); - $DBc->sqlQuery("INSERT INTO ach_perk_lang (apl_perk,apl_lang,apl_name,apl_template) VALUES ('".$this->getID()."','en','".mysql_real_escape_string($this->getName())."',".mkn($this->getTemplate()).")"); + $DBc->sqlQuery("INSERT INTO ach_perk_lang (apl_perk,apl_lang,apl_name,apl_template) VALUES ('".$this->getID()."','en','".$DBc->sqlEscape($this->getName())."',".mkn($this->getTemplate()).")"); } function setAchievement($a) { @@ -92,29 +141,40 @@ $this->porder = $p; } - function setParentID($p) { #!! CUTTING KILLS NODES! HAVE TO BE REROUTED! + private function reOrder() { + //check if order is OK! + + if($this->parent_id == null) { + + } + else { + + } + } + + function setParentID($p) { #reordering must happen A) after insert B) when updating if($p == null || $p == "null") { //remove from ach list; insert as first! $this->parent_id = null; - $this->parent->removeChild($this->id); - $iter = $this->parent->getIterator(); - $this->parent->addOpen($this,$iter->getNext()); + #$this->parent->removeChild($this->id); + #$iter = $this->parent->getIterator(); + #$this->parent->addOpen($this,$iter->getNext()); } else { //remove from ach list; insert after parent - echo "--".$p."
"; + #echo "--".$p."
"; $this->parent_id = $p; - $this->parent->removeChild($this->id); - $item = $this->parent->getChildByID($this->parent_id); - $tmp = $item->getChild(); - if($tmp != null) { - $this->parent->addOpen($this,$tmp->getID()); - } - else { - $this->parent->addOpen($this,null); - } + #$this->parent->removeChild($this->id); + #$item = $this->parent->getChildByID($this->parent_id); + #$tmp = $item->getChild(); + #if($tmp != null) { + # $this->parent->addOpen($this,$tmp->getID()); + #} + #else { + # $this->parent->addOpen($this,null); + #} } } } diff --git a/code/web/app/app_achievements_admin/class/CSRAchievement_class.php b/code/web/app/app_achievements_admin/class/CSRAchievement_class.php index 2bcd2ad56..8375e01b2 100644 --- a/code/web/app/app_achievements_admin/class/CSRAchievement_class.php +++ b/code/web/app/app_achievements_admin/class/CSRAchievement_class.php @@ -1,6 +1,68 @@ getID()."
"; + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->grant($player); + #echo "grant()
"; + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + $c = $this->getChildDataByID($tmp[1]); + #echo "...".$tmp[1]; + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->grantNode(implode(";",$tmp),$player); + #echo "grantNode()
"; + } + } + #echo "end
"; + } + + function denyNode($path,$player) { + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->deny($player); + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + if($tmp[0] == $this->getID()) { // it's my id! + + $c = $this->getChildDataByID($tmp[1]); + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->denyNode(implode(";",$tmp),$player); + } + } + } + } + + function getPath($path = "") { + if($path != "") { + $path = ";".$path; + } + + $path = $this->getID().$path; + + if($this->hasParent()) { + $path = $this->parent->getPath($path); + } + + return $path; + } + + private function hasParent() { + return ($this->parent != null); + } function CSRAchievement($data,$parent) { parent::__construct($data,$parent); diff --git a/code/web/app/app_achievements_admin/class/CSRCategory_class.php b/code/web/app/app_achievements_admin/class/CSRCategory_class.php index 6a118c6e3..650469c65 100644 --- a/code/web/app/app_achievements_admin/class/CSRCategory_class.php +++ b/code/web/app/app_achievements_admin/class/CSRCategory_class.php @@ -1,6 +1,68 @@ getID()."
"; + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->grant($player); + #echo "grant()
"; + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + $c = $this->getChildDataByID($tmp[1]); + #echo "...".$tmp[1]; + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->grantNode(implode(";",$tmp),$player); + #echo "grantNode()
"; + } + } + #echo "end
"; + } + + function denyNode($path,$player) { + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->deny($player); + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + if($tmp[0] == $this->getID()) { // it's my id! + + $c = $this->getChildDataByID($tmp[1]); + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->denyNode(implode(";",$tmp),$player); + } + } + } + } + + function getPath($path = "") { + if($path != "") { + $path = ";".$path; + } + + $path = $this->getID().$path; + + if($this->hasParent()) { + $path = $this->parent->getPath($path); + } + + return $path; + } + + private function hasParent() { + return ($this->parent != null); + } function CSRCategory($id,$race,$cult = null,$civ = null) { parent::__construct($id,$race,$cult,$civ); diff --git a/code/web/app/app_achievements_admin/class/CSRObjective_class.php b/code/web/app/app_achievements_admin/class/CSRObjective_class.php index d336a2ade..71531d227 100644 --- a/code/web/app/app_achievements_admin/class/CSRObjective_class.php +++ b/code/web/app/app_achievements_admin/class/CSRObjective_class.php @@ -1,6 +1,68 @@ getID()."
"; + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->grant($player); + #echo "grant()
"; + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + $c = $this->getChildDataByID($tmp[1]); + #echo "...".$tmp[1]; + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->grantNode(implode(";",$tmp),$player); + #echo "grantNode()
"; + } + } + #echo "end
"; + } + + function denyNode($path,$player) { + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->deny($player); + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + if($tmp[0] == $this->getID()) { // it's my id! + + $c = $this->getChildDataByID($tmp[1]); + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->denyNode(implode(";",$tmp),$player); + } + } + } + } + + function getPath($path = "") { + if($path != "") { + $path = ";".$path; + } + + $path = $this->getID().$path; + + if($this->hasParent()) { + $path = $this->parent->getPath($path); + } + + return $path; + } + + private function hasParent() { + return ($this->parent != null); + } #private $nodes; diff --git a/code/web/app/app_achievements_admin/class/CSRPerk_class.php b/code/web/app/app_achievements_admin/class/CSRPerk_class.php index fcd8bd668..97f34ec36 100644 --- a/code/web/app/app_achievements_admin/class/CSRPerk_class.php +++ b/code/web/app/app_achievements_admin/class/CSRPerk_class.php @@ -1,6 +1,68 @@ getID()."
"; + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->grant($player); + #echo "grant()
"; + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + $c = $this->getChildDataByID($tmp[1]); + #echo "...".$tmp[1]; + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->grantNode(implode(";",$tmp),$player); + #echo "grantNode()
"; + } + } + #echo "end
"; + } + + function denyNode($path,$player) { + if(is_numeric($path)) { + //it's me (id == numeric) + if($this->getID() == $path) { + $this->deny($player); + } + } + else { + //get child with the next level id and dispatch + $tmp = explode(";",$path); + + if($tmp[0] == $this->getID()) { // it's my id! + + $c = $this->getChildDataByID($tmp[1]); + if($c != null) { // check if it's really own child + unset($tmp[0]); + $c->denyNode(implode(";",$tmp),$player); + } + } + } + } + + function getPath($path = "") { + if($path != "") { + $path = ";".$path; + } + + $path = $this->getID().$path; + + if($this->hasParent()) { + $path = $this->parent->getPath($path); + } + + return $path; + } + + private function hasParent() { + return ($this->parent != null); + } function CSRPerk($data,$parent) { parent::__construct($data,$parent); diff --git a/code/web/app/app_achievements_admin/include/adm_render_ach.php b/code/web/app/app_achievements_admin/include/adm_render_ach.php index 133d3ed56..1639d5b66 100644 --- a/code/web/app/app_achievements_admin/include/adm_render_ach.php +++ b/code/web/app/app_achievements_admin/include/adm_render_ach.php @@ -53,12 +53,17 @@ } function adm_render_category(&$cat) { - $html = ""; + $html = ""; if($_REQUEST['confirm'] == "delete") { $tmp = $cat->getElementByPath($_REQUEST['id']); if($tmp != null) { - $html .= "
+ $html .= "
Delete Are you sure you want to delete ".$tmp->getName()."

@@ -82,15 +87,15 @@ add new achievement

"; - if(($prog/$val) > 0.85) { + if(($prog/$val) > 0.5) { $html .= " ".nf($prog)." / ".nf($val)." "; } $html .= " "; - if(($prog/$val) <= 0.85) { + if(($prog/$val) <= 0.5) { $html .= " ".nf($prog)." / ".nf($val)." "; } $html .= "
- + - + - + - + - + - + - + - + - + - + @@ -187,41 +192,6 @@ return $html; } - function ach_render_achievement_done(&$ach) { - global $_CONF; - - $html = '
name:name:
naming template:naming template:
cult:cult:
civilization:civilization:
image:image:

perk name:perk name:
naming template:naming template:
perk yubopoints:perk yubopoints:
condition:condition:
condition value:condition value:
- - - - - - - - - - - - - - - -
-
- - - - -
'.$ach->getName().'
- '.$ach->getValueDone().'
-
'; - $html .= ach_render_perk_done($ach); - $html .= '
-
'; - - return $html; - } - function ach_render_achievement_open(&$ach) { global $_CONF,$menu; @@ -237,9 +207,9 @@
-
'; +
[ach:]'.$ach->getName().'
'; - $html .= "
[ach:]'.$ach->getName().'getDev()."&id=".$ach->getPathID()."'>getDev()."&id=".$ach->getPathID()."#ach_".$ach->getID()."'>getID()."' style='margin-bottom:3px;margin-top:3px;display:none;color:#000000;background-color:#FFFFFF;'> -
+ getID()."'>
edit achievement - + - + - + - + - + @@ -310,24 +280,24 @@ "; $html .= "
name:name: getName()."\" />
naming template:naming template: getTemplate()."\" />
cult:cult:
civilization:civilization:
image:image:
- + - + - + - + - + - + @@ -368,7 +338,7 @@ move achievement
name:name:
naming template:naming template:
yubopoints:yubopoints:
parent:parent:
condition:condition:
condition value:condition value:
- +
new category:new category: "; + $html .= "
[perk:]".$perk->getDisplayName()."
"; - $html .= ""; - #} - - $html .= "
[perk:]".$perk->getDisplayName()."getDev()."&id=".$perk->getPathID()."'>getDev()."&id=".$perk->getPathID()."#perk_".$perk->getID()."'>getID()."' style='margin-bottom:3px;margin-top:3px;display:none;color:#000000;background-color:#FFFFFF;'> - + getID()."'>
edit perk - + - + - + - + - + - + @@ -504,16 +474,16 @@ "; $html .= "
name:name:
naming template:naming template: getTemplate()."\" />
yubopoints:yubopoints:
parent:parent:
condition:condition:
condition value:condition value:
- + - + - + - + - + @@ -557,24 +527,6 @@ return $html; } - function ach_render_perk_done(&$ach) { - global $_CONF; - $html = ""; - - $perk_list = $ach->getDone(); - while($perk_list->hasNext()) { - $perk = $perk_list->getNext(); - #foreach($perk_list as $elem) { - #$perk = $ach->getChild($elem); - if($perk->inDev()) { - continue; - } - $html .= "
".$perk->getName()." ( ".date('d.m.Y',$perk->getDone())." ) ".$perk->getValue()."
"; - } - - return $html; - } - function ach_render_obj_list($obj) { $html = "
name:name:
type:type:
trigger condition:trigger condition:
trigger value:trigger value:
metalink:metalink:
"; @@ -624,16 +576,16 @@ #$perk = $elem->getParent(); $html .= "
- + - + - + - + - + @@ -699,7 +651,7 @@ $html .= " "; } - $html .= "[obj:]".$obj->getDisplayName().""; + $html .= "[obj:]".$obj->getDisplayName().""; return $html; } @@ -719,7 +671,7 @@ return "
name:name:
type:type:
trigger condition:trigger condition:
trigger value:trigger value:
metalink:metalink:
- +
getMetaImage()."' width='20px' /> [obj:]".$obj->getDisplayName()." [obj:]".$obj->getDisplayName()."
"; } @@ -750,7 +702,7 @@ else { $col = "#999999"; } - $html .= "
[obj: untitled]
"; + $html .= ""; #} #$html .= ach_render_progressbar($obj->getProgress(),$obj->getValue(),350); diff --git a/code/web/app/app_achievements_admin/include/adm_render_atom.php b/code/web/app/app_achievements_admin/include/adm_render_atom.php index 133d3ed56..f1816f75e 100644 --- a/code/web/app/app_achievements_admin/include/adm_render_atom.php +++ b/code/web/app/app_achievements_admin/include/adm_render_atom.php @@ -26,13 +26,8 @@ $iter = $menu->getIterator(); while($iter->hasNext()) { $curr = $iter->getNext(); - #$sz = $menu->getSize(); - #for($i=0;$i<$sz;$i++) { - # $curr = $menu->getChild($i); - if($curr->inDev()) { - #continue; - } - $html .= " + + $html .= "
"; if($sub == 0) { $html .= ""; @@ -52,805 +47,208 @@ return $html; } - function adm_render_category(&$cat) { - $html = ""; - - if($_REQUEST['confirm'] == "delete") { - $tmp = $cat->getElementByPath($_REQUEST['id']); - if($tmp != null) { - $html .= ""; + function atom_render_category(&$cat) { + $html = " + + + + "; + $iter = $cat->getOpen(); while($iter->hasNext()) { $curr = $iter->getNext(); - #$sz = sizeof($tmp); - #for($i=0;$i<$sz;$i++) { - #echo "B"; - if($curr->inDev()) { - #continue; - } + $html .= ach_render_achievement_open($curr); } return $html; } - function ach_render_achievement_done(&$ach) { - global $_CONF; - - $html = '
getImage()."' />
- - - - - - - - - - - - - - - -
-
- - - - -
'.$ach->getName().'
- '.$ach->getValueDone().'
-
'; - $html .= ach_render_perk_done($ach); - $html .= '
-
'; - - return $html; - } - function ach_render_achievement_open(&$ach) { global $_CONF,$menu; - $html = '
- - - - - - - - - - - - - - - -
-
- - - -
'; - - $html .= " -
[ach:]'.$ach->getName().'getDev()."&id=".$ach->getPathID()."'> "; + $open = explode(";",$_REQUEST['id']); - $html .= " "; + $o = "none"; + if($open[1] == $ach->getID()) { + $o = "block"; + } - $html .= " "; - - $html .= "   getPathID()."'>
"; - - $html .= '
-
'; - - $html .= ""; - - $html .= ""; - - $html .= ""; - - $html .= ach_render_perk_open($ach); - $html .= '
-
'; + $html = "
+
[+] ".$ach->getName()." (ties= race: ".$ach->getTieRace()."; civ: ".$ach->getTieCiv()."; cult: ".$ach->getTieCult().")
+
".ach_render_perk_open($ach)."
+
"; return $html; } function ach_render_perk_open(&$ach) { - #echo var_export($perk_list,true); $html = ""; + $open = explode(";",$_REQUEST['id']); + $perk_list = $ach->getOpen(); while($perk_list->hasNext()) { $perk = $perk_list->getNext(); - #$perk = $ach->getChild($perk_list[0]); - - if($perk->inDev()) { - #return $html; + $o = "none"; + if($open[2] == $perk->getID()) { + $o = "block"; } - - #if($perk->getName() != null) { - $html .= ""; - $html .= " -
[perk:]".$perk->getDisplayName()."getDev()."&id=".$perk->getPathID()."'> "; - - $html .= " "; - - $html .= "   getPathID()."'>
"; - - $html .= ""; - - $html .= ""; - #} - #if($perk->objDrawable()) { - $html .= ach_render_obj_list($perk->getIterator()); - #} - } - - return $html; - } - - function ach_render_perk_done(&$ach) { - global $_CONF; - $html = ""; - - $perk_list = $ach->getDone(); - while($perk_list->hasNext()) { - $perk = $perk_list->getNext(); - #foreach($perk_list as $elem) { - #$perk = $ach->getChild($elem); - if($perk->inDev()) { - continue; - } - $html .= "
".$perk->getName()." ( ".date('d.m.Y',$perk->getDone())." ) ".$perk->getValue()."
"; + $html .= "
+
[+] ".$perk->getDisplayName()." (condition= ".$perk->getCondition().": ".$perk->getConditionValue().")
+
".ach_render_obj_list($perk->getIterator())."
+
"; } return $html; } function ach_render_obj_list($obj) { - $html = "
"; + $html = ""; - #$i = 0; - #$skip = false; + $open = explode(";",$_REQUEST['id']); while($obj->hasNext()) { - #foreach($obj as $elem) { $elem = $obj->getNext(); - #if(($i%2) == 0) { - $html .= ""; + + #$o = "none"; + #if($open[3] == $elem->getID()) { + $o = "block"; #} + $html .= "
+
[+] ".$elem->getDisplayName()." (condition= ".$elem->getCondition().": ".$elem->getValue().")
+
+ +
"; - #} - - switch($elem->getDisplay()) { - case "meta": - $html .= ""; - #} - $html .= ""; - #$i++; - break; - case "simple": - $html .= ""; - break; - case "hidden": - default: - //do nothing - #$skip = true; - #if(($i%2) == 1) { - # $html .= ""; - #} - $html .= ""; - #$i++; - break; - } - - $html .= " -
".ach_render_obj_meta($elem).""; - break; - case "value": - #if(($i%2) == 1) { - # $html .= "
".ach_render_obj_value($elem)."".ach_render_obj_simple($elem)."
".ach_render_obj_hidden($elem).""; - - #$html .= " "; - - $html .= "   getPathID()."'>
"; - - #$perk = $elem->getParent(); - - $html .= ""; - - #if(($i%2) == 1) { - $html .= "
+ + + + + + + + + +
 mandatory
+
+
+ + + ".ach_render_atom_list($elem->getIterator())." + + "; + } + + return $html; + } + + function ach_render_atom_list($atom) { + $html = ""; + + while($atom->hasNext()) { + $elem = $atom->getNext(); - #if(!$skip) { - # $i++; - #} - #$skip = false; + $html .= "
getPathID()."#obj_".$elem->getObjective()."'> + + + + + + + + + + + + + + +
getPathID()."#obj_".$elem->getObjective()."'>[X]
".$elem->getRulesetParsed()."
getMandatory() == 1) { + $html .= " checked='checked'"; + } + $html .= " /> mandatory
+

"; } - #if(($i%2) == 1) { - # $html .= "
"; - - return $html; - } - - function ach_render_obj_simple(&$obj) { - global $_CONF; - $html = ""; - if($obj->isdone()) { - $html .= " "; - } - else { - $html .= " "; - } - - $html .= "[obj:]".$obj->getDisplayName().""; - - return $html; - } - - function ach_render_obj_meta(&$obj) { - global $_CONF; - $html = ""; - if($obj->isdone()) { - $col = "#71BE02"; - $grey = ""; - } - else { - $col = "#999999"; - $grey = "grey/"; - } - - return " - - - - -
getMetaImage()."' width='20px' /> [obj:]".$obj->getDisplayName()."
"; - } - - function ach_render_obj_value(&$obj) { - $html = ""; - #if($obj->getName() != null) { - if($obj->isdone()) { - $col = "#71BE02"; - } - else { - $col = "#999999"; - } - $html .= "
[obj:]".$obj->getDisplayName()."
"; - #} - - $html .= ach_render_progressbar($obj->getProgress(),$obj->getValue(),350); - - return $html; - } - - function ach_render_obj_hidden(&$obj) { - $html = ""; - #if($obj->getName() != null) { - if($obj->isdone()) { - $col = "#71BE02"; - } - else { - $col = "#999999"; - } - $html .= "
[obj: untitled]
"; - #} - - #$html .= ach_render_progressbar($obj->getProgress(),$obj->getValue(),350); - - return $html; - } - - function ach_render_progressbar($prog,$val,$width) { - $val = max(1,$val); - $left = floor($width*(100*($prog/$val))/100); - - $html = " - - - - - -
"; - if(($prog/$val) > 0.85) { - $html .= " ".nf($prog)." / ".nf($val)." "; - } - $html .= ""; - if(($prog/$val) <= 0.85) { - $html .= " ".nf($prog)." / ".nf($val)." "; - } - $html .= "
"; - - return $html; - } - - - function ach_render_tiebar($cult = "c_neutral", $civ = "c_neutral",&$cat) { - global $_USER,$_CONF; - - $html = " - -
- - "; - if($cat->isTiedCult()) { - $html.= " - +
- - + "; + if($sub == 0) { + $html .= ""; + } + $html .= " + +
getImage()."' />".$curr->getName()."
"; + if($curr->hasOpenCat() != 0) { + $html .= "
".adm_render_mnode($curr,($sub+4))."
"; + } + } + + return $html; + } + + function atom_render_category(&$cat) { + $html = ""; + + $iter = $cat->getOpen(); + while($iter->hasNext()) { + $curr = $iter->getNext(); + + $html .= ach_render_achievement_open($curr); + } + + return $html; + } + + function ach_render_achievement_open(&$ach) { + global $_CONF,$menu; + + $open = explode(";",$_REQUEST['id']); + + $o = "none"; + if($open[1] == $ach->getID()) { + $o = "block"; + } + + $html = "
+
[+] ".$ach->getName()." (ties= race: ".$ach->getTieRace()."; civ: ".$ach->getTieCiv()."; cult: ".$ach->getTieCult().")
+
".ach_render_perk_open($ach)."
+
"; + + return $html; + } + + function ach_render_perk_open(&$ach) { + $html = ""; + + $open = explode(";",$_REQUEST['id']); + + $perk_list = $ach->getOpen(); + while($perk_list->hasNext()) { + + $perk = $perk_list->getNext(); + + $o = "none"; + if($open[2] == $perk->getID()) { + $o = "block"; + } + + $html .= "
+
[+] ".$perk->getDisplayName()." (condition= ".$perk->getCondition().": ".$perk->getConditionValue().")
+
".ach_render_obj_list($perk->getIterator())."
+
"; + } + + return $html; + } + + function ach_render_obj_list($obj) { + $html = ""; + + $open = explode(";",$_REQUEST['id']); + + while($obj->hasNext()) { + $elem = $obj->getNext(); + + #$o = "none"; + #if($open[3] == $elem->getID()) { + $o = "block"; + #} + + $html .= "
+
[+] ".$elem->getDisplayName()." (condition= ".$elem->getCondition().": ".$elem->getValue().")
+
+ + + ".ach_render_atom_list($elem->getIterator())." +
+
"; + } + + return $html; + } + + function ach_render_atom_list($atom) { + $html = ""; + + while($atom->hasNext()) { + $elem = $atom->getNext(); + + $html .= "
getPathID()."#obj_".$elem->getObjective()."'> + + + + + + + + + + + + + + +
getPathID()."#obj_".$elem->getObjective()."'>[X]
".$elem->getRulesetParsed()."
getMandatory() == 1) { + $html .= " checked='checked'"; + } + $html .= " /> mandatory
+

"; + } + + return $html; + } +?> \ No newline at end of file diff --git a/code/web/app/app_achievements_admin/include/adm_render_menu.php b/code/web/app/app_achievements_admin/include/adm_render_menu.php index d7fc5669d..ffc4505f7 100644 --- a/code/web/app/app_achievements_admin/include/adm_render_menu.php +++ b/code/web/app/app_achievements_admin/include/adm_render_menu.php @@ -44,7 +44,7 @@ "; if($_REQUEST['ac_id'] > 0 && $_REQUEST['confirm'] == "delete") { - $curr = $menu->getChildDataByID($_REQUEST['ac_id']); + $curr = $menu->getNode($_REQUEST['ac_id']); $html .= "
Are you sure you want to delete this category?"; @@ -95,8 +95,8 @@ if($curr->inDev()) { $html .= ""; } - $html .= "
getID()."'> -
+
create new sub-category @@ -135,7 +135,7 @@ } $html .= "