Example #1
0
/**
 * Initialize search plugin
 */
function search_init()
{
    global $CONFIG;
    require_once 'search_hooks.php';
    // page handler for search actions and results
    elgg_register_page_handler('search', 'search_page_handler');
    // register some default search hooks
    elgg_register_plugin_hook_handler('search', 'object', 'search_objects_hook');
    elgg_register_plugin_hook_handler('search', 'user', 'search_users_hook');
    elgg_register_plugin_hook_handler('search', 'group', 'search_groups_hook');
    // tags and comments are a bit different.
    // register a search types and a hooks for them.
    elgg_register_plugin_hook_handler('search_types', 'get_types', 'search_custom_types_tags_hook');
    elgg_register_plugin_hook_handler('search', 'tags', 'search_tags_hook');
    elgg_register_plugin_hook_handler('search_types', 'get_types', 'search_custom_types_comments_hook');
    elgg_register_plugin_hook_handler('search', 'comments', 'search_comments_hook');
    // get server min and max allowed chars for ft searching
    $CONFIG->search_info = array();
    // can't use get_data() here because some servers don't have these globals set,
    // which throws a db exception.
    $dblink = get_db_link('read');
    $r = mysql_query('SELECT @@ft_min_word_len as min, @@ft_max_word_len as max', $dblink);
    if ($r && ($word_lens = mysql_fetch_assoc($r))) {
        $CONFIG->search_info['min_chars'] = $word_lens['min'];
        $CONFIG->search_info['max_chars'] = $word_lens['max'];
    } else {
        // uhhh these are good numbers.
        $CONFIG->search_info['min_chars'] = 4;
        $CONFIG->search_info['max_chars'] = 90;
    }
    // add in CSS for search elements
    elgg_extend_view('css/elgg', 'search/css');
    // extend view for elgg topbar search box
    elgg_extend_view('page/elements/header', 'search/header');
}
Example #2
0
/**
 * Returns whether or not the database has been installed
 *
 * @return true|false Whether the database has been installed
 */
function is_db_installed()
{
    global $CONFIG;
    if (isset($CONFIG->db_installed)) {
        return $CONFIG->db_installed;
    }
    if ($dblink = get_db_link('read')) {
        mysql_query("select name from {$CONFIG->dbprefix}datalists limit 1", $dblink);
        if (mysql_errno($dblink) > 0) {
            return false;
        }
    } else {
        return false;
    }
    $CONFIG->db_installed = true;
    // Set flag if db is installed (if false then we want to check every time)
    return true;
}
Example #3
0
 public function syncAnnotations()
 {
     $dblink = get_db_link('read');
     $site = elgg_get_site_entity();
     $result = execute_query('SELECT COUNT(`id`) FROM elgg_annotations', $dblink);
     $row = mysqli_fetch_row($result);
     $total = (int) $row[0];
     $result = execute_query('SELECT `id` FROM elgg_annotations ORDER BY id', $dblink);
     while ($row = mysqli_fetch_row($result)) {
         $ids[] = $row[0];
         if (count($ids) == 50) {
             $this->processItems('annotations', $ids);
             $ids = array();
         }
         $i += 1;
         if ($i % 500 == 0) {
             echo round($i / $total * 100, 2) . "%\r";
         }
     }
     if (count($ids) > 0) {
         $this->processItems('annotations', $ids);
     }
 }
Example #4
0
/**
 * Remove a row from the database.
 *
 * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
 *
 * @param string $query The SQL query to run
 *
 * @return int|false The number of affected rows or false on failure
 * @access private
 */
