name = $this->get_db_value($sql)) { //kui tuleb tühi - evalueeritakse false-na parent::set_id($id); return 1; } else return 0; //kui netist tuleb vale päring, jõuab siia } /** * Väljastab gtupid. * @return array Grupid * @access private */ function get_groups() { $sql = "SELECT g.group_id, g.group_name name, p.name leader FROM dsg_group g LEFT JOIN dsg_person p ON g.leader = p.person_id WHERE g.group_relation_id = '{$this->id}' "; $groups = $this->get_db_key_records($sql); foreach ($groups as $group_id => $group) { $groups[$group_id]['members'] = $this->get_members($group_id); } //var_dump($groups); return $groups; } /** * Väljastab ühte gruppi kuuluvad inimesed. * @param integer * @return array * @access private */ function get_members($group_id) { $sql = "SELECT p.person_id, p.name, p.profname FROM dsg_member m, dsg_person p WHERE m.group_relation_id='{$this->id}' AND m.group_id='$group_id' AND m.person_id=p.person_id"; return $this->get_db_key_records($sql); } /** */ function save($week) { $sql = "INSERT INTO dsg_chronology (user_id, game_id, week, action_id, group_relation_id) VALUES ('{$this->user_id}', '{$this->game_id}', '$week', '{$this->action_id}', '{$this->id}' ) "; return $this->exec_sql($sql); } /** * * @access private */ function get_info() { $this->groups = $this->get_groups(); if (!empty($this->groups)) { //kui tuleb tühi - evalueeritakse false-na return 1; } else return 0; } /** /** * Kutsutakse välja selleks, et vajadusel teostada punkti-nädala arvestus. * * @return boolean */ function commit() { if ($this->commited()) { $this->get_info(); return 1; //väljastab et kõik OK. } $success = 0; $diary = $this->owner->get_diary(); if ($diary->get_weeks_left() < $this->time_cost) { $this->message = 'Mängu lõpuni on vähem aega kui tegevuse sooritamiseks vaja.'; return $success; } if ($this->save($diary->get_week())) { if ($diary->add_weeks($this->time_cost)) { if ($this->get_info()) $success = 1; else { //pole vist kuigi tõenäoline $this->message = 'Viga: informatsiooni gruppide kohta ei saadud.'; } }else $this->message = 'Viga: Mängu lõpuni on vähem aega kui tegevuse sooritamiseks vaja.'; }else $this->message = 'Viga: käigu salvestamine ebaõnnestus.'; return $success; } /** * Arv, mitu korda seda Actionit on tehtud.. * Kuna subjekte ei määrata grupisuhete puhul siis parameeter jäetakse tähelepanuta * ()Praegu võtab 1 parameetri) * Juhul kui param pole antud, võiks vaadata AB-st kas ta ise on tehtud (kas commit on tehtud) * Antud juhul peaks väljastama ainult kas 0 või 1 sest seda käiku võib mängu jooksul teha vaid 1 kord. * * @param mixed $with_subject Person'i identifikaator * @return integer Arv, mitu korda tehtud (kui on 0, evalueerub false-ks - seda kasutatakse tõeväärtusena) */ function commited($with_subject = null) { $class = get_class($this); return $this->get_db_value(" SELECT COUNT(*) FROM dsg_chronology c, dsg_action a WHERE a.class_name = '$class' AND c.action_id = a.action_id AND c.group_relation_id = '{$this->id}' AND c.user_id = '{$this->user_id}' AND c.game_id = '{$this->game_id}' "); } /** * Väljastab kõik grupisuhted. * * @return array */ function get_items() { $sql = "SELECT r.group_relation_id, r.relation_name, NOT ISNULL(c.group_relation_id) infocard FROM dsg_group_relation r LEFT JOIN dsg_chronology c ON r.group_relation_id = c.group_relation_id AND user_id = '{$this->user_id}' AND game_id = '{$this->game_id}' WHERE r.visible = 1 "; //echo $sql; //eeldan: igat gruppi küsitakse mängu jooksul 1 kord - c.group_relation_id on unikaalne //$arr = $this->get_db_key_records($sql); $arr = $this->get_db_records($sql); return $arr; } function get_open_items() { $sql = "SELECT r.group_relation_id, r.relation_name FROM dsg_group_relation r, dsg_chronology c WHERE r.group_relation_id = c.group_relation_id AND user_id = '{$this->user_id}' AND game_id = '{$this->game_id}' AND r.visible = 1 "; $arr = $this->get_db_records($sql); return $arr; } function get_person_related_groups($person_id) { $game =& $this->owner; $rows = $this->get_open_items(); foreach ($rows as $row) { $relation =& $game->get_action('R'); $relation->set_id($row['group_relation_id']); $g =& new Group($game); $g->add_id($person_id); $grp = $relation->get_group_where($g); $grp->remove_id($person_id); if ($grp->size()) { $rel_node = new InfoNode($game); $rel_node->add_node(); } } return NULL; } /** * Võib olla class P või person_id, * aga üldiselt tahaks tulevikus P kasutamise ära lõpetada! :P * Peab sööma groupi, sest see võidakse talle sisse sööta.. * subject võib olla group kujul (isegi kui on ainult 1) * ise küsimus on mis ta siis teeb kui grupis on mitu liiget.. * 1) Võtab siis esimese items() arrayst * 2) leiab iga antud grupi liikmele vastava hulga ja liidab need üheks väljundgrupiks * sellist varianti VÕIS vaja minna VÕIBOLLA vaid 2-s algoritmis(96,98), ja seegi kahtlane. */ function &get_group_where($grp) { //GroupRelationi where() ehk ei pea sööma mõlemat! $sql = "SELECT DISTINCT mgp.person_id FROM dsg_member mpg, dsg_member mgp WHERE mpg.group_relation_id = {$this->id} AND mpg.person_id IN (".$grp->comma_separated().") AND mpg.group_relation_id = mgp.group_relation_id AND mpg.group_id = mgp.group_id /*AND mpg.group_id = 2*/ ORDER BY mgp.person_id"; //echo 'siin on päring: [', $sql, ']'; $gr =& new Group($this->owner); $gr->set_ids($this->get_db_vertical_values($sql)); //echo 'siin on grupp: [', $gr->comma_separated(), ']'; return $gr; } function &get_group($group_id) { $sql = "SELECT person_id FROM dsg_member WHERE group_relation_id = {$this->id} AND group_id = $group_id ORDER BY person_id "; $gr =& new Group($this->owner); $gr->set_ids($this->get_db_vertical_values($sql)); return $gr; } function leaders() { $sql = "SELECT leader FROM dsg_group WHERE group_relation_id = {$this->id} "; $gr =& new Group($this->owner); $gr->set_ids($this->get_db_vertical_values($sql)); //NULL-e lihtsalt ei lisata arraysse - võib tulla tühi return $gr; } } ?>