Ejemplo n.º 1
0
 /**
  * Hook executed before saving url_preview user type value. Checks and removes signature of the $value.
  * If signature is correct, checks current user's access to $value.
  *
  * @param array $userField Array containing parameters of the user field.
  * @param string $value Signed value of the user field.
  * @return int Unsigned value of the user field, or null in case of errors.
  */
 public static function onBeforeSave($userField, $value)
 {
     $imageUrl = null;
     if (strpos($value, ';') !== false) {
         list($value, $imageUrl) = explode(';', $value);
     }
     $signer = new Signer();
     try {
         $value = $signer->unsign($value, UrlPreview::SIGN_SALT);
     } catch (SystemException $e) {
         return null;
     }
     $metadata = UrlMetadataTable::getById($value)->fetch();
     if (!is_array($metadata)) {
         return null;
     }
     if ($metadata['TYPE'] === UrlMetadataTable::TYPE_STATIC) {
         if ($imageUrl && is_array($metadata['EXTRA']['IMAGES']) && in_array($imageUrl, $metadata['EXTRA']['IMAGES'])) {
             UrlPreview::setMetadataImage((int) $value, $imageUrl);
         }
         return $value;
     } else {
         if ($metadata['TYPE'] === UrlMetadataTable::TYPE_DYNAMIC && UrlPreview::checkDynamicPreviewAccess($metadata['URL'])) {
             return $value;
         }
     }
     return null;
 }
Ejemplo n.º 2
0
 /**
  * Fetches and stores metadata for temporary record, created by UrlPreview::reserveIdForUrl. If metadata could
  * not be fetched, deletes record.
  * @param int $id Metadata record's id.
  * @param bool $checkAccess Should method check current user's access to the entity, or not.
  * @return array|false Metadata if fetched, false otherwise.
  */
 public static function resolveTemporaryMetadata($id, $checkAccess = true)
 {
     $metadata = UrlMetadataTable::getById($id)->fetch();
     if (!is_array($metadata)) {
         return false;
     }
     if ($metadata['TYPE'] == UrlMetadataTable::TYPE_TEMPORARY) {
         $metadata['URL'] = static::normalizeUrl($metadata['URL']);
         $metadata = static::fetchUrlMetadata($metadata['URL']);
         if ($metadata === false) {
             UrlMetadataTable::delete($id);
             return false;
         }
         UrlMetadataTable::update($id, $metadata);
         return $metadata;
     } else {
         if ($metadata['TYPE'] == UrlMetadataTable::TYPE_STATIC || $metadata['TYPE'] == UrlMetadataTable::TYPE_FILE) {
             return $metadata;
         } else {
             if ($metadata['TYPE'] == UrlMetadataTable::TYPE_DYNAMIC) {
                 if ($preview = static::getDynamicPreview($metadata['URL'], $checkAccess)) {
                     $metadata['HTML'] = $preview;
                     return $metadata;
                 }
             }
         }
     }
     return false;
 }