function delete_data($query)
{
    global $CONFIG, $DB_QUERY_CACHE;
    $query = elgg_format_query($query);
    elgg_log("DB query {$query}", 'NOTICE');
    $dblink = get_db_link('write');
    // Invalidate query cache
    if ($DB_QUERY_CACHE) {
        $DB_QUERY_CACHE->clear();
        elgg_log("Query cache invalidated", 'NOTICE');
    }
    if (execute_query("{$query}", $dblink)) {
        return mysql_affected_rows($dblink);
    }
    return FALSE;
}
Example #5
0
 function test_db_shutdown_links()
 {
     global $DB_DELAYED_QUERIES, $test_results;
     $DB_DELAYED_QUERIES = array();
     function test_delayed_results($results)
     {
         global $test_results;
         $test_results = $results;
     }
     $q = 'SELECT 1 as test';
     $links = array('read', 'write', get_db_link('read'), get_db_link('write'));
     foreach ($links as $link) {
         $DB_DELAYED_QUERIES = array();
         $result = execute_delayed_query($q, $link, 'test_delayed_results');
         $this->assertTrue($result, "Failed with link = {$link}");
         $this->assertEqual(count($DB_DELAYED_QUERIES), 1);
         $this->assertEqual($DB_DELAYED_QUERIES[0]['q'], $q);
         $this->assertEqual($DB_DELAYED_QUERIES[0]['l'], $link);
         $this->assertEqual($DB_DELAYED_QUERIES[0]['h'], 'test_delayed_results');
         db_delayedexecution_shutdown_hook();
         $num_rows = mysql_num_rows($test_results);
         $this->assertEqual($num_rows, 1);
         $row = mysql_fetch_assoc($test_results);
         $this->assertEqual($row['test'], 1);
     }
     // test bad case
     $DB_DELAYED_QUERIES = array();
     $result = execute_delayed_query($q, 'not_a_link', 'test_delayed_results');
     $this->assertFalse($result);
     $this->assertEqual(array(), $DB_DELAYED_QUERIES);
 }
/**
 * Use this function to delete data
 *
 * @param mixed $query The SQL query to run
 * @return int|false Either the number of affected rows, or false on failure
 */
function delete_data($query)
{
    global $CONFIG, $DB_QUERY_CACHE;
    $dblink = get_db_link('write');
    // Invalidate query cache
    if ($DB_QUERY_CACHE) {
        $DB_QUERY_CACHE->clear();
    }
    if (isset($CONFIG->debug) && $CONFIG->debug == true) {
        error_log("Query cache invalidated");
    }
    if (execute_query("{$query}", $dblink)) {
        return mysql_affected_rows($dblink);
    }
    return false;
}
Example #7
0
/**
 * Check that installation has completed and the database is populated.
 *
 * @throws InstallationException|DatabaseException
 * @return void
 * @access private
 */
function verify_installation()
{
    global $CONFIG;
    if (isset($CONFIG->installed)) {
        return;
    }
    try {
        $dblink = get_db_link('read');
        if (!$dblink) {
            throw new DatabaseException();
        }
        mysql_query("SELECT value FROM {$CONFIG->dbprefix}datalists WHERE name = 'installed'", $dblink);
        if (mysql_errno($dblink) > 0) {
            throw new DatabaseException();
        }
        $CONFIG->installed = true;
    } catch (DatabaseException $e) {
        throw new InstallationException(elgg_echo('InstallationException:SiteNotInstalled'));
    }
}
Example #8
0
/**
 * Save mail callback
 * Accepts an email received from a client during the DATA command.
 * This email is processed, the recipient host is verified, the body is
 * decoded, then saved to the database.
 * This is an example save mail function.
 * Of course, yours can be better! Eg. add buffered writes, place email on message queue, encryption, etc
 *
 * @param string $email
 * @param        $rcpt_to
 * @param        $helo
 * @param        $helo_ip
 *
 * @return array, with the following elements array($hash, $recipient)
 * where the $hash is a unique id for this email.
 */
