Esempio n. 1
0
 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');
     }
 }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
 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 .= " ";
        }
    }
Esempio n. 5
0
 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;
     }
 }
Esempio n. 6
0
 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);
 }