assign_record("SELECT * FROM dsg_action WHERE class_name = '".get_class($this)."'"); // siin saab paika ka $this->action_id //$this->subjects = array(); //$diary =& $this->owner->get_diary(); //$this->week = $diary->get_week(); //Fatal error: Call to a member function on a non-object in //D:\InF\Pr\PHP\SIMU\greeny-simu\prot02\engine\action.php on line 78 $this->week = $this->owner->week; //näiteks initsialiseerimata person obj saab kuvada nädalat, mida ta esindab. } /** * Väljastab uue iseenda klassi Action objekti, initsialiseerides selle või mitte. * @param mixed $instance_id valikuline exemprari identifikaator. Kui on ära jäetud väljastatakse * initsialiseerimata objekt * @access public */ function &instance($instance_id = null) { $class = get_class($this); $a =& new $class($this->owner); if (is_null($instance_id)) return $a; //taheti initsialiseerimata objekti //tahetakse initsialiseeritud objekti if($a->set_id($instance_id)) //väljastab true/false sõltuvalt kas õnnestus return $a; else return null; //sellist objekti nagu nõutud, ei ole. } /** * Tegevuse/käigu toimepanek. * @return boolean * @abstract */ function commit() { } /** * load() väljakutsumine peaks olema samaväärne commit()-ga - objekt saab vajalikud väärtused. * * See meetod implementeeritakse järglastes uuesti, kui on vajadus keerukama päringu järele. * Mõne järglase jaoks pole siin mõnda välja vaja võibolla. * Siin loetakse ka subjektid sisse (luuakse) */ function load($week) { $sql = "SELECT week, activity_id, result_id, dice, group_relation_id FROM dsg_chronology WHERE action_id = '{$this->action_id}' AND week = '$week' AND user_id = '{$this->user_id}' AND game_id = '{$this->game_id}' "; $this->assign_record($sql); $this->subjects = $this->get_subjects($week); } /** * @abstract */ function save($week) { } /** * See tehakse edaspidi group'i sees. * Siin tehakse: * $g =& new Group($this->owner); * $g->load_subjects($week); * return $g; */ function get_subjects($week) { $sql = "SELECT person_id FROM dsg_subject WHERE week = '$week' AND user_id = '{$this->user_id}' AND game_id = '{$this->game_id}' "; return $this->get_db_vertical_values($sql); } /** * @param integer $week * @param mixed $subjects - võib olla array või null või üksik value */ function add_subjects($week, $subjects) { //kui on null või tühi array: if (empty($subjects)) return true; //kõik OK //kui on value: if (!is_array($subjects)) $subjects = array($subjects); $arr = array(); foreach ($subjects as $id) $arr[] = "'$id'"; $comma_separated = implode(",", $arr); $sql = "INSERT INTO dsg_subject (user_id, game_id, week, person_id) SELECT '{$this->user_id}', '{$this->game_id}', '$week', person_id FROM dsg_person WHERE person_id IN ($comma_separated) "; $success = $this->exec_sql($sql); //echo mysql_info(); return $success; } /** * Arv, mitu korda seda Actionit on tehtud ÜHE subjektiga.. * Praegu võtab 1 parameetri * Juhul kui param pole antud, võiks vaadata AB-st kas ta ise on tehtud (kas commit on tehtud) * * @abstract * @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) { /* //võib küsida edasi chronology käest? return 0; //võibolla saaks realiseerida siin ka üldise, aga lihtsam on overrideda alamklassides $class = get_class($this); return $this->get_db_value("SELECT COUNT(*) FROM dsg_chronology c, dsg_action a, dsg_subject s WHERE a.class_name='$class', c.action_id = a.action_id LEFT JOIN dsg_subject s ON c.user_id = s.user_id AND c.game_id = s.game_id"); */ } /** * Väljastab, kas mingi action on läbi viidud antud subjekti(de)ga * Parameetriks kas üksikväärtus või array * * @param mixed üksik väärtus või massiiv Person'i identifikaatoritest * @return boolean Kas Action on läbi viidud nende subjekti(de)ga */ function all_commited($with_subjects) { if (!is_array($with_subjects)) $with_subjects = array($with_subjects); /* $class = get_class($this); return $this->get_db_value("SELECT COUNT(*) FROM dsg_chronology c, dsg_action a, dsg_subject s, dsg_activity t WHERE a.class_name = '$class' AND t.activity_id='1' AND person_id='$with_subject' AND c.activity_id=t.activity_id AND c.action_id=a.action_id AND c.week=s.week AND c.user_id=s.user_id AND c.game_id=s.game_id AND c.game_id='$game_id' AND c.user_id='$user_id' "); */ } function get_related_info() { } } ?>