function my_save_email($email, $rcpt_to, $helo, $helo_ip)
{
    global $GM_ERROR;
    $mimemail = null;
    $hash = '';
    $email .= "\r\n";
    list($to, $from, $subject) = get_email_headers($email, array('To', 'From', 'Subject'));
    $rcpt_to = extract_rcpt_email($rcpt_to);
    $from = extract_email($from);
    list($mail_user, $mail_host) = explode('@', $rcpt_to);
    if (is_host_allowed($mail_host)) {
        $db = get_db_link();
        if ($db === false) {
            // could not get a db connection
            $GM_ERROR = 'could not get a db connection';
            return array(false, false);
        }
        $to = $mail_user . '@' . GM_PRIMARY_MAIL_HOST;
        // change it to the primary host
        if (GSMTP_VERIFY_USERS) {
            // Here we can verify that the recipient is actually in the database.
            // Note that guerrillamail.com does not do this - you can send email
            // to a non-existing email address, and set to this email later.
            // just an example:
            if (array_pop(explode('@', $to)) !== 'sharklasers.com') {
                // check the user against our user database
                $user = array_shift(explode('@', $to));
                $sql = "SELECT * FROM `gm2_address` WHERE `address_email`=" . $db->quote($user . '@guerrillamailblock.com') . " ";
                $stmt = $db->query($sql);
                if ($stmt->rowCount() == 0) {
                    $GM_ERROR = 'could not verify user';
                    return false;
                    // no such address
                }
            }
        }
        $hash = md5($to . $from . $subject . microtime());
        // add 'received' headers
        $add_head = '';
        $add_head .= "Delivered-To: " . $to . "\r\n";
        $add_head .= "Received: from " . $helo . " (" . $helo . "  [" . $helo_ip . "])\r\n";
        $add_head .= "\tby " . GSMTP_HOST_NAME . " with SMTP id " . $hash . "@" . GSMTP_HOST_NAME . ";\r\n";
        $add_head .= "\t" . gmdate('r') . "\r\n";
        $email = $add_head . $email;
        $body = 'gzencode';
        $charset = '';
        $has_attach = '';
        $content_type = '';
        $email = gzcompress($email, 6);
        $redis = getRedis();
        if (is_object($redis)) {
            // send it of to Redis
            try {
                if ($redis->setex($hash, 3600, $email) === true) {
                    $body = 'redis';
                    $email = '';
                    //log_line("saved to redis $hash $to");
                } else {
                    log_line("save failed");
                }
            } catch (\RedisException $e) {
                log_line("redis exeption" . var_dump($e, true));
            }
        } else {
            log_line("no redis for you\n");
        }
        $sql = "INSERT INTO " . GM_MAIL_TABLE . " (\n                `date`,\n                `to`,\n                `from`,\n                `subject`,\n                `body`,\n                `charset`,\n                `mail`,\n                `spam_score`,\n                `hash`,\n                `content_type`,\n                `recipient`,\n                `has_attach`,\n                `ip_addr`\n            )\n            VALUES (\n                '" . gmdate('Y-m-d H:i:s') . "',\n                " . $db->quote($to) . ",\n                " . $db->quote($from) . ",\n                " . $db->quote($subject) . ",\n                " . $db->quote($body) . ",\n                " . $db->quote($charset) . ",\n                " . $db->quote($email) . ",\n                0 " . ",\n                " . $db->quote($hash) . ",\n                " . $db->quote($content_type) . ",\n                " . $db->quote($to) . ",\n                " . $db->quote($has_attach) . ",\n                " . $db->quote($helo_ip) . "\n            ) ";
        try {
            $db->query($sql);
            $id = $db->lastInsertId();
            if ($id) {
                $sql = "UPDATE\n                            gm2_setting\n                       SET\n                            `setting_value` = `setting_value`+1\n                       WHERE\n                            `setting_name`='received_emails'\n                            LIMIT 1";
                $db->query($sql);
            }
        } catch (\PDOException $e) {
            $GM_ERROR = 'save error ' . $e->getMessage();
            log_line('Failed to save email From:' . $from . ' To:' . $to . ' ' . $e->getMessage() . ' ' . $sql, 1);
        }
    } else {
        $GM_ERROR = " -{$mail_host}- not in allowed hosts:" . $mail_host . " ";
    }
    return array($hash, $to);
}
Example #9
0
/**
 * Remove data from the database.
 *
 * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
 *
 * @param string $query The SQL query to run
 *
 * @return int|false The number of affected rows or false on failure
 * @access private
 */
function delete_data($query)
{
    elgg_log("DB query {$query}", 'NOTICE');
    $dblink = get_db_link('write');
    _elgg_invalidate_query_cache();
    if (execute_query("{$query}", $dblink)) {
        return mysql_affected_rows($dblink);
    }
    return FALSE;
}
Example #10
0
/**
 * Remove a row from the database.
 *
 * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
 *
 * @param string $query The SQL query to run
 *
 * @return int|false The number of affected rows or false on failure
 * @access private
 */
function delete_data($query)
{
    global $DB_QUERY_CACHE, $DB_QUERY_CACHE_COUNT;
    elgg_log("DB query {$query}", 'NOTICE');
    $dblink = get_db_link('write');
    // Invalidate query cache
    if ($DB_QUERY_CACHE) {
        /* @var ElggStaticVariableCache $DB_QUERY_CACHE */
        $DB_QUERY_CACHE->clear();
        $DB_QUERY_CACHE_COUNT = 0;
        elgg_log("Query cache invalidated", 'NOTICE');
    }
    if (execute_query("{$query}", $dblink)) {
        return mysql_affected_rows($dblink);
    }
    return FALSE;
}