/** * Find all old temporary reports and clear them. */ public function _on_execute() { debug_add('_on_execute called'); midcom::get('auth')->request_sudo('net.nemein.tag'); $qb_tags = net_nemein_tag_tag_dba::new_query_builder(); $tags = $qb_tags->execute_unchecked(); if (!is_array($tags)) { // QB error midcom::get('auth')->drop_sudo(); return; } foreach ($tags as $tag) { debug_add("Processing tag #{$tag->id} ('{$tag->tag}')"); $qb_links = net_nemein_tag_link_dba::new_query_builder(); $qb_links->add_constraint('tag', '=', $tag->id); $count = $qb_links->count_unchecked(); if ($count === false) { // QB error, skip debug_add("There was QB level error, skip rest of the checks"); continue; } if ($count > 0) { // Tag has links, skip debug_add("Tag has links to it, do not clean"); continue; } debug_add("Cleaning dangling tag #{$tag->id} ('{$tag->tag}')", MIDCOM_LOG_INFO); if (!$tag->delete()) { debug_add("Could not delete dangling tag #{$tag->id} ('{$tag->tag}'), errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); } } debug_add('done'); midcom::get('auth')->drop_sudo(); return; }
/** * Ensure tag links pointing to an object are deleted when the object is */ public function _on_watched_dba_delete($object) { $qb = net_nemein_tag_link_dba::new_query_builder(); $qb->add_constraint('fromGuid', '=', $object->guid); if ($qb->count_unchecked() == 0) { return; } $tag_links = $qb->execute(); foreach ($tag_links as $tag_link) { $tag_link->delete(); } }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_tagged($handler_id, array $args, array &$data) { $data['tag'] = $args[0]; // Get wiki page GUIDs from tag links $mc = net_nemein_tag_link_dba::new_collector('metadata.deleted', false); $mc->add_constraint('fromClass', '=', 'net_nemein_wiki_wikipage'); $mc->add_constraint('tag.tag', '=', $data['tag']); $wikipage_guids = $mc->get_values('fromGuid'); if (empty($wikipage_guids)) { throw new midcom_error_notfound("No wiki pages tagged with {$data['tag']}"); } $qb = net_nemein_wiki_wikipage::new_query_builder(); $qb->add_constraint('topic', 'INTREE', $this->_topic->id); $qb->add_constraint('guid', 'IN', $wikipage_guids); $qb->add_order('metadata.score', 'DESC'); $data['wikipages'] = $qb->execute(); if (count($data['wikipages']) == 0) { throw new midcom_error_notfound("No wiki pages tagged with {$data['tag']}"); } $data['view_title'] = sprintf($this->_request_data['l10n']->get('pages tagged with %s in %s'), $data['tag'], $this->_topic->extra); midcom::get('head')->set_pagetitle($data['view_title']); $this->add_breadcrumb("tags/{$data['tag']}/", $data['view_title']); }
private function _check_duplicates() { $qb = net_nemein_tag_link_dba::new_query_builder(); if ($this->id) { $qb->add_constraint('id', '<>', $this->id); } $qb->add_constraint('fromGuid', '=', $this->fromGuid); $qb->add_constraint('tag', '=', $this->tag); $qb->add_constraint('context', '=', $this->context); return $qb->count_unchecked(); }
/** * Move all objects connected to a tag to another * * @param string $from Tag to move from * @param string $to Tag to move to * @param boolean $delete Whether to delete the from tag * @return boolean indicating success */ public static function merge_tags($from, $to, $delete = true) { $from_tag = net_nemein_tag_tag_dba::get_by_tag($from); if (!$from_tag || !$from_tag->guid) { return false; } $to_tag = net_nemein_tag_tag_dba::get_by_tag($to); if (!$to_tag || !$to_tag->guid) { // Create new one $to_tag = new net_nemein_tag_tag_dba(); $to_tag->tag = $to; if (!$to_tag->create()) { return false; } } $qb = net_nemein_tag_link_dba::new_query_builder(); $qb->add_constraint('tag', '=', $from_tag->id); $tag_links = $qb->execute(); foreach ($tag_links as $tag_link) { $tag_link->tag = $to_tag->id; $tag_link->update(); } if ($delete) { $from_tag->delete(); } return true; }