if (!$user_id) { throw new Exception('Incorrect token'); } } try { switch ($action) { case 'search': if (isset($_GET['all_forms'])) { $all_forms = (bool) $_GET['all_forms']; } else { $all_forms = false; } $answer['answer'] = get_search_results($_GET['query'], !$all_forms); foreach ($answer['answer']['results'] as &$res) { $parts = array(); foreach (get_book_parents($res['book_id'], true) as $p) { $parts[] = $p['title']; } $res['text_fullname'] = join(': ', array_reverse($parts)); } break; case 'login': $user_id = user_check_password($_POST['login'], $_POST['password']); if ($user_id) { $token = remember_user($user_id, false, false); $answer['answer'] = array('user_id' => $user_id, 'token' => $token); } else { $answer['error'] = 'Incorrect login or password'; } break; case 'get_available_morph_tasks':
function get_book_page($book_id, $full = false, $override_hidden = false) { if (!$override_hidden) { check_book_hidden($book_id); } $res = sql_pe("SELECT * FROM `books` WHERE `book_id`=? LIMIT 1", array($book_id)); if (!sizeof($res)) { throw new UnexpectedValueException(); } $out = array('id' => $book_id, 'title' => $res[0]['book_name'], 'select' => get_books_for_select(), 'is_wikinews' => $res[0]['parent_id'] == 56, 'is_chaskor_news' => $res[0]['parent_id'] == 226); get_book_tags($book_id, $out); //sub-books foreach (sql_pe("SELECT book_id, book_name FROM books WHERE parent_id=? ORDER BY book_name", array($book_id)) as $r) { $out['children'][] = array('id' => $r['book_id'], 'title' => $r['book_name']); } //parents $out['parents'] = array_reverse(get_book_parents($book_id)); //sentences if ($full) { $q = "SELECT p.`pos` ppos, par_id, s.sent_id, s.`pos` spos"; if (user_has_permission(PERM_ADDER)) { $q .= ", ss.status"; } $q .= "\nFROM paragraphs p\n LEFT JOIN sentences s\n USING (par_id)\n"; if (user_has_permission(PERM_ADDER)) { $q .= "LEFT JOIN sentence_check ss ON (s.sent_id = ss.sent_id AND ss.status=1 AND ss.user_id=" . $_SESSION['user_id'] . ")\n"; } $q .= "WHERE p.book_id = ?\n ORDER BY p.`pos`, s.`pos`"; $res = sql_pe($q, array($book_id)); $res1 = sql_prepare("SELECT tf_id, tf_text FROM tokens WHERE sent_id=? ORDER BY pos"); foreach ($res as $r) { sql_execute($res1, array($r['sent_id'])); $tokens = array(); while ($r1 = sql_fetch_array($res1)) { $tokens[] = array('text' => $r1['tf_text'], 'id' => $r1['tf_id']); } $new_a = array('id' => $r['sent_id'], 'pos' => $r['spos'], 'tokens' => $tokens); if (user_has_permission(PERM_ADDER)) { $new_a['checked'] = $r['status']; } $out['paragraphs'][$r['ppos']]['sentences'][] = $new_a; $out['paragraphs'][$r['ppos']]['id'] = $r['par_id']; } } else { $res = sql_pe("SELECT p.`pos` ppos, s.sent_id, s.`pos` spos FROM paragraphs p LEFT JOIN sentences s ON (p.par_id = s.par_id) WHERE p.book_id = ? ORDER BY p.`pos`, s.`pos`", array($book_id)); foreach ($res as $r) { $r1 = sql_fetch_array(sql_query("SELECT source, SUBSTRING_INDEX(source, ' ', 6) AS `cnt` FROM sentences WHERE sent_id=" . $r['sent_id'] . " LIMIT 1")); if ($r1['source'] === $r1['cnt']) { $out['paragraphs'][$r['ppos']]['sentences'][] = array('pos' => $r['spos'], 'id' => $r['sent_id'], 'snippet' => $r1['source']); continue; } $snippet = ''; $r1 = sql_fetch_array(sql_query("SELECT SUBSTRING_INDEX(source, ' ', 3) AS `start` FROM sentences WHERE sent_id=" . $r['sent_id'] . " LIMIT 1")); $snippet = $r1['start']; if ($snippet) { $snippet .= '... '; } $r1 = sql_fetch_array(sql_query("SELECT SUBSTRING_INDEX(source, ' ', -3) AS `end` FROM sentences WHERE sent_id=" . $r['sent_id'] . " LIMIT 1")); $snippet .= $r1['end']; $out['paragraphs'][$r['ppos']]['sentences'][] = array('pos' => $r['spos'], 'id' => $r['sent_id'], 'snippet' => $snippet); } } return $out; }