function create_project()
{
    $creator_account = current_account();
    if ($creator_account == -1) {
        return;
    }
    $sql = "INSERT INTO project_head (project, owner)";
    $sql .= "VALUES (null, {$creator_account});";
    $result = query($sql);
    //TODO: verify the above sql worked
    if (!$result) {
        echo '{"result": "create-project-success"}';
        return;
    }
    $last_id = last_insert_id();
    //TODO: get the created project number from the above sql somehow
    $time = time();
    $project_name = 'New Project ' . $time;
    $project_url = name_to_url_name($project_name);
    $default_spec = "docs.google.com/project-spec-here";
    $default_imglink = "https://picjumbo.imgix.net/HNCK0852.jpg";
    $sql2 = "INSERT INTO project_info (project, name, url_name, spec_link, img_link, created, modified)";
    $sql2 .= "VALUES ({$last_id}, '{$project_name}', '{$project_url}', '{$default_spec}', '{$default_imglink}', {$time}, {$time})";
    $result2 = query($sql2);
    if (!$result2) {
        //TODO: if the project_info insert fails, delete  the project_head entry
        echo '{"result": "create-project-success"}';
        return;
    }
    echo '{"result": "create-project-success", "project_url_name": "' . $project_url . '"}';
}
Beispiel #2
0
function import_account(&$a, $file)
{
    logger("Start user import from " . $file['tmp_name']);
    /*
     STEPS
     1. checks
     2. replace old baseurl with new baseurl
     3. import data (look at user id and contacts id)
     4. archive non-dfrn contacts
     5. send message to dfrn contacts
    */
    $account = json_decode(file_get_contents($file['tmp_name']), true);
    if ($account === null) {
        notice(t("Error decoding account file"));
        return;
    }
    if (!x($account, 'version')) {
        notice(t("Error! No version data in file! This is not a Friendica account file?"));
        return;
    }
    /*
    // this is not required as we remove columns in json not in current db schema
    if ($account['schema'] != DB_UPDATE_VERSION) {
    	notice(t("Error! I can't import this file: DB schema version is not compatible."));
    	return;
    }
    */
    // check for username
    $r = q("SELECT uid FROM user WHERE nickname='%s'", $account['user']['nickname']);
    if ($r === false) {
        logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
        notice(t('Error! Cannot check nickname'));
        return;
    }
    if (count($r) > 0) {
        notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
        return;
    }
    // check if username matches deleted account
    $r = q("SELECT id FROM userd WHERE username='******'", $account['user']['nickname']);
    if ($r === false) {
        logger("uimport:check nickname : ERROR : " . last_error(), LOGGER_NORMAL);
        notice(t('Error! Cannot check nickname'));
        return;
    }
    if (count($r) > 0) {
        notice(sprintf(t("User '%s' already exists on this server!"), $account['user']['nickname']));
        return;
    }
    $oldbaseurl = $account['baseurl'];
    $newbaseurl = $a->get_baseurl();
    $olduid = $account['user']['uid'];
    unset($account['user']['uid']);
    unset($account['user']['account_expired']);
    unset($account['user']['account_expires_on']);
    unset($account['user']['expire_notification_sent']);
    foreach ($account['user'] as $k => &$v) {
        $v = str_replace($oldbaseurl, $newbaseurl, $v);
    }
    // import user
    $r = db_import_assoc('user', $account['user']);
    if ($r === false) {
        //echo "<pre>"; var_dump($r, $query, mysql_error()); killme();
        logger("uimport:insert user : ERROR : " . last_error(), LOGGER_NORMAL);
        notice(t("User creation error"));
        return;
    }
    $newuid = last_insert_id();
    //~ $newuid = 1;
    foreach ($account['profile'] as &$profile) {
        foreach ($profile as $k => &$v) {
            $v = str_replace($oldbaseurl, $newbaseurl, $v);
            foreach (array("profile", "avatar") as $k) {
                $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
            }
        }
        $profile['uid'] = $newuid;
        $r = db_import_assoc('profile', $profile);
        if ($r === false) {
            logger("uimport:insert profile " . $profile['profile-name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
            info(t("User profile creation error"));
            import_cleanup($newuid);
            return;
        }
    }
    $errorcount = 0;
    foreach ($account['contact'] as &$contact) {
        if ($contact['uid'] == $olduid && $contact['self'] == '1') {
            foreach ($contact as $k => &$v) {
                $v = str_replace($oldbaseurl, $newbaseurl, $v);
                foreach (array("profile", "avatar", "micro") as $k) {
                    $v = str_replace($oldbaseurl . "/photo/" . $k . "/" . $olduid . ".jpg", $newbaseurl . "/photo/" . $k . "/" . $newuid . ".jpg", $v);
                }
            }
        }
        if ($contact['uid'] == $olduid && $contact['self'] == '0') {
            // set contacts 'avatar-date' to "0000-00-00 00:00:00" to let poller to update urls
            $contact["avatar-date"] = "0000-00-00 00:00:00";
            switch ($contact['network']) {
                case NETWORK_DFRN:
                    //  send relocate message (below)
                    break;
                case NETWORK_ZOT:
                    // TODO handle zot network
                    break;
                case NETWORK_MAIL2:
                    // TODO ?
                    break;
                case NETWORK_FEED:
                case NETWORK_MAIL:
                    // Nothing to do
                    break;
                default:
                    // archive other contacts
                    $contact['archive'] = "1";
            }
        }
        $contact['uid'] = $newuid;
        $r = db_import_assoc('contact', $contact);
        if ($r === false) {
            logger("uimport:insert contact " . $contact['nick'] . "," . $contact['network'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
            $errorcount++;
        } else {
            $contact['newid'] = last_insert_id();
        }
    }
    if ($errorcount > 0) {
        notice(sprintf(tt("%d contact not imported", "%d contacts not imported", $errorcount), $errorcount));
    }
    foreach ($account['group'] as &$group) {
        $group['uid'] = $newuid;
        $r = db_import_assoc('group', $group);
        if ($r === false) {
            logger("uimport:insert group " . $group['name'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
        } else {
            $group['newid'] = last_insert_id();
        }
    }
    foreach ($account['group_member'] as &$group_member) {
        $group_member['uid'] = $newuid;
        $import = 0;
        foreach ($account['group'] as $group) {
            if ($group['id'] == $group_member['gid'] && isset($group['newid'])) {
                $group_member['gid'] = $group['newid'];
                $import++;
                break;
            }
        }
        foreach ($account['contact'] as $contact) {
            if ($contact['id'] == $group_member['contact-id'] && isset($contact['newid'])) {
                $group_member['contact-id'] = $contact['newid'];
                $import++;
                break;
            }
        }
        if ($import == 2) {
            $r = db_import_assoc('group_member', $group_member);
            if ($r === false) {
                logger("uimport:insert group member " . $group_member['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
            }
        }
    }
    foreach ($account['photo'] as &$photo) {
        $photo['uid'] = $newuid;
        $photo['data'] = hex2bin($photo['data']);
        $p = new Photo($photo['data'], $photo['type']);
        $r = $p->store($photo['uid'], $photo['contact-id'], $photo['resource-id'], $photo['filename'], $photo['album'], $photo['scale'], $photo['profile'], $photo['allow_cid'], $photo['allow_gid'], $photo['deny_cid'], $photo['deny_gid']);
        if ($r === false) {
            logger("uimport:insert photo " . $photo['resource-id'] . "," . $photo['scale'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
        }
    }
    foreach ($account['pconfig'] as &$pconfig) {
        $pconfig['uid'] = $newuid;
        $r = db_import_assoc('pconfig', $pconfig);
        if ($r === false) {
            logger("uimport:insert pconfig " . $pconfig['id'] . " : ERROR : " . last_error(), LOGGER_NORMAL);
        }
    }
    // send relocate messages
    proc_run('php', 'include/notifier.php', 'relocate', $newuid);
    info(t("Done. You can now login with your username and password"));
    goaway($a->get_baseurl() . "/login");
}
Beispiel #3
0
function do_insert( $db_conn, $header_insert_stmt, $detail_insert_stmt )
// Perform the inserts contained in $header_insert_stmt and
// $detail_insert_stmt.  That will move data into temporary
// tables (because the INSERTs are formatted that way by
// the caller).

// After the data is in the temp tables, try to insert the temp_header
// table into the production header table.  If successful, not the
// new Seq assigned, and update the temp_detail table to reference
// that value in each record's Contract field.

// Then, attempt to insert the temp_detail records into the
// production detail table.
{
GLOBAL $msg_log;
	if (I_DEBUG) {message_log_append( $msg_log, " begin do_insert" );}
	$success = TRUE;
// Delete all temp_header and temp_detail records
	if ($success) 
	{
		$qry = "DELETE FROM temp_header";
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );	// true if success
		if (!$success)
		{
			message_log_append( $msg_log, "do_insert: delete from temp_header failed: " . mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{
		$qry = "DELETE FROM temp_detail";
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );	// true if success
		if (!$success)
		{
			message_log_append( $msg_log, "do_insert: delete from temp_detail failed: " . mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

// Attempt the temp header insert
	if ($success) 
	{
		$qry = $header_insert_stmt;
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );	// true if success
		if (!$success)
		{
			message_log_append( $msg_log, "do_insert: temp header insert failed: " . mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

// Attempt the temp detail insert
	if ($success) 
	{
		$qry = $detail_insert_stmt;
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );	// true if success
		if (!$success)
		{
			message_log_append( $msg_log, "temp detail insert failed: " . mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

// Attempt to insert temp_header into contract_header
	if ($success) 
	{ // Set $fld_list to the list of fields in table temp_header
		$fld_list = field_list( "temp_header", $db_conn );
		$success = (!is_null( $fld_list ));
		if (!$success)
		{
			message_log_append( $msg_log, "field_list of temp_header failed", MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{
		$success = !is_null( $old_seq = last_insert_id( $db_conn ) );
		if (!$success)
		{
			message_log_append( $msg_log, "do_insert: last_insert_id failed(1)", MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{
//if (I_DEBUG) message_log_append( $msg_log, "do_insert: old_seq = $old_seq" );
		$qry = "INSERT INTO contract_header ( $fld_list ) " .
				"SELECT * FROM temp_header";
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );	// true if success
		if (!$success)
		{
			message_log_append( $msg_log, "contract header insert failed: " . mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{
		$new_seq = last_insert_id( $db_conn );
		$success = (!is_null( $new_seq ) && ($new_seq <> $old_seq));
		if ($success) 
		{
			$seq = $new_seq;
		}
		else 
		{
			message_log_append( $msg_log, "temp detail insert failed: " . 	mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

// Attempt to update the temp_detail records with the new $seq number
	if ($success) 
	{
		if (I_DEBUG) 
		{
			message_log_append( $msg_log, "do_insert: new contract_header seq = $seq" );
		}
		$qry = "UPDATE temp_detail SET Contract = $seq";
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );
		if (!$success)
		{
			message_log_append( $msg_log, mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{ // Set $fld_list to the list of fields in table temp_detail
		$fld_list = field_list( "temp_detail", $db_conn );
		$success = ($fld_list != NULL);
		if (!$success)
		{
			message_log_append( $msg_log, "field_list of temp_detail failed", MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{ // Set $seqn to the value of LAST_INSERT_ID()
		$old_seq = last_insert_id( $db_conn );
//if (I_DEBUG) message_log_append( $msg_log, "detail: old_seq = $old_seq" );
		$success = (!is_null( $old_seq ));
		if (!$success)
		{
			message_log_append( $msg_log, "do_insert: last_insert_id failed(2)", MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{ // insert into contract_detail from temp_detail
		$qry = "INSERT INTO contract_detail ( $fld_list ) " . "SELECT * FROM temp_detail";
		if (I_DEBUG) 
		{
			message_log_append( $msg_log, "detail: $qry" );
		}
//pre_echo( $qry );
		$success = mysql_query( $qry, $db_conn );
		if (!$success)
		{
			message_log_append( $msg_log, mysql_error( $db_conn ), MSG_LOG_ERROR );
		}
	} // if success

	if ($success) 
	{ // check to see if LAST_INSERT_ID() changed
		$new_seq = last_insert_id( $db_conn );
		$success = (($new_seq <> $old_seq) && !is_null( $new_seq ));
		if ($success) 
		{
			if (I_DEBUG) 
			{
				message_log_append( $msg_log, "do_insert: success" );
			}
		} 
		else 
		{
			message_log_append( $msg_log, "contract_detail insert failed", MSG_LOG_ERROR );
		}
	} // if success
	return( $success );
} // do_insert
function create_new_blog($projectUrlName)
{
    //TODO: include more error checking
    $currentUser = current_account();
    if ($currentUser == -1) {
        echo '{"result": "not-signed-in"}';
    }
    $projectNum = _getProjectNum($projectUrlName, $currentUser);
    $time = time();
    $blogName = "new blog " . $time;
    $blogUrl = name_to_url_name($blogName);
    $createBlog = "INSERT INTO blog_head values(null, {$projectNum}, '{$blogName}', '{$blogUrl}', {$time})";
    $result = query($createBlog);
    $createdBlog = last_insert_id();
    $createBlogInfo = "INSERT INTO blog_info values({$createdBlog}, 'http://i.imgur.com/WtDPZp7.png', '', {$time})";
    $result2 = query($createBlogInfo);
    $blogTitle = "<p id='blog-title' contenteditable='true'> BlogTitle </p>";
    $createBlogContent = "INSERT INTO blog_contents VALUES({$createdBlog}, \"{$blogTitle}\");";
    $result3 = query($createBlogContent);
    echo '{"result": "create-new-blog-success"}';
}