public function deleteTagItem($r) { $u = $this->user; $u->expireDataCache($r->getCache()); $tag_item = new Dase_DBO_TagItem($this->db); $tag_item->load($r->get('tag_item_id')); $tag = new Dase_DBO_Tag($this->db); $tag->load($tag_item->tag_id); //todo: make this tag->eid == $u->eid if ($tag->dase_user_id == $u->id) { $tag_item->delete(); $tag->updateItemCount(); $r->renderResponse("tag item " . $r->get('tag_item_id') . " deleted!", false); } else { $r->renderError(401, 'user does not own tag'); } }
public function getTags() { $tags = array(); $tag_item = new Dase_DBO_TagItem($this->db); $tag_item->item_id = $this->id; foreach ($tag_item->find() as $ti) { $tags[] = $ti->getTag(); } if (count($tags)) { return $tags; } else { return false; } }
function removeItem($item_unique, $update_count = false) { $tag_item = new Dase_DBO_TagItem($this->db); $tag_item->tag_id = $this->id; list($coll, $sernum) = explode('/', $item_unique); //todo: compat $item = Dase_DBO_Item::get($this->db, $coll, $sernum); $tag_item->item_id = $item->id; $tag_item->p_collection_ascii_id = $coll; $tag_item->p_serial_number = $sernum; if ($tag_item->findOne()) { $log_text = "removing {$item_unique} from set {$this->eid}/{$this->ascii_id}"; Dase_Log::info(LOG_FILE, $log_text); $tag_item->delete(); //this is too expensive when many items are being removed in one request if ($update_count) { $this->updateItemCount(); } } }
<?php include 'config.php'; //this script replaces characters which are valid utf8 //but invalid in XML (there are just a few) $tis = new Dase_DBO_TagItem($db); foreach ($tis->find() as $ti) { if ($ti->annotation != strip_invalid_xml_chars2($ti->annotation)) { $tag = $ti->getTag(); print $tag->ascii_id . "\n"; //$ti->annotation = strip_invalid_xml_chars2($ti->annotation); //$ti->update(); file_put_contents('bad', $ti->annotation); print "found bad xml in tag_item {$ti->id}\n"; print $tag->dase_user_id . "\n"; //print $ti->annotation."\n"; } } function strip_invalid_xml_chars2($in) { $out = ""; $length = strlen($in); for ($i = 0; $i < $length; $i++) { $current = ord($in[$i]); if ($current == 0x9 || $current == 0xa || $current == 0xd || $current >= 0x20 && $current <= 0xd7ff || $current >= 0xe000 && $current <= 0xfffd || $current >= 0x10000 && $current <= 0x10ffff) { $out .= chr($current); } else { print $current . "\n"; $out .= " "; } }
public function dumpSetsXml() { $prefix = $this->db->table_prefix; $writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent(true); $writer->startDocument('1.0', 'UTF-8'); $writer->startElement('user_sets'); $writer->writeAttribute('archived_date', date(DATE_ATOM)); $writer->writeAttribute('eid', $this->eid); $writer->writeAttribute('name', $this->name); $sets = new Dase_DBO_Tag($this->db); $sets->dase_user_id = $this->id; $total_sets = $sets->findCount(); $set_count = 0; foreach ($sets->find() as $set) { $set = clone $set; $tag_items = new Dase_DBO_TagItem($this->db); $tag_items->tag_id = $set->id; if ($tag_items->findCount()) { $set_count++; $set = clone $set; $writer->startElement('set'); $writer->writeAttribute('ascii_id', $set->ascii_id); $writer->writeAttribute('name', $set->name); $writer->writeAttribute('eid', $set->eid); $writer->writeAttribute('created', $set->created); $writer->writeAttribute('updated', $set->updated); $writer->writeAttribute('visibility', $set->visibility); $writer->writeAttribute('item_count', $set->item_count); if ($set->description) { $writer->startElement('description'); $writer->text($set->description); $writer->endElement(); } foreach ($set->getCategories() as $cat) { $cat = clone $cat; $writer->startElement('category'); $writer->writeAttribute('scheme', $cat->scheme); $writer->writeAttribute('term', $cat->term); $writer->writeAttribute('label', $cat->label); $writer->endElement(); } $item_count = 0; foreach ($set->getTagItems() as $tag_item) { $tag_item = clone $tag_item; $item_count++; $writer->startElement('item'); $writer->writeAttribute('sort_order', $tag_item->sort_order); $writer->writeAttribute('item_unique', $tag_item->p_collection_ascii_id . '/' . $tag_item->p_serial_number); if ($tag_item->annotation) { $writer->startElement('annotation'); $writer->text($tag_item->annotation); $writer->endElement(); } $writer->endElement(); error_log('user ' . $this->eid . ' set number ' . $set_count . ' of ' . $total_sets . ' item number ' . $item_count); } $writer->endElement(); } } $writer->endDocument(); if ($set_count) { return $writer->flush(true); } else { return false; } }
public function putAnnotation($r) { $u = $r->getUser(); $tag = $this->tag; if (!$u->can('write', $tag)) { $r->renderError(401); } $tag_item = new Dase_DBO_TagItem($this->db); $tag_item->load($r->get('tag_item_id')); $tag_item->annotation = Dase_Util::stripInvalidXmlChars($r->getBody()); $tag_item->updated = date(DATE_ATOM); $tag_item->update(); $r->renderResponse($tag_item->annotation); }