예제 #1
0
/**
 * Bookmark family tree page
 *
 * @param unknown_type $args user, name, ns, title
 * @return FTE_SUCCESS, FTE_INVALID_ARG, FTE_NOT_LOGGED_IN, FTE_NOT_AUTHORIZED, FTE_NOT_FOUND, FTE_DUP_KEY, FTE_DB_ERROR
 */
function wfSetPrimaryFamilyTreePage($args)
{
    global $wgAjaxCachePolicy;
    // set cache policy
    $wgAjaxCachePolicy->setPolicy(0);
    $ns = '';
    $titleString = '';
    // validate args
    $args = AjaxUtil::getArgs($args);
    $status = ftValidateUpdateFamilyTreePageArgs($args);
    if ($status == FTE_SUCCESS) {
        // get tree id
        $treeId = 0;
        $status = ftGetTreeId($args['user'], $args['name'], $treeId);
    }
    if ($status == FTE_SUCCESS) {
        // get page
        $ns = $args['ns'];
        $titleString = $args['title'];
        $title = Title::newFromText($titleString, $ns);
        if (!$title) {
            $status = FTE_INVALID_ARG;
        }
    }
    if ($status == FTE_SUCCESS) {
        $dbw =& wfGetDB(DB_MASTER);
        $dbw->ignoreErrors(true);
        $dbw->begin();
        $dbw->update('familytree', array('ft_primary_namespace' => $title->getNamespace(), 'ft_primary_title' => $title->getDBkey()), array('ft_tree_id' => $treeId));
        FamilyTreeUtil::deleteFamilyTreesCache($args['user']);
        $errno = $dbw->lastErrno();
        if ($errno > 0) {
            $status = FTE_DB_ERROR;
        }
        if ($status == FTE_SUCCESS) {
            $dbw->commit();
        } else {
            $dbw->rollback();
        }
    }
    // return status
    $ns = @$args['ns'];
    $titleString = StructuredData::escapeXml(@$args['title']);
    return "<setprimary status=\"{$status}\" ns=\"{$ns}\" title=\"{$titleString}\"></setprimary>";
}
예제 #2
0
 public static function deleteFamilyTree($db, $userName, $treeName, $delPages)
 {
     global $wgUser;
     if ($wgUser->isBlocked() || wfReadOnly()) {
         return FTE_NOT_AUTHORIZED;
     }
     $status = FTE_SUCCESS;
     $treeId = $db->selectField('familytree', 'ft_tree_id', array('ft_user' => $userName, 'ft_name' => $treeName));
     $errno = $db->lastErrno();
     if ($errno > 0) {
         $status = FTE_DB_ERROR;
     } else {
         if ($treeId === false) {
             $status = FTE_NOT_FOUND;
         } else {
             // set up delete job (the delete job should also remove familytree_page/data/gedcom eventually)
             $job = new DeleteFamilyTreeJob(array('tree_id' => $treeId, 'user' => $userName, 'delete_pages' => $delPages ? '1' : '0'));
             $job->insert();
             $errno = $db->lastErrno();
             if ($errno > 0) {
                 $status = FTE_DB_ERROR;
             }
         }
     }
     if ($status == FTE_SUCCESS) {
         // remove familytree
         $db->delete('familytree', array('ft_tree_id' => $treeId));
         FamilyTreeUtil::deleteFamilyTreesCache($userName);
         $errno = $db->lastErrno();
         if ($errno > 0) {
             $status = FTE_DB_ERROR;
         }
     }
     // purge user page
     StructuredData::purgeTitle(Title::makeTitle(NS_USER, $userName));
     return $status;
 }