<?phprequire_once('generated/BaseTask.class.php');/** * This class has been auto-generated by the Doctrine ORM Framework */class Task extends BaseTask{ public function getTags() { $ret = ''; foreach($this->Tag as $tag) { $ret .= $tag->name . ' '; } return $ret; } /* tags are passed as a comma and/or space seperated string * for exmaple: * "Documentation Database, Other" <=- this is 3 tags */ public function setTags($tags) { $tags = str_replace(',', ' ', $tags); $orig_tags = $this->getTags(); $new = explode(' ', $tags); $old = explode(' ', $orig_tags); $added = array_diff($new, $old); // uses LIKE for case-insensitivity $q = new Doctrine_Query(); $q->select('t.*') ->from('TaskTag t') ->innerjoin('t.Tag g') ->where('g.name LIKE ?'); $removed = array_diff($old, $new); // remove the old ones! foreach($removed as $name) { // spaces result in empty names, ignore them if ($name) { $ret = $q->fetchOne(array($name)); $ret->delete(); } } // uses LIKE for case-insensitivity $find_q = new Doctrine_Query(); $find_q->select('t.id') ->from('Tag t') ->where('t.name LIKE ?'); foreach($added as $name) { // spaces result in empty names, ignore them if ($name) { // first, lets see if a tag by this name already exists $ret = $find_q->fetchOne(array($name)); if (!$ret) { $ret = new Tag(); $ret->name = $name; $ret->save(); } $new = new TaskTag(); $new->task_id = $this->id; $new->tag_id = $ret->id; $new->save(); } } }}