Exemple #1
0
/**
 * Delete entity event
 *
 * @param string     $event  "delete"
 * @param string     $type   "object"|"group"|"user"
 * @param ElggEntity $entity Entity
 * @return void
 */
function elgg_solr_delete_entity($event, $type, $entity)
{
    if (!elgg_instanceof($entity)) {
        return;
    }
    if (!elgg_solr_is_registered_entity_type($entity->type, $entity->getSubtype())) {
        return;
    }
    // if shutdown just do it, otherwise defer
    if ($GLOBALS['shutdown_flag']) {
        $client = elgg_solr_get_client();
        $query = $client->createUpdate();
        $query->addDeleteById($entity->guid);
        $query->addCommit();
        try {
            $client->update($query);
        } catch (Exception $ex) {
            //something went wrong, lets cache the id and try again on cron
            elgg_get_site_entity()->annotate('elgg_solr_delete_cache', $entity->guid, ACCESS_PUBLIC);
            elgg_solr_debug_log($ex->getMessage());
        }
    } else {
        elgg_solr_defer_index_delete($entity->guid);
    }
}
/**
 * Index an Elgg entity
 *
 * @param ElggEntity $entity Entity
 * @return bool
 */
function elgg_solr_add_update(ElggEntity $entity)
{
    if (!elgg_solr_is_registered_entity_type($entity->type, $entity->getSubtype())) {
        return false;
    }
    if ($entity instanceof ElggFile) {
        return elgg_solr_add_update_file($entity);
    }
    $client = elgg_solr_get_client();
    $commit = elgg_get_config('elgg_solr_nocommit') ? false : true;
    $query = $client->createUpdate();
    // add document
    $doc = $query->createDocument();
    $doc = elgg_solr_prepare_entity_doc($doc, $entity);
    if (!$doc) {
        return true;
        // a plugin has stopped the index
    }
    $query->addDocument($doc);
    if ($commit) {
        $query->addCommit($commit);
    }
    // this executes the query and returns the result
    try {
        $client->update($query);
    } catch (Exception $exc) {
        elgg_solr_debug_log($exc->getMessage());
    }
    return true;
}