diff --git a/code/web/app/app_achievements/_AchWebParser/AchWebParser.php b/code/web/app/app_achievements/_AchWebParser/AchWebParser.php
index ced23e986..0d02dcc70 100644
--- a/code/web/app/app_achievements/_AchWebParser/AchWebParser.php
+++ b/code/web/app/app_achievements/_AchWebParser/AchWebParser.php
@@ -8,18 +8,21 @@
require_once("class/mySQL_class.php");
require_once("conf.php");
- require_once("inlcude/functions_inc.php");
+ require_once("include/functions_inc.php");
- $logfile = false;
+ $_REQUEST['file'] = $argv[1];
+
+
+ /*$logfile = false;
if($CONF['logging'] == true) {
require_once("class/Logfile_class.php");
#$logfile = fopen($CONF['logfile'].'.'.date("Ymd",time()).'.txt','a');
- $logfile = new Logfile($CONF['logfile']);
- }
+ $logfile = new Logfile($CONF['logfile']);#!! MUST HAVE ONE LOGFILE PER RUN!!
+ }*/
//set mode: cron || single with given cid
#MISSING: conf to allow external calls; whitelist ips
- $MODE = "CRON";
+ /*$MODE = "CRON";
if($_REQUEST["cid"] > 0 || $_REQUEST["invoke"] == "TRUE") {
if($_REQUEST["cid"] > 0 && $_REQUEST["invoke"] == "TRUE") {
$MODE = "SINGLE";
@@ -30,52 +33,39 @@
logf($e);
die($e);
}
- }
+ }*/
//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
- }
+ #if($MODE == "CRON") {
+ # $RID = $DBc->sendSQL("INSERT INTO ach_monitor_state (ams_start,ams_end) VALUES ('".time()."','0')","INSERT"); // insert run into monitoring table
+ #}
+ require_once("class/DataDispatcher_class.php");
require_once("class/DataSourceHandler_class.php");
- require_once("class/DataSource_abstract.php");
-
+ require_once("class/SourceDriver_abstract.php");
+ require_once("class/Callback_class.php");
+ require_once("class/ValueCache_class.php");
require_once("class/Atom_class.php");
+
+ #MISSING: static ValueCache!
+
+ $_CACHE = new ValueCache();
+
//create datasource handler
- $_DATA = new DataSourceHandler();
+ $_DISPATCHER = new DataDispatcher();
+ $_DATASOURCE = new DataSourceHandler();
foreach($CONF['data_source'] as $elem) { //populate
require_once("source/".$elem."/".$elem."_class.php");
eval('$tmp = new '.$elem.'();');
- $_DATA->registerDataSource($tmp);
- }
-
- //synch chars from ring_open character table
- if($CONF['synch_chars'] == true) {
- $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']);
-
- $DBc->sendSQL("UPDATE ach_monitor_character SET amc_confirmed='0'","NONE");
-
- $res = $DBc_char->sendSQL("SELECT char_id,last_played_date FROM characters","ARRAY");
- $sz = sizeof($res);
- for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("INSERT INTO ach_monitor_character (amc_character,amc_last_import,amc_last_login,amc_confirmed) VALUES ('".$res[$i]['char_id']."','0','".dateTime_to_timestamp($res[$i]['last_played_date'])."','1') ON DUPLICATE KEY UPDATE amc_confirmed='1', amc_last_login='".dateTime_to_timestamp($res[$i]['last_played_date'])."'","NONE");
- }
-
- $DBc->sendSQL("DELETE FROM ach_monitor_character WHERE amc_confirmed='0'","NONE"); //remove deleted characters
- //remove data for deleted chars
- $DBc->sendSQL("DELETE FROM ach_player_atom WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apa_player')","NONE");
- $DBc->sendSQL("DELETE FROM ach_player_objective WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apo_player')","NONE");
- $DBc->sendSQL("DELETE FROM ach_player_perk WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='app_player')","NONE");
- $DBc->sendSQL("DELETE FROM ach_player_valuecache WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apv_player')","NONE");
+ $_DATASOURCE->addSource($tmp);
}
// fetch candidates
- if($MODE == "SINGLE") {
+ /*if($MODE == "SINGLE") {
$chars = array();
$chars[] = array('amc_character',$CID);
}
@@ -87,118 +77,74 @@
$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");
- }
+ }*/
+ $tmp = explode("/",$_REQUEST['file']);
+ $tmp2 = explode("_",$tmp[(sizeof($tmp)-1)]);
- //fork if enabled in conf
- if($CONF['fork'] == true && $MODE == "CRON") {
- require_once("class/ParallelCURL_class.php");
+
+ $chars = array(($tmp2[1]*16+$tmp2[2]));
+
+ foreach($chars as $cid) {
+ #STEP 1: load and register atoms
- $max_requests = 0;
- $curl_options = array(
- CURLOPT_SSL_VERIFYPEER => FALSE,
- CURLOPT_SSL_VERIFYHOST => FALSE,
- CURLOPT_USERAGENT, 'Ryzom - Achievement Tracker',
- );
-
- $_CURL = new ParallelCurl($max_requests, $curl_options);
-
- foreach($chars as $elem) {
- $_CURL->startRequest("http://".$CONF['self_host']."/".$CONF['self_path']."?invoke=TRUE&cid=".$elem['amc_character'], 'received_char',null);
- }
- }
- else {
$atom_list = array();
- foreach($chars as $elem) {
- $_DATA->freeData($elem['amc_character']);
-
- #STEP 1: evaluate atoms
-
- //get unfinished perks which have no parent or complete parent
- $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE (ap_parent IS NULL OR EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$elem['amc_character']."' AND app_perk=ap_parent)) AND (NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$elem['amc_character']."' AND app_perk=ap_id))","ARRAY");
- foreach($res as $perk) {
- //get unfinished atoms belonging to unfinished objectives
- $res = $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='".$elem['amc_character']."' AND apo_objective=ao_id)","ARRAY");
- foreach($res2 as $atom) {
- if(!isset($atom_list[$atom['atom_id']])) { // only load if not already cached
- $atom_list[$atom['atom_id']] = new Atom($atom);
- }
-
- $atom_list[$atom['atom_id']]->evalRuleset($elem['amc_character']);
- }
- }
-
- $_DATA->freeData($elem['amc_character']);
-
- $DBc->sendSQL("UPDATE ach_monitor_character SET amc_last_import='".time()."', amc_working='0' WHERE amc_character='".$elem['amc_character']."' AND amc_working='".$RID."'","NONE");
-
- #STEP 2: detect obj/perk progression
- //obj
- $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='all' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
- }
-
- $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='value' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
- }
-
- $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='any' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
- }
-
- //perk
- $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='all' 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_state!='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
- $sz = sizeof($res);
- for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
- }
-
- $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='value' 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_state='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
- $sz = sizeof($res);
- for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
+ $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");
+ foreach($res2 as $atom) {
+ $a = new Atom($atom,$cid);
+ $atom_list[] = $a;
+ $a->register();
}
+ }
+
+ #STEP 2: drive data
+ $_CACHE->setChar($cid);
+ $_DATASOURCE->drive($cid);
- $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='any' 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_state='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
- $sz = sizeof($res);
- for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
- }
+ #STEP 3: detect obj/perk progression
+ //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");
+ $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");
}
- }
- if($CONF['sleep_time'] != false) {
- sleep($CONF['sleep_time']);
- }
+ $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");
+ $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");
+ }
- //self call if cron mode is on
- if($MODE == "CRON" && $CONF['enable_selfcall'] == true) {
- $DBc->sendSQL("UPDATE ach_monitor_state SET ams_end='".time()."' WHERE ams_id='".$RID."'","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");
+ $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");
+ }
- $fp = fsockopen($CONF['self_host'], 80, $errno, $errstr, 30);
- if(!$fp) {
- logf("ERROR: self call; socket: ".$errstr." (."$errno.")");
+ //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");
+ $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");
}
- else {
- $out = "GET ".$CONF['self_path']." HTTP/1.1\r\n";
- $out .= "Host: ".$CONF['self_host']."\r\n";
- $out .= "Connection: Close\r\n\r\n";
- fwrite($fp, $out);
- fclose($fp);
+ $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");
+ $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");
}
- }
- if($logfile) {
- $logfile->write();
+ $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");
+ $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");
+ }
}
+
- exit(0);
+
?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/_AchWebParser.php b/code/web/app/app_achievements/_AchWebParser/_AchWebParser.php
new file mode 100644
index 000000000..425b62540
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/_AchWebParser.php
@@ -0,0 +1,207 @@
+ 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);
+ }
+ }
+
+ //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
+ }
+
+ require_once("class/DataSourceHandler_class.php");
+ require_once("class/DataSource_abstract.php");
+
+ require_once("class/Atom_class.php");
+
+ //create datasource handler
+ $_DATA = new DataSourceHandler();
+ foreach($CONF['data_source'] as $elem) { //populate
+ require_once("source/".$elem."/".$elem."_class.php");
+ eval('$tmp = new '.$elem.'();');
+ $_DATA->registerDataSource($tmp);
+ }
+
+ //synch chars from ring_open character table
+ if($CONF['synch_chars'] == true) {
+ $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']);
+
+ $DBc->sendSQL("UPDATE ach_monitor_character SET amc_confirmed='0'","NONE");
+
+ $res = $DBc_char->sendSQL("SELECT char_id,last_played_date FROM characters","ARRAY");
+ $sz = sizeof($res);
+ for($i=0;$i<$sz;$i++) {
+ $DBc->sendSQL("INSERT INTO ach_monitor_character (amc_character,amc_last_import,amc_last_login,amc_confirmed) VALUES ('".$res[$i]['char_id']."','0','".dateTime_to_timestamp($res[$i]['last_played_date'])."','1') ON DUPLICATE KEY UPDATE amc_confirmed='1', amc_last_login='".dateTime_to_timestamp($res[$i]['last_played_date'])."'","NONE");
+ }
+
+ $DBc->sendSQL("DELETE FROM ach_monitor_character WHERE amc_confirmed='0'","NONE"); //remove deleted characters
+ //remove data for deleted chars
+ $DBc->sendSQL("DELETE FROM ach_player_atom WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apa_player')","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_objective WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apo_player')","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_perk WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='app_player')","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_valuecache WHERE NOT EXISTS (SELECT * FROM ach_monitor_character WHERE amc_character='apv_player')","NONE");
+ }
+
+ // 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");
+ }
+
+
+ //fork if enabled in conf
+ if($CONF['fork'] == true && $MODE == "CRON") {
+ require_once("class/ParallelCURL_class.php");
+
+ $max_requests = 0;
+ $curl_options = array(
+ CURLOPT_SSL_VERIFYPEER => FALSE,
+ CURLOPT_SSL_VERIFYHOST => FALSE,
+ CURLOPT_USERAGENT, 'Ryzom - Achievement Tracker',
+ );
+
+ $_CURL = new ParallelCurl($max_requests, $curl_options);
+
+ foreach($chars as $elem) {
+ $_CURL->startRequest("http://".$CONF['self_host']."/".$CONF['self_path']."?invoke=TRUE&cid=".$elem['amc_character'], 'received_char',null);
+ }
+ }
+ else {
+ $atom_list = array();
+
+ foreach($chars as $elem) {
+ $_DATA->freeData($elem['amc_character']);
+
+ #STEP 1: evaluate atoms
+
+ //get unfinished perks which have no parent or complete parent
+ #$res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE (ap_parent IS NULL OR EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$elem['amc_character']."' AND app_perk=ap_parent)) AND (NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$elem['amc_character']."' AND app_perk=ap_id))","ARRAY");
+
+ //get all unfinished perks since perks my not directly inherit objectives...
+ $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$elem['amc_character']."' AND app_perk=ap_id)","ARRAY");
+ foreach($res as $perk) {
+ //get unfinished atoms belonging to unfinished objectives
+ $res = $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='".$elem['amc_character']."' AND apo_objective=ao_id)","ARRAY");
+ foreach($res2 as $atom) {
+ if(!isset($atom_list[$atom['atom_id']])) { // only load if not already cached
+ $atom_list[$atom['atom_id']] = new Atom($atom);
+ }
+
+ $atom_list[$atom['atom_id']]->evalRuleset($elem['amc_character']);
+ }
+ }
+
+ $_DATA->freeData($elem['amc_character']);
+
+ $DBc->sendSQL("UPDATE ach_monitor_character SET amc_last_import='".time()."', amc_working='0' WHERE amc_character='".$elem['amc_character']."' AND amc_working='".$RID."'","NONE");
+
+ #STEP 2: detect obj/perk progression
+ //obj
+ $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='all' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+
+ $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='value' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+
+ $res = $DBc->sendSQL("SELECT ao_id FROM ach_objective WHERE ao_condition='any' 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='".$elem['amc_character']."'))","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']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+
+ //perk
+ $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='all' 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_state!='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
+ $sz = sizeof($res);
+ for($i=0;$i<$sz;$i++) {
+ $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+
+ $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='value' 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_state='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
+ $sz = sizeof($res);
+ for($i=0;$i<$sz;$i++) {
+ $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+
+ $res = $DBc->sendSQL("SELECT ap_id FROM ach_perk WHERE ap_condition='any' 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_state='GRANT' AND apo_player='".$elem['amc_character']."'))","ARRAY");
+ $sz = sizeof($res);
+ for($i=0;$i<$sz;$i++) {
+ $DBc->sendSQL("INSERT INTO ach_player_perk (app_objective,app_player,app_date) VALUES ('".$res[$i]['ap_id']."','".$elem['amc_character']."','".time()."')","NONE");
+ }
+ }
+ }
+
+ if($CONF['sleep_time'] != false) {
+ sleep($CONF['sleep_time']);
+ }
+
+ //self call if cron mode is on
+ if($MODE == "CRON" && $CONF['enable_selfcall'] == true) {
+ $DBc->sendSQL("UPDATE ach_monitor_state SET ams_end='".time()."' WHERE ams_id='".$RID."'","NONE");
+
+ $fp = fsockopen($CONF['self_host'], 80, $errno, $errstr, 30);
+ if(!$fp) {
+ logf("ERROR: self call; socket: ".$errstr." (."$errno.")");
+ }
+ else {
+ $out = "GET ".$CONF['self_path']." HTTP/1.1\r\n";
+ $out .= "Host: ".$CONF['self_host']."\r\n";
+ $out .= "Connection: Close\r\n\r\n";
+
+ fwrite($fp, $out);
+ fclose($fp);
+ }
+ }
+
+ if($logfile) {
+ $logfile->write();
+ }
+
+ 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 0d04b8960..700475e45 100644
--- a/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php
+++ b/code/web/app/app_achievements/_AchWebParser/class/Atom_class.php
@@ -3,66 +3,86 @@
private $ruleset;
private $id;
private $objective;
+ private $user;
- function Atom(&$data) {
+ function Atom(&$data,$user) {
$this->ruleset = $data['atom_ruleset_parsed'];
$this->id = $data['atom_id'];
$this->objective = $data['atom_objective'];
+
+ $this->user = $user;
}
- function evalRuleset($user) {
+ function register() {
global $DBc,$_DATA;
+ echo "register
";
+
try {
return eval($this->ruleset);
}
catch(Exception $e) {
- return $e->getMessage()
+ echo $e->getMessage();
}
}
- private function grant($user,$condition) {
+ function registerValue($name,$func) {
+ global $_DISPATCHER;
+
+ $tmp = new Callback($this,$func);
+ $_DISPATCHER->registerValue($name,$tmp);
+ }
+
+ function unregisterValue($name,$callback) {
+ global $_DISPATCHER;
+
+ $_DISPATCHER->unregisterValue($name,$callback);
+ }
+
+ function grant() {
global $DBc;
- $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state) VALUES ('".$this->id."','".$user."','".date()."','".$DBc->mre($condition)."','GRANT')","NONE");
+ 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");
}
- private function deny($user,$condition) {
+ function deny() {
global $DBc;
- $DBc->sendSQL("INSERT INTO ach_player_atom (apa_atom,apa_player,apa_date,apa_expire,apa_state) VALUES ('".$this->id."','".$user."','".date()."','".$DBc->mre($condition)."','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')","NONE");
}
- private function reset_($user) {
+ function reset_() {
global $DBc;
- $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."' AND apa_player='".$user."'","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."' AND apa_player='".$this->user."'","NONE");
}
- private function reset_all($user) {
+ function reset_all() {
global $DBc;
$res = $DBc->sendSQL("SELECT atom_id FROM ach_atom WHERE atom_objective='".$this->objective."'","ARRAY");
$sz = sizeof($res);
for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$res[$i]['atom_id']."' AND apa_player='".$user."'","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$res[$i]['atom_id']."' AND apa_player='".$this->user."'","NONE");
}
}
- private function unlock($user) {
+ function unlock() {
global $DBc;
- $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."' AND apa_player='".$user."' AND apa_state='DENY'","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."' AND apa_player='".$this->user."' AND apa_state='DENY'","NONE");
}
- private function unlock_all($user) {
+ function unlock_all() {
global $DBc;
$res = $DBc->sendSQL("SELECT atom_id FROM ach_atom WHERE atom_objective='".$this->objective."'","ARRAY");
$sz = sizeof($res);
for($i=0;$i<$sz;$i++) {
- $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$res[$i]['atom_id']."' AND apa_player='".$user."' AND apa_state='DENY'","NONE");
+ $DBc->sendSQL("DELETE FROM ach_player_atom WHERE apa_atom='".$res[$i]['atom_id']."' AND apa_player='".$this->user."' AND apa_state='DENY'","NONE");
}
}
diff --git a/code/web/app/app_achievements/_AchWebParser/class/Callback_class.php b/code/web/app/app_achievements/_AchWebParser/class/Callback_class.php
new file mode 100644
index 000000000..5d7351f74
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/class/Callback_class.php
@@ -0,0 +1,15 @@
+who = $who;
+ $this->func = $func;
+ }
+
+ function call($what) {
+ eval(''.$this->func.'($what,$this->who,$this);');
+ }
+ }
+?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php b/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php
new file mode 100644
index 000000000..b20239821
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/class/DataDispatcher_class.php
@@ -0,0 +1,80 @@
+value = array();
+ $this->entity = array();
+ $this->event = array();
+ }
+
+ function registerValue($name,$callback) {
+ if(!is_array($this->value[$name])) {
+ $this->value[$name] = array();
+ }
+ $this->value[$name][] = $callback;
+ }
+
+ function registerEntity($name,$callback) {
+ if(!is_array($this->entity[$name])) {
+ $this->entity[$name] = array();
+ }
+ $this->entity[$name][] = $callback;
+ }
+
+ function registerEvent($name,$callback) {
+ if(!is_array($this->event[$name])) {
+ $this->event[$name] = array();
+ }
+ $this->event[$name][] = $callback;
+ }
+
+ function unregisterValue($name,$callback) {
+ $res = array_search($callback,$this->value[$name],true);
+ if($res !== false) {
+ unset($this->value[$name][$res]);
+ }
+ }
+
+ function unregisterEntity($name,$callback) {
+ $res = array_search($callback,$this->entity[$name],true);
+ if($res !== false) {
+ unset($this->entity[$name][$res]);
+ }
+ }
+
+ function unregisterEvent($name,$callback) {
+ $res = array_search($callback,$this->event[$name],true);
+ if($res !== false) {
+ unset($this->event[$name][$res]);
+ }
+ }
+
+ function dispatchValue($key,$val) {
+ echo "dispatching: $key=>$val
";
+ if(is_array($this->value[$key])) {
+ foreach($this->value[$key] as $callback) {
+ $callback->call($val);
+ }
+ }
+ }
+
+ function dispatchEntity($key,$val) {
+ if(is_array($this->entity[$key])) {
+ foreach($this->entity[$key] as $callback) {
+ $callback->call($val);
+ }
+ }
+ }
+
+ function dispatchEvent($key,$val) {
+ if(is_array($this->event[$key])) {
+ foreach($this->event[$key] as $callback) {
+ $callback->call($val);
+ }
+ }
+ }
+ }
+?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/class/DataSourceHandler_class.php b/code/web/app/app_achievements/_AchWebParser/class/DataSourceHandler_class.php
index 3eab46a95..a36347969 100644
--- a/code/web/app/app_achievements/_AchWebParser/class/DataSourceHandler_class.php
+++ b/code/web/app/app_achievements/_AchWebParser/class/DataSourceHandler_class.php
@@ -1,71 +1,20 @@
source = array();
- $this->alloc = array();
}
- function registerDataSource($src) {
- $i = sizeof($this->source);
- $this->source[$i] = $src;
- foreach($src->getTypes() as $elem) {
- //add to list
- $this->alloc[$elem] = $i;
- }
+ function addSource($src) {
+ $this->source[] = $src;
}
- function freeData($ident) {
- foreach($source as $elem) {
- $elem->freeData($ident);
- }
- }
-
- function getData($ident,$query) { // SELECT ? FROM c_items WHERE q>='300'
- $matches = array();
- preg_match("#SELECT (\?|\*) FROM ([^ ]+) WHERE ([.]*)#", $query, $matches);
-
- $mode = $matches[1];
- $type = $matches[2];
- $cond = $matches[3];
-
- $tmp = $this->getDataSource($type);
- if($tmp == false) { // no datasource available for this ident
- return false;
+ function drive($cid) {
+ foreach($this->source as $elem) {
+ $elem->drive($cid);
}
-
- return $tmp->getData($ident,$type,$mode,$cond);
}
- function writeData($ident,$query) { // INSERT INTO c_cache () VALUES ()
- $matches = array();
- preg_match("#INSERT INTO ([^ ]+) \(([^\)]*)\) VALUES \(([^\)]*)\)#", $query, $matches);
-
- $type = $matches[1];
- $keys = $matches[2];
- $data = $matches[3];
-
- $tmp = $this->getDataSource($type);
- if($tmp == false) { // no datasource available for this ident
- return false;
- }
-
- if(!$tmp->isWriteable()) { // can't write here
- return false;
- }
-
- return $tmp->writeData($ident,$type,$keys,$data);
- }
-
-
- private function getDataSource(&$ident) {
- if(!$this->alloc[$ident]) {
- return false; //unknown type
- }
-
- return $this->source[$this->alloc[$ident]];
- }
}
?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/class/SourceDriver_abstract.php b/code/web/app/app_achievements/_AchWebParser/class/SourceDriver_abstract.php
new file mode 100644
index 000000000..dca4ad542
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/class/SourceDriver_abstract.php
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/class/ValueCache_class.php b/code/web/app/app_achievements/_AchWebParser/class/ValueCache_class.php
new file mode 100644
index 000000000..424877521
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/class/ValueCache_class.php
@@ -0,0 +1,27 @@
+char = false;
+ }
+
+ function setChar($c) {
+ $this->char = $c;
+ }
+
+ function writeData($key,$val) {
+ global $DBc;
+
+ $DBc->sendSQL("INSERT INTO ach_player_valuecache (apv_name,apv_player,apv_value,apv_date) VALUES ('".$this->user."','".$DBc->mre($key)."','".$DBc->mre($val)."','".time()."') ON DUPLICATE KEY UPDATE apv_value='".$DBc->mre($val)."', apv_date='".time()."'","NONE");
+ }
+
+ function getData($key) {
+ global $DBc;
+
+ $res = $DBc->sendSQL("SELECT apv_value as value, apv_date as date FROM ach_player_valuecache WHERE apv_name='".$DBc->mre($key)."' AND apv_player='".$this->char."'","ARRAY");
+
+ return $res[0];
+ }
+ }
+?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/conf.php b/code/web/app/app_achievements/_AchWebParser/conf.php
index 23401b223..5cf0e27ff 100644
--- a/code/web/app/app_achievements/_AchWebParser/conf.php
+++ b/code/web/app/app_achievements/_AchWebParser/conf.php
@@ -4,19 +4,19 @@
$CONF['logging'] = true;
$CONF['logfile'] = "log/AchWebParser.log";
- $CONF['mysql_error'] = "";
+ $CONF['mysql_error'] = "PRINT";
$CONF['mysql_server'] = "localhost";
$CONF['mysql_user'] = "root";
$CONF['mysql_pass'] = "";
$CONF['mysql_database'] = "app_achievements";
- $CONF['data_source'] = array();
+ $CONF['data_source'] = array("PDRtoXMLdriver");
- $CONF['synch_chars'] = true
+ /*$CONF['synch_chars'] = true;
$CONF['char_mysql_server'] = "localhost";
$CONF['char_mysql_user'] = "root";
$CONF['char_mysql_pass'] = "";
- $CONF['char_mysql_database'] = "ring_open";
+ $CONF['char_mysql_database'] = "ring_open";*/
$CONF['fork'] = true;
@@ -25,7 +25,7 @@
$CONF['sleep_time'] = 1500;
- $CONF['enable_selfcall'] = true
+ $CONF['enable_selfcall'] = true;
$CONF['timeout'] = 60*60;
?>
\ 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
new file mode 100644
index 000000000..60241dca2
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/PDRtoXMLdriver_class.php
@@ -0,0 +1,99 @@
+conf = $_CONF;
+
+
+ $this->lock = 0;
+
+ $this->ignore = array();
+ $this->ignore[] = "XML";
+ $this->ignore[] = "ENTITYBASE";
+ $this->ignore[] = "NORMALPOSITIONS";
+ $this->ignore[] = "_VEC";
+ $this->ignore[] = "SESSIONID";
+ $this->ignore[] = "POSSTATE";
+ $this->ignore[] = "_PLAYERROOM";
+ $this->ignore[] = "_INVENTORYID";
+ $this->ignore[] = "_PHYSCHARACS";
+ $this->ignore[] = "_PHYSSCORES";
+ $this->ignore[] = "_SKILLS";
+ $this->ignore[] = "_FAMES";
+
+ $this->ignore_block = array();
+ $this->ignore_block[] = "_MEMORIZEDPHRASES";
+ $this->ignore_block[] = "_FORBIDPOWERDATES";
+ $this->ignore_block[] = "_INEFFECTIVEAURAS";
+ $this->ignore_block[] = "_CONSUMABLEOVERDOSEENDDATES";
+ $this->ignore_block[] = "_MODIFIERSINDB";
+ $this->ignore_block[] = "_MISSIONS";
+ $this->ignore_block[] = "_ITEMSINSHOPSTORE";
+ $this->ignore_block[] = "RINGREWARDPOINTS";
+ $this->ignore_block[] = "_PACT";
+ $this->ignore_block[] = "_KNOWNPHRASES";
+ $this->ignore_block[] = "STARTINGCHARACTERISTICVALUES";
+ $this->ignore_block[] = "_ENCYCLOCHAR";
+ $this->ignore_block[] = "_GAMEEVENT";
+ $this->ignore_block[] = "_ENTITYPOSITION";
+ }
+
+ function drive($cid) {
+ global $CONF;
+
+ echo "kk";
+
+ #$uid = floor($cid/16);
+ #$slot = ($cid%16);
+
+ #$file = $this->conf['xml_dir']."account_".$uid."_".$slot."_pdr.xml";
+ $file = $_REQUEST['file'];
+
+ $xml_parser = xml_parser_create();
+ xml_set_object($xml_parser,$this);
+ xml_set_element_handler($xml_parser, "startElement", "endElement");
+
+ if(!xml_parse($xml_parser, file_get_contents($file))) {
+ #error
+ echo "error";
+ }
+ xml_parser_free($xml_parser);
+ }
+
+ function startElement($parser, $name, $attrs) {
+ global $_DISPATCHER;
+
+ if($this->lock == 1) {
+ return null;
+ }
+
+ if(in_array($name,$this->ignore)) {
+ return null;
+ }
+
+ if(in_array($name,$this->ignore_block)) {
+ $this->lock = 1;
+ return null;
+ }
+
+ if($attrs["VALUE"] != "") {
+ echo "dispatching";
+ $_DISPATCHER->dispatchValue(strtolower($name),$attrs["VALUE"]);
+ }
+ }
+
+ function endElement($parser, $name) {
+ if(in_array($name,$this->ignore_block)) {
+ $this->lock = 0;
+ }
+ }
+
+
+ }
+?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/conf.php b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/conf.php
new file mode 100644
index 000000000..5bf95e0d4
--- /dev/null
+++ b/code/web/app/app_achievements/_AchWebParser/source/PDRtoXMLdriver/conf.php
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/code/web/app/app_achievements/class/AchAchievement_class.php b/code/web/app/app_achievements/class/AchAchievement_class.php
index 0902f0c1a..67d0360d9 100644
--- a/code/web/app/app_achievements/class/AchAchievement_class.php
+++ b/code/web/app/app_achievements/class/AchAchievement_class.php
@@ -1,6 +1,29 @@
dev == 1);
+ }
+
+ function getDev() {
+ return $this->dev;
+ }
+
+ function setInDev($tf) {
+ if($tf == true) {
+ $this->setDev(1);
+ }
+ else {
+ $this->setDev(0);
+ }
+
+ $this->update();
+ }
+
+ function setDev($d) {
+ $this->dev = $d;
+ }
protected $parent_id;
protected $category;
diff --git a/code/web/app/app_achievements/class/AchCategory_class.php b/code/web/app/app_achievements/class/AchCategory_class.php
index dd05b55d4..218b9078c 100644
--- a/code/web/app/app_achievements/class/AchCategory_class.php
+++ b/code/web/app/app_achievements/class/AchCategory_class.php
@@ -15,9 +15,9 @@
parent::__construct();
- $civ = mysql_real_escape_string($civ);
- $cult = mysql_real_escape_string($cult);
- $race = mysql_real_escape_string($race);
+ $civ = $DBc->sqlEscape($civ);
+ $cult = $DBc->sqlEscape($cult);
+ $race = $DBc->sqlEscape($race);
if($race == null) {
$race = $_USER->getRace();
@@ -34,7 +34,7 @@
$this->cult = $cult;
$this->civ = $civ;
- $this->id = mysql_real_escape_string($id);
+ $this->id = $DBc->sqlEscape($id);
$res = $DBc->sqlQuery("SELECT * FROM ach_achievement LEFT JOIN (ach_achievement_lang) ON (aal_lang='".$_USER->getLang()."' AND aal_achievement=aa_id) WHERE aa_category='".$this->id."' AND (aa_parent IS NULL OR NOT EXISTS (SELECT * FROM ach_perk WHERE ap_achievement=aa_id AND NOT EXISTS (SELECT * FROM ach_player_perk WHERE app_player='".$_USER->getID()."' AND app_perk=ap_id))) AND (aa_tie_race IS NULL OR aa_tie_race LIKE '".$race."') AND (aa_tie_cult IS NULL OR aa_tie_cult LIKE '".$cult."') AND (aa_tie_civ IS NULL OR aa_tie_civ LIKE '".$civ."') ORDER by aal_name ASC");
diff --git a/code/web/app/app_achievements/class/AchList_abstract.php b/code/web/app/app_achievements/class/AchList_abstract.php
index eae3c3329..7d9846637 100644
--- a/code/web/app/app_achievements/class/AchList_abstract.php
+++ b/code/web/app/app_achievements/class/AchList_abstract.php
@@ -34,14 +34,14 @@
return ($this->child_done->getSize() != 0);
}
- final function addOpen($data) {
- $this->child_open->addNode($data);
- $this->addChild($data); #Parentum::addChild()
+ final function addOpen($data,$b = null) {
+ $this->child_open->addNode($data,$b);
+ $this->addChild($data,$b); #Parentum::addChild()
}
- final function addDone($data) {
- $this->child_done->addNode($data);
- $this->addChild($data); #Parentum::addChild()
+ final function addDone($data,$b = null) {
+ $this->child_done->addNode($data,$b);
+ $this->addChild($data,$b); #Parentum::addChild()
}
final function setChildDone($id) {
diff --git a/code/web/app/app_achievements/class/AchMenuNode_class.php b/code/web/app/app_achievements/class/AchMenuNode_class.php
index 2a47afbef..ef232d520 100644
--- a/code/web/app/app_achievements/class/AchMenuNode_class.php
+++ b/code/web/app/app_achievements/class/AchMenuNode_class.php
@@ -1,6 +1,29 @@
dev == 1);
+ }
+
+ function getDev() {
+ return $this->dev;
+ }
+
+ function setInDev($tf) {
+ if($tf == true) {
+ $this->setDev(1);
+ }
+ else {
+ $this->setDev(0);
+ }
+
+ $this->update();
+ }
+
+ function setDev($d) {
+ $this->dev = $d;
+ }
protected $parent_id;
protected $name;
diff --git a/code/web/app/app_achievements/class/AchPerk_class.php b/code/web/app/app_achievements/class/AchPerk_class.php
index 91d45e5b2..bef5e5d71 100644
--- a/code/web/app/app_achievements/class/AchPerk_class.php
+++ b/code/web/app/app_achievements/class/AchPerk_class.php
@@ -1,6 +1,29 @@
dev == 1);
+ }
+
+ function getDev() {
+ return $this->dev;
+ }
+
+ function setInDev($tf) {
+ if($tf == true) {
+ $this->setDev(1);
+ }
+ else {
+ $this->setDev(0);
+ }
+
+ $this->update();
+ }
+
+ function setDev($d) {
+ $this->dev = $d;
+ }
protected $achievement;
protected $value;
@@ -94,12 +117,5 @@
function getParentID() {
return $this->parent_id;
}
-
- function setParentID($p) {
- if($this->parent_id != null) {
-
- }
- $this->parent_id = $p;
- }
}
?>
\ No newline at end of file
diff --git a/code/web/app/app_achievements/class/DLL_class.php b/code/web/app/app_achievements/class/DLL_class.php
index c52ccd4d9..38e4be733 100644
--- a/code/web/app/app_achievements/class/DLL_class.php
+++ b/code/web/app/app_achievements/class/DLL_class.php
@@ -61,6 +61,10 @@
$tmp->setChild($n);
}
}
+ else {
+ $this->addNode($data);
+ return null;
+ }
}
if($this->first == null) {
diff --git a/code/web/app/app_achievements/class/Parentum_abstract.php b/code/web/app/app_achievements/class/Parentum_abstract.php
index 09cb7b380..db1c53c21 100644
--- a/code/web/app/app_achievements/class/Parentum_abstract.php
+++ b/code/web/app/app_achievements/class/Parentum_abstract.php
@@ -22,8 +22,8 @@
return $this->nodes->isEmpty();
}
- function addChild($data) {
- $this->nodes->addNode($data);
+ function addChild($data,$b = null) {
+ $this->nodes->addNode($data,$b);
}
function removeChild($id) {
diff --git a/code/web/app/app_achievements/class/RyzomUser_class.php b/code/web/app/app_achievements/class/RyzomUser_class.php
index 9383d5aaf..e8dcb02fb 100644
--- a/code/web/app/app_achievements/class/RyzomUser_class.php
+++ b/code/web/app/app_achievements/class/RyzomUser_class.php
@@ -7,7 +7,7 @@
}
function getID() {
- return $this->data["id"];
+ return $this->data["cid"];
}
function getLang() {
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 8e639cc3b..dee5e19c9 100644
--- a/code/web/app/app_achievements/include/ach_render_ig.php
+++ b/code/web/app/app_achievements/include/ach_render_ig.php
@@ -266,7 +266,7 @@
}
if($perk->getName() != null) {
- $html .= "
".$perk->getName()." |
|
";
+ $html .= "".$perk->getDisplayName()." |
|
";
}
if($perk->objDrawable()) {
$html .= "".ach_render_obj_list($perk->getIterator())." |
";
@@ -288,7 +288,7 @@
if($perk->inDev()) {
continue;
}
- $html .= "".$perk->getName()." ( ".date('d.m.Y',$perk->getDone())." ) ".$perk->getValue()." |
";
+ $html .= "".$perk->getDisplayName()." ( ".date('d.m.Y',$perk->getDone())." ) ".$perk->getValue()." |
";
}
return $html;
@@ -359,7 +359,7 @@
$html .= " ";
}
- $html .= $obj->getName()."";
+ $html .= $obj->getDisplayName()."";
return $html;
}
@@ -379,7 +379,7 @@
return "
getMetaImage()."' /> |
- ".$obj->getName()." |
+ ".$obj->getDisplayName()." |
";
}
@@ -393,7 +393,7 @@
else {
$col = "#999999";
}
- $html .= "".$obj->getName()."";
+ $html .= "".$obj->getDisplayName()."";
}
$html .= ach_render_progressbar($obj->getProgress(),$obj->getValue(),250);
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 459bebffd..3058b2890 100644
--- a/code/web/app/app_achievements/include/ach_render_web.php
+++ b/code/web/app/app_achievements/include/ach_render_web.php
@@ -24,7 +24,7 @@
$open = $menu->getOpenCat();
if($open != 0) {
- $cat = new AchCategory($open,'matis',$_REQUEST['cult'],$_REQUEST['civ']);
+ $cat = new AchCategory($open,null,$_REQUEST['cult'],$_REQUEST['civ']);
}
else {
$cat = new AchSummary($menu,8);
@@ -305,7 +305,7 @@
}
if($perk->getName() != null) {
- $html .= "".$perk->getName()."";
+ $html .= "".$perk->getDisplayName()."";
}
if($perk->objDrawable()) {
$html .= ach_render_obj_list($perk->getIterator());
@@ -326,7 +326,7 @@
if($perk->inDev()) {
continue;
}
- $html .= "".$perk->getName()." ( ".date('d.m.Y',$perk->getDone())." )
".$perk->getValue()."
";
+ $html .= "".$perk->getDisplayName()." ( ".date('d.m.Y',$perk->getDone())." )
".$perk->getValue()."
";
}
return $html;
@@ -396,7 +396,7 @@
$html .= " ";
}
- $html .= $obj->getName()."";
+ $html .= $obj->getDisplayName()."";
return $html;
}
@@ -416,7 +416,7 @@
return "
getMetaImage()."' width='20px' /> |
- ".$obj->getName()." |
+ ".$obj->getDisplayName()." |
";
}
@@ -430,7 +430,7 @@
else {
$col = "#999999";
}
- $html .= "".$obj->getName()."
";
+ $html .= "".$obj->getDisplayName()."
";
}
$html .= ach_render_progressbar($obj->getProgress(),$obj->getValue(),350);
diff --git a/code/web/app/app_achievements/index.php b/code/web/app/app_achievements/index.php
index 726b8d047..316b636ae 100644
--- a/code/web/app/app_achievements/index.php
+++ b/code/web/app/app_achievements/index.php
@@ -13,8 +13,11 @@ require_once('conf.php');
// Ask to authenticate user (using ingame or session method) and fill $user with all information
ryzom_app_authenticate($user, false);
+#$user['id'] = $user['char_id'];
+#$user['name'] = $user['char_name'];
+
$user = array();
-$user['id'] = 1;
+$user['id'] = 16;
$user['lang'] = 'en';
$user['name'] = 'Talvela';
$user['race'] = "r_matis";
@@ -35,7 +38,7 @@ else {
require_once("include/ach_render_common.php");
require_once("class/DLL_class.php");
-require_once("class/InDev_trait.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");
@@ -55,6 +58,7 @@ 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");
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 3092a58b4..bb01aafe1 100644
--- a/code/web/app/app_achievements_admin/class/AdmAchievement_class.php
+++ b/code/web/app/app_achievements_admin/class/AdmAchievement_class.php
@@ -80,5 +80,15 @@
function setTemplate($t) {
$this->template = $t;
}
+
+ function orderPerks() {
+ $iter = $this->getIterator();
+ $i = 0;
+ while($iter->hasNext()) {
+ $curr = $iter->getNext();
+
+ $curr->setPorder($i);
+ }
+ }
}
?>
\ No newline at end of file
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 b75dbd6aa..9ede36606 100644
--- a/code/web/app/app_achievements_admin/class/AdmAtom_class.php
+++ b/code/web/app/app_achievements_admin/class/AdmAtom_class.php
@@ -59,11 +59,72 @@
}
private function parse() {
+ /*VALUE _money AS $money {
+ CACHE blach AS $test
- }
+ if($money >= 10000 && $test == 0) {
+ GRANT
+ FINAL
+ }
+ else {
+ CACHE blach SET $money
+ }
+ }
+
+ $res = $this->ruleset;
+
+ #VALUE ([^ ]+) AS ([^ ]+) {#
+ $match = array();
+ preg_match_all("#VALUE ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match);
+ foreach($match[0] as $key=>$elem) {
+ $func = "_".md5(microtime());
+
+ $tmp = '$this->registerValue("'.$match[1][$key].'","'.$func.'");
+
+ function '.$func.'('.$match[2][$key].',$_P,$_CB) {
+ $_IDENT = "'.$match[1][$key].'";';
+
+ //replace
+ $res = str_replace($elem,$tmp,$res);
+ }
+
+ #ENTITY ([^ ]+) AS ([^ ]+) {#
+ $match = array();
+ preg_match_all("#ENTITY ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match);
+ foreach($match[0] as $key=>$elem) {
+ $func = "_".md5(microtime());
+
+ $tmp = '$this->registerEntity("'.$match[1][$key].'","'.$func.'");
+
+ function '.$func.'('.$match[2][$key].',$_P,$_CB) {
+ $_IDENT = "'.$match[1][$key].'";';
+
+ //replace
+ $res = str_replace($elem,$tmp,$res);
+ }
+
+ #EVENT ([^ ]+) AS ([^ ]+) {#
+ $match = array();
+ preg_match_all("#EVENT ([^ ]+) AS ([^ ]+) {#",$this->ruleset,$match);
+ foreach($match[0] as $key=>$elem) {
+ $func = "_".md5(microtime());
+
+ $tmp = '$this->registerEvent("'.$match[1][$key].'","'.$func.'");
+
+ function '.$func.'('.$match[2][$key].',$_P,$_CB) {
+ $_IDENT = "'.$match[1][$key].'";';
+
+ //replace
+ $res = str_replace($elem,$tmp,$res);
+ }
+
+ #CACHE ([^ ]+) AS ([^ ]+)#
+
+ #GRANT#
- function setInDev($tf) {
+ #FINAL#
+ #CACHE ([^ ]+) SET ([^ ]+)#*/
}
}
?>
\ No newline at end of file
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 e75147fa9..82c301453 100644
--- a/code/web/app/app_achievements_admin/class/AdmObjective_class.php
+++ b/code/web/app/app_achievements_admin/class/AdmObjective_class.php
@@ -35,7 +35,7 @@
function update() {
global $DBc;
- $DBc->sqlQuery("UPDATE ach_objective SET ao_condition='".mysql_real_escape_string($this->getCondition())."',ao_value=".mre($this->getValue()).",ao_display='".mysql_real_escape_string($this->getDisplay())."',ao_metalink=".mkn($this->getMetalink())." WHERE ao_id='".$this->getID()."'");
+ $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("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())."'");
}
@@ -43,15 +43,35 @@
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())."',".mre($this->getValue()).",'".mysql_real_escape_string($this->getDisplay())."',".mkn($this->getMetalink()).")");
+ $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();
$this->setID($id);
- $DBc->sqlQuery("INSERT INTO ach_objective_lang (aol_objective,aol_lang,aopl_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','".mysql_real_escape_string($this->getName())."')");
}
function setCondition($c) {
$this->condition = $c;
}
+
+ function setDisplay($d) {
+ $this->display = $d;
+ }
+
+ function setName($n) {
+ $this->name = $n;
+ }
+
+ function setValue($v) {
+ $this->value = $v;
+ }
+
+ function setMetalink($m) {
+ $this->meta_image = $m;
+ }
+
+ function setPerk($p) {
+ $this->perk = $p;
+ }
}
?>
\ No newline at end of file
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 21fbc0ca2..73c446e40 100644
--- a/code/web/app/app_achievements_admin/class/AdmPerk_class.php
+++ b/code/web/app/app_achievements_admin/class/AdmPerk_class.php
@@ -4,12 +4,14 @@
protected $condition;
protected $condition_value;
+ protected $porder;
function AdmPerk($data,$parent) {
parent::__construct($data,$parent);
$this->condition = $data["ap_condition"];
$this->condition_value = $data["ap_condition_value"];
+ $this->porder = $data["ap_porder"];
}
protected function makeChild($d) {
@@ -33,7 +35,7 @@
function update() {
global $DBc;
- $DBc->sqlQuery("UPDATE ach_perk SET ap_parent=NULL,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()."' WHERE ap_id='".$this->getID()."'");
+ $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("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())."");
}
@@ -43,7 +45,7 @@
$this->dev = 1;
- $DBc->sqlQuery("INSERT INTO ach_perk (ap_achievement,ap_parent,ap_value,ap_condition,ap_condition_value,ap_dev) VALUES ('".$this->getAchievement()."',NULL,'".mysql_real_escape_string($this->getValue())."','".mysql_real_escape_string($this->getCondition())."',".mkn($this->getConditionValue()).",'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();
$this->setID($id);
@@ -81,5 +83,39 @@
function setConditionValue($v) {
$this->condition_value = $v;
}
+
+ function getPorder() {
+ return $this->porder;
+ }
+
+ function setPorder($p) {
+ $this->porder = $p;
+ }
+
+ function setParentID($p) { #!! CUTTING KILLS NODES! HAVE TO BE REROUTED!
+ 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());
+ }
+ else {
+ //remove from ach list; insert after parent
+ 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);
+ }
+ }
+ }
}
?>
\ No newline at end of file
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 7b9f52d2a..133d3ed56 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
@@ -137,8 +137,8 @@
|
@@ -310,7 +310,7 @@
";
$html .= "