-
Notifications
You must be signed in to change notification settings - Fork 5
/
getdraft.php
84 lines (74 loc) · 2.94 KB
/
getdraft.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
// Copyright: see COPYING
// Authors: see git-blame(1)
include "lib/setup.php";
foreach (array ("variant_impact", "variant_dominance",
"variant_quality", "variant_quality_text",
"summary_short", "summary_long", "talk_text") as $k) {
$fields_allowed[$k] = 1;
}
$response = array();
foreach (explode ("-", $_GET["edit_ids"]) as $edit_id) {
if (!ereg ("^[0-9]+$", $edit_id))
continue;
// Look for drafts ("d") already saved by this user based on the
// given edit and newer ("n") submissions from other users (danger
// of conflict)
$q =& theDb()->query ("SELECT d.*, n.edit_id newer_edit_id, not (d.variant_impact <=> a.variant_impact AND d.variant_dominance <=> a.variant_dominance AND d.variant_quality <=> a.variant_quality AND d.variant_quality_text <=> a.variant_quality_text AND d.summary_short <=> a.summary_short AND d.summary_long <=> a.summary_long AND d.talk_text <=> a.talk_text AND d.article_pmid <=> a.article_pmid) draft_differs
FROM edits a
LEFT JOIN edits d ON d.previous_edit_id=a.edit_id AND d.edit_oid=? AND d.is_draft
LEFT JOIN snap_latest n ON n.variant_id=a.variant_id AND n.article_pmid=a.article_pmid AND n.genome_id=a.genome_id AND n.disease_id=a.disease_id
WHERE a.edit_id=?",
array(getCurrentUser("oid"), $edit_id));
while ($row =& $q->fetchRow()) {
if ($row["edit_id"]) {
if (!$row['draft_differs']) {
// draft saved, but content is identical -- just delete it
theDb()->query ("DELETE FROM edits WHERE edit_id=? AND edit_oid=?",
array($row["edit_id"], getCurrentUser("oid")));
continue;
}
// Existing draft
foreach (array_keys ($fields_allowed) as $field) {
if ($row["disease_id"] > 0 &&
ereg ('^{', $row[$field]) &&
($dict = json_decode ($row["$field"], true))) {
// decode json return and return key/value pairs in separate fields
foreach ($dict as $k => $v) {
$response["saved__{$edit_id}__{$field}__{$k}"] = $v;
$response["preview__{$edit_id}__{$field}__{$k}"] = htmlspecialchars ($v);
}
continue;
}
if ($field == "variant_quality") {
for ($i=0; $i<strlen($row[$field]); $i++) {
$response["saved__${edit_id}__{$field}__{$i}"]
= substr ($row[$field], $i, 1);
$response["preview__${edit_id}__{$field}__{$i}"]
= substr ($row[$field], $i, 1);
}
continue;
}
if ($field == "variant_quality_text") {
$saved = json_decode ($row[$field], true);
$preview = array();
if (is_array ($saved)) {
foreach ($saved as $s) {
$preview[] = editable_quality_preview ($s);
}
}
$response["saved__{$edit_id}__{$field}"] = $saved;
$response["preview__{$edit_id}__{$field}"] = $preview;
continue;
}
$response["saved__${edit_id}__${field}"]
= isset($row[$field]) ? $row[$field] : $row["d.$field"];
$response["preview__${edit_id}__${field}"]
= $gTheTextile->textileRestricted($response["saved__${edit_id}__${field}"]);
}
}
}
}
header ("Content-type: application/json");
print json_encode ($response);
?>