Inheritance: extends ElggFile
Beispiel #1
0
/**
 * Listen to entity ownership changes and update icon ownership by moving
 * icons to their new owner's directory on filestore.
 *
 * This will only transfer icons that have a custom location on filestore
 * and are owned by the entity's owner (instead of the entity itself).
 * Even though core icon service does not store icons in the entity's owner
 * directory, there are plugins that do (e.g. file plugin) - this handler
 * helps such plugins avoid ownership mismatch.
 *
 * @param string     $event  "update:after"
 * @param string     $type   "object"|"group"
 * @param ElggObject $entity Entity
 * @return void
 * @access private
 */
function _elgg_filestore_move_icons($event, $type, $entity)
{
    $original_attributes = $entity->getOriginalAttributes();
    if (empty($original_attributes['owner_guid'])) {
        return;
    }
    $previous_owner_guid = $original_attributes['owner_guid'];
    $new_owner_guid = $entity->owner_guid;
    $sizes = elgg_get_icon_sizes($entity->getType(), $entity->getSubtype());
    foreach ($sizes as $size => $opts) {
        $new_icon = $entity->getIcon($size);
        if ($new_icon->owner_guid == $entity->guid) {
            // we do not need to update icons that are owned by the entity itself
            continue;
        }
        if ($new_icon->owner_guid != $new_owner_guid) {
            // a plugin implements some custom logic
            continue;
        }
        $old_icon = new \ElggIcon();
        $old_icon->owner_guid = $previous_owner_guid;
        $old_icon->setFilename($new_icon->getFilename());
        if (!$old_icon->exists()) {
            // there is no icon to move
            continue;
        }
        if ($new_icon->exists()) {
            // there is already a new icon
            // just removing the old one
            $old_icon->delete();
            elgg_log("Entity {$entity->guid} has been transferred to a new owner but an icon was left behind under {$old_icon->getFilenameOnFilestore()}. " . "Old icon has been deleted", 'NOTICE');
            continue;
        }
        $old_icon->transfer($new_icon->owner_guid, $new_icon->getFilename());
        elgg_log("Entity {$entity->guid} has been transferred to a new owner. " . "Icon was moved from {$old_icon->getFilenameOnFilestore()} to {$new_icon->getFilenameOnFilestore()}.", 'NOTICE');
    }
}
Beispiel #2
0
/**
 * Set user icon file
 *
 * @param string    $hook   "entity:icon:file"
 * @param string    $type   "user"
 * @param \ElggIcon $icon   Icon file
 * @param array     $params Hook params
 * @return \ElggIcon
 */
function _elgg_user_set_icon_file($hook, $type, $icon, $params)
{
    $entity = elgg_extract('entity', $params);
    $size = elgg_extract('size', $params, 'medium');
    $icon->owner_guid = $entity->guid;
    $icon->setFilename("profile/{$entity->guid}{$size}.jpg");
    return $icon;
}
Beispiel #3
0
/**
 * Set custom file thumbnail location
 *
 * @param string     $hook   "entity:icon:file"
 * @param string     $type   "object"
 * @param \ElggIcon  $icon   Icon file
 * @param array      $params Hook params
 * @return \ElggIcon
 */
function file_set_icon_file($hook, $type, $icon, $params)
{
    $entity = elgg_extract('entity', $params);
    $size = elgg_extract('size', $params, 'large');
    if (!elgg_instanceof($entity, 'object', 'file')) {
        return;
    }
    switch ($size) {
        case 'small':
            $filename_prefix = 'thumb';
            $metadata_name = 'thumbnail';
            break;
        case 'medium':
            $filename_prefix = 'smallthumb';
            $metadata_name = 'smallthumb';
            break;
        case 'large':
            $filename_prefix = 'largethumb';
            $metadata_name = 'largethumb';
            break;
        default:
            $filename_prefix = "{$size}thumb";
            $metadata_name = $filename_prefix;
            break;
    }
    $icon->owner_guid = $entity->owner_guid;
    if (isset($entity->{$metadata_name})) {
        $icon->setFilename($entity->{$metadata_name});
    } else {
        $filename = pathinfo($entity->getFilenameOnFilestore(), PATHINFO_FILENAME);
        $filename = "file/{$filename_prefix}{$filename}.jpg";
        $icon->setFilename($filename);
    }
    return $icon;
}