khanat-opennel-code/code/web/app/app_achievements_admin/class/CSRObjective_class.php
2013-09-14 19:02:50 +02:00

116 lines
No EOL
2.7 KiB
PHP

<?php
class CSRObjective extends AchObjective implements CSR {
#########################
# PHP 5.3 compatible
# CSRDispatcher_trait replaces this in PHP 5.4
function grantNode($path,$player) {
#echo "start: ".$path." id: ".$this->getID()."<br>";
if(is_numeric($path)) {
//it's me (id == numeric)
if($this->getID() == $path) {
$this->grant($player);
#echo "grant()<br>";
}
}
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()<br>";
}
}
#echo "end<br>";
}
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 CSRObjective($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->addChild($this->makeChild($res[$i]));
}
}
protected function makeChild($d) {
return new CSRAtom($d,$this);
}
function grant($pid) {
global $DBc;
$DBc->sqlQuery("INSERT INTO ach_player_objective (apo_objective,apo_player,apo_date) VALUES ('".$this->getID()."','".$pid."','".time()."')");
$this->done = 1;
$this->progress = $this->value;
$iter = $this->getIterator();
while($iter->hasNext()) {
$curr = $iter->getNext();
$curr->grant($pid);
}
}
function deny($pid) {
global $DBc;
$DBc->sqlQuery("DELETE FROM ach_player_objective WHERE apo_objective='".$this->getID()."' AND apo_player='".$pid."'");
$this->done = 0;
$this->progress = 0;
$iter = $this->getIterator();
while($iter->hasNext()) {
$curr = $iter->getNext();
$curr->deny($pid);
}
}
}
?>