コード例 #1
0
ファイル: tag.php プロジェクト: josf/folkso
/**
 * POST, res, target 
 * 
 * Retags all the tagevents tagged by "source" as "target", then
 * deletes "source".
 *
 * Returns 204 on success, 404 on missing tags.
 * 
 */
function tagMerge(folksoQuery $q, folksoDBconnect $dbc, folksoSession $fks)
{
    $r = new folksoResponse();
    $u = $fks->userSession(null, 'folkso', 'redac');
    if (!$u instanceof folksoUser || !$u->checkUserRight('folkso', 'redac')) {
        return $r->unAuthorized($u);
    }
    try {
        $i = new folksoDBinteract($dbc);
        /* build query. all the funny quote marks are there because the
           stored procedure 'tagmerge' needs 4 arguments to distinguish
           between numeric args and non numeric args*/
        $source_part = '';
        if (is_numeric($q->tag)) {
            $source_part = $q->tag . ", ''";
        } else {
            $source_part = "'', '" . $i->dbquote($q->tag) . "'";
        }
        $target_part = '';
        if (is_numeric($q->get_param('target'))) {
            $target_part = $q->get_param('target') . ", ''";
        } else {
            $target_part = "'', '" . $i->dbquote($q->get_param('target')) . "'";
        }
        $i->query("CALL TAGMERGE({$source_part}, {$target_part})");
    } catch (dbException $e) {
        return $r->handleDBexception($e);
    }
    $row = $i->result->fetch_object();
    $newid = $row->newid;
    switch ($row->status) {
        case 'OK':
            $r->setOk(204, 'Merge successful');
            $r->t($i->first_val('status'));
            $r->addHeader('X-Folksonomie-TargetId: ' . $newid);
            break;
        case 'NOTARGET':
            $r->setError(404, 'Invalid target tag', $status . $q->get_param('target') . " is not present in the database. Merge not accomplished.");
            break;
        case 'NOSOURCE':
            $r->setError(404, 'Invalid source tag', $q->res . " is not present in the database. Merge not accomplished.");
            break;
        default:
            $r->setError(500, 'Strange server error', "fv: " . $status . 'This should not have happened.' . $row->status);
    }
    return $r;
}