#1470 admin tool workprint; menu admin almost complete; wip!!
--HG-- branch : gsoc2012-achievementshg/feature/gsoc2013-dfighter
parent
a3d40de283
commit
7d976a22ad
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
interface ADM {
|
||||||
|
/*---------------------------
|
||||||
|
The admin interface defines the basic operations every node must handle.
|
||||||
|
These are needed to invoke the database operations insert, update and delete.
|
||||||
|
---------------------------*/
|
||||||
|
function delete_me();
|
||||||
|
|
||||||
|
function update();
|
||||||
|
|
||||||
|
function insert();
|
||||||
|
|
||||||
|
function setInDev($true_false);
|
||||||
|
|
||||||
|
function getID(); // needed to identify a node
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
class AdmAchievement extends AchAchievement implements ADM, AdmDispatcher {
|
||||||
|
|
||||||
|
function AdmAchievement($data,$parent) {
|
||||||
|
parent::__construct($data,$parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeChild(&$d) {
|
||||||
|
return new AdmPerk($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertNode(&$n) { // add a Perk
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) { // remove a Perk
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->unsetChild($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) { // update a Perk
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
#MISSING: set new data
|
||||||
|
#
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // find a Perk
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
if($elem->getID == $id) {
|
||||||
|
return $elem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete_me() {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_achievement WHERE aa_id='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_achievement WHERE apa_id='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_achievement_lang WHERE NOT EXISTS (SELECT * FROM ach_achievement WHERE aa_id=aal_achievement)");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->delete_me();
|
||||||
|
$this->unsetChild($elem->getID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("UPDATE ach_achievement SET aa_parent='".$this->getParent())."',aa_tie_race='".mysql_real_escape_string($this->getTieRace())."',aa_tie_cult='".mysql_real_escape_string($this->getTieCult())."',aa_tie_civ='".mysql_real_escape_string($this->getTieCiv())."',aa_image='".mysql_real_escape_string($this->getImage())."',aa_dev='".$this->getDev()."' WHERE aa_id='".$this->geID()."'");
|
||||||
|
|
||||||
|
#MISSING: update lang entry
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetChild($id) { // remove child with given ID from nodes list; unset should destruct it.
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($elem->getID() == $id) {
|
||||||
|
unset($this->nodes[$key]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setInDev($tf) {
|
||||||
|
if($tf == true) {
|
||||||
|
$this->setDev(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->setDev(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDev($d) {
|
||||||
|
$this->dev = $d;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setID($id) {
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setParent($p) {
|
||||||
|
$this->parent = $p
|
||||||
|
}
|
||||||
|
|
||||||
|
function setCategory($c) {
|
||||||
|
$this->category = $c;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTieRace($t) {
|
||||||
|
$this->tie_race = $t;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTieCiv($t) {
|
||||||
|
$this->tie_civ = $t;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTieCult($t) {
|
||||||
|
$this->tie_cult = $t;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setImage($i) {
|
||||||
|
$this->image = $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setName($n) {
|
||||||
|
$this->name = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTemplate($i) {
|
||||||
|
$this->template = $t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
class AdmAtom implements ADM {
|
||||||
|
|
||||||
|
protected $id;
|
||||||
|
protected $objective;
|
||||||
|
protected $mandatory;
|
||||||
|
protected $ruleset;
|
||||||
|
protected $ruleset_parsed;
|
||||||
|
protected $parent;
|
||||||
|
|
||||||
|
function AdmAtom($data,$parent) {
|
||||||
|
$this->parent = $parent;
|
||||||
|
$this->id = $data['atom_id'];
|
||||||
|
$this->objective = $data['atom_objective'];
|
||||||
|
$this->mandatory = $data['atom_mandatory'];
|
||||||
|
$this->ruleset = $data['atom_ruleset'];
|
||||||
|
$this->ruleset_parsed = $data['atom_ruleset_parsed'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete_me() { // aaaaand... it's gone ^^
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_atom WHERE atom_id='".$this->id."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_atom WHERE apa_atom='".$this->id."'");
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
$DBc->sqlQuery("UPDATE ach_atom SET atom_mandatory='".."',atom_ruleset='".."',atom_ruleset_parsed='".."' 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();
|
||||||
|
$this->setID($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setMandatory($ft) {
|
||||||
|
if($ft == true) {
|
||||||
|
$this->mandatory = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->mandatory = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setRuleset($r) {
|
||||||
|
$this->ruleset = $r;
|
||||||
|
$this->parse();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMandatory() {
|
||||||
|
return $this->mandatory;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isMandatory() {
|
||||||
|
return ($this->mandatory == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRuleset() {
|
||||||
|
return $this->ruleset;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function parse() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
class AdmCategory extends AchCategory implements AdmDispatcher {
|
||||||
|
|
||||||
|
function AdmCategory($id,$cult = null,$civ = null) {
|
||||||
|
parent::__construct($id,$cult,$civ);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeChild(&$d) {
|
||||||
|
return new AdmAchievement($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertNode(&$n) {
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) {
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->unsetChild($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) {
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
#MISSING: set new data
|
||||||
|
#aa_id aa_category aa_parent aa_tie_race aa_tie_cult aa_tie_civ aa_image aa_dev
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // try to find the Achievement node that has the given ID. Return null on failure.
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
if($elem->getID == $id) {
|
||||||
|
return $elem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetChild($id) { // remove child with given ID from nodes list; unset should destruct it.
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($elem->getID() == $id) {
|
||||||
|
unset($this->nodes[$key]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
interface AdmDispatcher {
|
||||||
|
/*---------------------------
|
||||||
|
The admin dispatcher allows us to perform operations on child nodes.
|
||||||
|
---------------------------*/
|
||||||
|
function insertNode(&$n);
|
||||||
|
function removeNode($id);
|
||||||
|
function updateNode($id,$data);
|
||||||
|
function getNode($id);
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,185 @@
|
|||||||
|
<?php
|
||||||
|
class AdmMenuNode extends AchMenuNode implements ADM { #MISSING: da fehlt die komplette logik für sub-sub-menüs!!! DU VOLLHIRT!
|
||||||
|
private $ach_count;
|
||||||
|
|
||||||
|
function AdmMenuNode($data,$parent) {
|
||||||
|
parent::__construct($data,$parent);
|
||||||
|
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$res = $DBc->sqlQuery("SELECT count(*) as anz FROM ach_achievement WHERE aa_category='".$this->id."'");
|
||||||
|
$this->ach_count = $res[0]['anz'];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeChild($d) { // override child generator to use admin classes
|
||||||
|
return new AdmMenuNode($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasAchievements() {
|
||||||
|
if($this->ach_count != 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$res = $elem->hasAchievements();
|
||||||
|
if($res == true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // try to find the child node that has the given ID. Return null on failure.
|
||||||
|
if($id == $this->getID()) { // found!
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach($this->nodes as $elem) { // check children
|
||||||
|
$tmp = $elem->getNode($id);
|
||||||
|
if($tmp != null) {
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete_me() { // remove this node
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
// remove from database
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_category WHERE ac_id='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_category WHERE ac_parent='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_category_lang WHERE NOT EXISTS (SELECT * FROM ach_category WHERE ac_id=acl_category)");
|
||||||
|
|
||||||
|
// call delete function for all children
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->delete_me();
|
||||||
|
$this->unsetChild($elem->getID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetChild($id) { // remove child with given ID from nodes list; unset should destruct.
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($elem->getID() == $id) {
|
||||||
|
unset($this->nodes[$key]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertChild(&$n) { // insert a new child
|
||||||
|
// insert command to create database entry
|
||||||
|
$n->insert();
|
||||||
|
|
||||||
|
// set the new child's parent and add it to the node list
|
||||||
|
$n->setParent($this);
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
global $DBc,$_USER;
|
||||||
|
|
||||||
|
$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())."'");
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert() { // write $this to the database as a new entry
|
||||||
|
global $DBc,$_USER;
|
||||||
|
|
||||||
|
$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();
|
||||||
|
$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())."')");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setInDev($tf) {
|
||||||
|
if($tf == true) {
|
||||||
|
$this->setDev(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->setDev(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setDev($d) {
|
||||||
|
$this->dev = $d;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setOrder($o) {
|
||||||
|
$this->order = $o;
|
||||||
|
$this->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function swapChild($a,$b) {
|
||||||
|
$ids = array();
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($a == $elem->getID() || $b == $elem->getID()) {
|
||||||
|
$ids[] = $key;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sizeof($ids) == 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tmp = $this->nodes[$ids[0]];
|
||||||
|
$this->nodes[$ids[0]] = $this->nodes[$tmp[1]];
|
||||||
|
$this->nodes[$ids[1]] = $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setName($n) {
|
||||||
|
$this->name = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setImage($i) {
|
||||||
|
if($i == null || strtolower($i) == "null") {
|
||||||
|
$this->image = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->image = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setParent(&$p) {
|
||||||
|
$this->parent = $p;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setParentID($p) {
|
||||||
|
if($p == null || strtolower($p) == "null") {
|
||||||
|
$this->parent_id = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->parent_id = $p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setID($id) {
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNextOrder() {
|
||||||
|
if($this->isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$val = array();
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$val[] = $elem->getOrder();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (max($val)+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
class AdmMenu extends AchMenu implements AdmDispatcher {
|
||||||
|
|
||||||
|
function AdmMenu($open) {
|
||||||
|
parent::__construct($open);
|
||||||
|
|
||||||
|
unset($this->nodes[0]); // unset the auto-generated "summary" node
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeChild($d) { // override child generator to use admin classes
|
||||||
|
return new AdmMenuNode($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) { // find the node that has the ID we want to delete. If found, call it's delete function.
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->unsetChild($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertNode(&$n) {
|
||||||
|
if($n->getParentID() != null) {
|
||||||
|
$res = $this->getNode($n->getParentID());
|
||||||
|
if($res != null) {
|
||||||
|
$n->setParent($res);
|
||||||
|
$res->insertChild($n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$n->setParent($this);
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) { #MISSING: data handling...
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->setName($data['acl_name']);
|
||||||
|
$res->setImage($data['ac_image']);
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function swapOrder($a,$b) {
|
||||||
|
$tmp_a = $this->getNode($a);
|
||||||
|
if($tmp_a != null) {
|
||||||
|
$tmp_b = $this->getNode($a);
|
||||||
|
if($tmp_b != null) {
|
||||||
|
$tmp = $tmp_b->getOrder();
|
||||||
|
$tmp_b->setOrder($tmp_a->getOrder());
|
||||||
|
$tmp_a->setOrder($tmp);
|
||||||
|
|
||||||
|
if($tmp_a->getParentID() == $tmp_b->getParentID()) {
|
||||||
|
$tmp_a->getParent()->swapChild($a,$b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // try to find the MenuNode that has the given ID. Return null on failure.
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$tmp = $elem->getNode($id);
|
||||||
|
if($tmp != null) {
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNextOrder() {
|
||||||
|
if($this->isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$val = array();
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$val[] = $elem->getOrder();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (max($val)+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetChild($id) { // remove child with given ID from nodes list; unset should destruct it.
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($elem->getID() == $id) {
|
||||||
|
unset($this->nodes[$key]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
class AdmObjective extends AchObjective implements ADM, AdmDispatcher {
|
||||||
|
|
||||||
|
function AdmObjective($data,$parent) {
|
||||||
|
parent::__construct($data,$parent);
|
||||||
|
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$res = $DBc->sqlQuery("SELECT atom_id FROM ach_atom WHERE atom_objective='".$this->getID()."'");
|
||||||
|
$sz = sizeof($res);
|
||||||
|
for($i=0;$i<$sz;$i++) {
|
||||||
|
$this->nodes[] = $this->makeChild($res[$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function makeChild($d) {
|
||||||
|
return new AdmAtom($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertNode(&$n) { // insert an Atom
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) { // remove an Atom
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->unsetChild($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) { // update an Atom
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
#MISSING: set new data
|
||||||
|
#
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // find an atom
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
if($elem->getID == $id) {
|
||||||
|
return $elem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete_me() {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_objective WHERE ao_id='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_objective WHERE apo_objective='".$this->getID()."'");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->delete_me();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function setInDev($tf) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
class AdmPerk extends AchPerk implements ADM, AdmDispatcher {
|
||||||
|
|
||||||
|
function AdmPerk($data,$parent) {
|
||||||
|
parent::__construct($data,$parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeChild($d) {
|
||||||
|
return new AdmObjective($d,$this);
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertNode(&$n) { // insert an Objective
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) { // remove an Objective
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->unsetChild($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) { // update an Objective
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
#MISSING: set new data
|
||||||
|
#
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) { // find an Objective
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
if($elem->getID == $id) {
|
||||||
|
return $tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete_me() {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_perk WHERE ap_id='".$this->getID()."'");
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_perk WHERE app_perk='".$this->getID()."'");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->delete_me();
|
||||||
|
$this->unsetChild($elem->getID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetChild($id) { // remove child with given ID from nodes list; unset should destruct it.
|
||||||
|
foreach($this->nodes as $key=>$elem) {
|
||||||
|
if($elem->getID() == $id) {
|
||||||
|
unset($this->nodes[$key]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setInDev($tf) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
class CSRAchievement extends AchAchievement implements CSR {
|
||||||
|
|
||||||
|
function CSRAchievement(&$data) {
|
||||||
|
parent::__construct($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function grant($pid) {
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->grant($pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function deny($pid) {
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->deny($pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
class CSRAtom implements CSR {
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
function CSRAtom(&$data) {
|
||||||
|
$this->id = $data['atom_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function grant($pid) {
|
||||||
|
$this->clear_all($pid); #empty database
|
||||||
|
}
|
||||||
|
|
||||||
|
function deny($pid) {
|
||||||
|
$this->clear_all($pid); #empty database
|
||||||
|
}
|
||||||
|
|
||||||
|
private function clear_all($pid) {
|
||||||
|
global $DBc;
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_atom WHERE apa_atom='".$this->getID()."' AND apa_player='".$pid."'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
class CSRObjective extends AchObjective implements CSR {
|
||||||
|
|
||||||
|
private $nodes;
|
||||||
|
|
||||||
|
function CSRObjective(&$data) {
|
||||||
|
parent::__construct($data);
|
||||||
|
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$res = $DBc->sqlQuery("SELECT atom_id FROM ach_atom WHERE atom_objective='".$this->getID()."'");
|
||||||
|
$sz = sizeof($res);
|
||||||
|
for($i=0;$i<$sz;$i++) {
|
||||||
|
$this->nodes[] = new CSRAtom($res[$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function grant($pid) {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("INSERT INTO ach_player_objective (apo_objective,apo_player,apo_date) VALUES ('".$this->getID()."','".$pid."','".time()."')");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->grant($pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function deny($pid) {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_objective WHERE apo_objective='".$this->getID()."' AND apo_player='".$pid."'");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->deny($pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
class CSRPerk extends AchPerk implements CSR {
|
||||||
|
|
||||||
|
function CSRPerk(&$data) {
|
||||||
|
parent::__construct($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function grant($pid) {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("INSERT INTO ach_player_perk (app_perk,app_player,app_date) VALUES ('".$this->getID()."','".$pid."','".time()."')");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->grant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function deny($pid) {
|
||||||
|
global $DBc;
|
||||||
|
|
||||||
|
$DBc->sqlQuery("DELETE FROM ach_player_perk WHERE app_perk='".$this->getID()."' AND app_player='".$pid."'");
|
||||||
|
|
||||||
|
foreach($this->nodes as $elem) {
|
||||||
|
$elem->deny($pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
interface CSR {
|
||||||
|
function grant($player_id);
|
||||||
|
|
||||||
|
function deny($player_id);
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
trait Dispatcher {
|
||||||
|
function insertNode(&$n) {
|
||||||
|
#MISSING: set this as parent
|
||||||
|
$n->insert();
|
||||||
|
$this->nodes[] = $n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeNode($id) {
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
$res->delete_me();
|
||||||
|
$this->removeNode($res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateNode($id,$data) {
|
||||||
|
$res = $this->getNode($id);
|
||||||
|
if($res != null) {
|
||||||
|
#MISSING: set new data
|
||||||
|
#
|
||||||
|
$res->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNode($id) {
|
||||||
|
return $this->getIdx($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
class RyzomAdmin extends RyzomUser {
|
||||||
|
function RyzomAdmin($data) {
|
||||||
|
parent::__construct($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isAdmin() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isCSR() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,171 @@
|
|||||||
|
<?php
|
||||||
|
function adm_render_menu(&$menu,$sub = 0) {
|
||||||
|
$html = "<style>
|
||||||
|
.ach_menu {
|
||||||
|
display:block;
|
||||||
|
padding:2px;
|
||||||
|
border:1px solid #000000;
|
||||||
|
margin-bottom:2px;
|
||||||
|
color:#FFFFFF;
|
||||||
|
}
|
||||||
|
.ach_menu:hover {
|
||||||
|
color:orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ach_mspan a {
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
</style>";
|
||||||
|
|
||||||
|
$html .= "<div style='display:block;background-color:#FFFFFF;padding:3px;margin-bottom:5px;color:#000000;'>
|
||||||
|
<div style='display:block;text-align:right;'><a href='javascript:hs(\"new_main\",\"block\");'><img src='pic/b_insrow.png'></a></div>
|
||||||
|
|
||||||
|
<div style='display:none;' id='new_main'>
|
||||||
|
<form method='post' action='?mode=menu&act=insert'>
|
||||||
|
<fieldset>
|
||||||
|
<legend>create new category</legend>
|
||||||
|
<input type='hidden' name='ac_parent' value='NULL' />
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>name</td>
|
||||||
|
<td><input type='text' name='acl_name' /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>image</td>
|
||||||
|
<td><input type='text' name='ac_image' /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> </td>
|
||||||
|
<td><input type='submit' value='create' /></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
if($_REQUEST['ac_id'] > 0 && $_REQUEST['confirm'] == "delete") {
|
||||||
|
$curr = $menu->getNode($_REQUEST['ac_id']);
|
||||||
|
$html .= "<div style='display:block;'>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Are you sure you want to delete this category?</legend>";
|
||||||
|
if($curr->hasAchievements()) {
|
||||||
|
$html .= "<b>You may NOT DELETE this category since there are still achievements tied to it or one of its sub-categories!</b>";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$html .= "<b style='font-size:16px;'>".$curr->getName()."</b><p>";
|
||||||
|
|
||||||
|
if($curr->getParentID() == null) {
|
||||||
|
$html .= "<b>WARNING:</b> Deleting this category will also delete ALL sub-categories!<br>";
|
||||||
|
}
|
||||||
|
$html .= "<a href='?mode=menu&act=delete&ac_id=".$_REQUEST['ac_id']."'><b>delete</b></a>";
|
||||||
|
}
|
||||||
|
$html .= "</fieldset>
|
||||||
|
</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= "</div>";
|
||||||
|
|
||||||
|
return $html.ach_render_mnode($menu,$sub);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ach_render_mnode(&$menu,$sub) {
|
||||||
|
global $_CONF;
|
||||||
|
|
||||||
|
# echo "1";
|
||||||
|
|
||||||
|
$iter = $menu->getIterator();
|
||||||
|
while($iter->hasNext()) {
|
||||||
|
$curr = $iter->getNext();
|
||||||
|
#$sz = $menu->getSize();
|
||||||
|
#for($i=0;$i<$sz;$i++) {
|
||||||
|
# $curr = $menu->getChild($i);
|
||||||
|
|
||||||
|
$html .= "<span class='ach_mspan'><table class='ach_menu'>
|
||||||
|
<tr>";
|
||||||
|
if($sub == 0) {
|
||||||
|
$html .= "<td><img src='".$_CONF['image_url']."pic/menu/".$curr->getImage()."' /></td>";
|
||||||
|
}
|
||||||
|
$html .= "<td style='font-size:".(20-$sub)."px;font-weight:bold;' width='100%'>";
|
||||||
|
if($curr->inDev()) {
|
||||||
|
$html .= "<s>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= $curr->getName();
|
||||||
|
|
||||||
|
if($curr->inDev()) {
|
||||||
|
$html .= "</s>";
|
||||||
|
}
|
||||||
|
$html .= "</td>
|
||||||
|
<td style='background-color:#FFFFFF;padding:3px;'><nobr><a href='?mode=menu&act=dev&state=".$curr->getDev()."&ac_id=".$curr->getID()."'><img src='pic/";
|
||||||
|
if($curr->inDev()) {
|
||||||
|
$html .= "red";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$html .= "green";
|
||||||
|
}
|
||||||
|
$html .= ".gif' /></a> <a href='javascript:hs(\"edit_m".$curr->getID()."\",\"block\");'><img src='pic/icon_edit.gif'></a>";
|
||||||
|
|
||||||
|
if($sub == 0) {
|
||||||
|
$html .= " <a href='javascript:hs(\"ins_m".$curr->getID()."\",\"block\");'><img src='pic/b_insrow.png'></a>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= " <a href='?mode=menu&confirm=delete&ac_id=".$curr->getID()."'><img src='pic/b_drop.png'></a></nobr></td>
|
||||||
|
</tr>
|
||||||
|
</table></span>";
|
||||||
|
if($sub == 0) {
|
||||||
|
$html .= "<div style='display:none;color:#000000;background-color:#FFFFFF;' id='ins_m".$curr->getID()."'>
|
||||||
|
<form method='post' action='?mode=menu&act=insert'>
|
||||||
|
<fieldset>
|
||||||
|
<legend>create new sub-category</legend>
|
||||||
|
<input type='hidden' name='ac_parent' value='".$curr->getID()."' />
|
||||||
|
<input type='hidden' name='ac_image' value='NULL' />
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>name</td>
|
||||||
|
<td><input type='text' name='acl_name' /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> </td>
|
||||||
|
<td><input type='submit' value='create' /></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= "<div style='display:none;color:#000000;background-color:#FFFFFF;' id='edit_m".$curr->getID()."'>
|
||||||
|
<form method='post' action='?mode=menu&act=update&ac_id=".$curr->getID()."'>
|
||||||
|
<fieldset>
|
||||||
|
<legend>edit category</legend>";
|
||||||
|
if($sub != 0) {
|
||||||
|
$html .= "<input type='hidden' name='ac_image' value='NULL' />";
|
||||||
|
}
|
||||||
|
$html .= "<table>
|
||||||
|
<tr>
|
||||||
|
<td>name</td>
|
||||||
|
<td><input type='text' name='acl_name' value='".$curr->getName()."' /></td>
|
||||||
|
</tr>";
|
||||||
|
if($sub == 0) {
|
||||||
|
$html .= "<tr>
|
||||||
|
<td>image</td>
|
||||||
|
<td><input type='text' name='ac_image' value='".$curr->getImage()."' /></td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
$html .= "<tr>
|
||||||
|
<td> </td>
|
||||||
|
<td><input type='submit' value='save' /></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
if(!$curr->isEmpty()) {
|
||||||
|
$html .= "<div style='display:block;margin-left:25px;'>".ach_render_mnode($curr,($sub+4))."</div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
?>
|
Binary file not shown.
After Width: | Height: | Size: 311 B |
Binary file not shown.
After Width: | Height: | Size: 283 B |
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 125 B |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Loading…
Reference in New Issue