示例#1
0
文件: clean.php 项目: nemein/openpsa
 /**
  * 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;
 }
示例#2
0
 /**
  * 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();
     }
 }
示例#3
0
文件: tag.php 项目: nemein/openpsa
 /**
  * @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']);
 }
示例#4
0
文件: link.php 项目: nemein/openpsa
 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();
 }
示例#5
0
 /**
  * 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;
 }