private function load_reviewer_preferences() { global $Conf; $this->allReviewerPreference = Dbl::fetch_value("select " . $Conf->query_all_reviewer_preference() . " from PaperReviewPreference where paperId={$this->paperId}"); $this->_prefs_array = null; }
static function settaganno_api($user, $qreq, $prow) { global $Conf; $tagger = new Tagger($user); if (!($tag = $tagger->check($qreq->tag, Tagger::NOVALUE))) { json_exit(["ok" => false, "error" => $tagger->error_html]); } if (!$user->can_change_tag_anno($tag)) { json_exit(["ok" => false, "error" => "Permission error."]); } if (!isset($qreq->anno) || ($reqanno = json_decode($qreq->anno)) === false || !is_object($reqanno) && !is_array($reqanno)) { json_exit(["ok" => false, "error" => "Bad request."]); } $q = $qv = $errors = $errf = $inserts = []; $next_annoid = Dbl::fetch_value("select greatest(coalesce(max(annoId),0),0)+1 from PaperTagAnno where tag=?", $tag); // parse updates foreach (is_object($reqanno) ? [$reqanno] : $reqanno as $anno) { if (!isset($anno->annoid) || !is_int($anno->annoid) && !preg_match('/^n/', $anno->annoid)) { json_exit(["ok" => false, "error" => "Bad request."]); } if (isset($anno->deleted) && $anno->deleted) { if (is_int($anno->annoid)) { $q[] = "delete from PaperTagAnno where tag=? and annoId=?"; array_push($qv, $tag, $anno->annoid); } continue; } if (is_int($anno->annoid)) { $annoid = $anno->annoid; } else { $annoid = $next_annoid; ++$next_annoid; $q[] = "insert into PaperTagAnno (tag,annoId) values (?,?)"; array_push($qv, $tag, $annoid); } if (isset($anno->heading)) { $q[] = "update PaperTagAnno set heading=? where tag=? and annoId=?"; array_push($qv, $anno->heading, $tag, $annoid); } if (isset($anno->tagval)) { $tagval = trim($anno->tagval); if ($tagval === "") { $tagval = "0"; } if (is_numeric($tagval)) { $q[] = "update PaperTagAnno set tagIndex=? where tag=? and annoId=?"; array_push($qv, floatval($tagval), $tag, $annoid); } else { $errf["tagval_{$anno->annoid}"] = true; $errors[] = "Tag value should be a number."; } } } // return error if any if (!empty($errors)) { json_exit(["ok" => false, "error" => join("<br />", $errors), "errf" => $errf]); } // apply changes if (!empty($q)) { $mresult = Dbl::multi_qe_apply(join(";", $q), $qv); while ($result = $mresult->next()) { Dbl::free($result); } } // return results self::taganno_api($user, $qreq, $prow); }
function update_document_metadata($doc, $delta) { if ($doc->paperStorageId <= 1) { return false; } while (1) { $old_str = isset($doc->infoJson_str) ? $doc->infoJson_str : null; $metadata = null; if (is_string($old_str)) { $metadata = json_decode($old_str); } $metadata = is_object($metadata) ? $metadata : (object) []; foreach ($delta as $k => $v) { if ($v === null) { unset($metadata->{$v}); } else { $metadata->{$k} = $v; } } $metadata_str = count(get_object_vars($metadata)) ? json_encode($metadata) : null; $ijq = isset($old_str) ? "=" : " is "; $result = Dbl::qe("update PaperStorage set infoJson=? where paperStorageId=? and infoJson{$ijq}?", $metadata_str, $doc->paperStorageId, $old_str); if ($result->affected_rows != 0) { break; } $doc->infoJson_str = Dbl::fetch_value("select infoJson from PaperStorage where paperStorageId=?", $doc->paperStorageId); } $doc->infoJson_str = $metadata_str; $doc->infoJson = $metadata; return true; }
function fetch_value() { return Dbl::fetch_value(Dbl::do_query_on($this->dblink, func_get_args(), Dbl::F_ERROR)); }