public function has_access_to_subdef(record_Interface $record, $subdef_name) { if ($subdef_name == 'thumbnail') { return true; } if ($record->is_grouping()) { return true; } try { $subdef_class = $record->get_databox()->get_subdef_structure()->get_subdef($record->get_type(), $subdef_name)->get_class(); } catch (\Exception $e) { return false; } $granted = false; if ($subdef_class == databox_subdef::CLASS_THUMBNAIL) { $granted = true; } elseif ($subdef_class == databox_subdef::CLASS_PREVIEW && $this->has_right_on_base($record->get_base_id(), 'candwnldpreview')) { $granted = true; } elseif ($subdef_class == databox_subdef::CLASS_PREVIEW && $this->has_preview_grant($record)) { $granted = true; } elseif ($subdef_class == databox_subdef::CLASS_DOCUMENT && $this->has_right_on_base($record->get_base_id(), 'candwnldhd')) { $granted = true; } elseif ($subdef_class == databox_subdef::CLASS_DOCUMENT && $this->has_hd_grant($record)) { $granted = true; } if (false === $granted && $this->app['repo.feed-items']->isRecordInPublicFeed($this->app, $record->get_sbas_id(), $record->get_record_id())) { $granted = true; } return $granted; }
public static function create(Application $app, record_Interface $record, $name, MediaInterface $media) { $databox = $record->get_databox(); $connbas = $databox->get_connection(); $path = $media->getFile()->getPath(); $newname = $media->getFile()->getFilename(); $params = [':path' => $path, ':file' => $newname, ':width' => 0, ':height' => 0, ':mime' => $media->getFile()->getMimeType(), ':size' => $media->getFile()->getSize(), ':dispatched' => 1]; if (method_exists($media, 'getWidth') && null !== $media->getWidth()) { $params[':width'] = $media->getWidth(); } if (method_exists($media, 'getHeight') && null !== $media->getHeight()) { $params[':height'] = $media->getHeight(); } try { $sql = 'SELECT subdef_id FROM subdef WHERE record_id = :record_id AND name = :name'; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $record->get_record_id(), ':name' => $name]); $row = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); if (!$row) { throw new \Exception_Media_SubdefNotFound('Require the real one'); } $sql = "UPDATE subdef\n SET path = :path, file = :file\n , width = :width , height = :height, mime = :mime\n , size = :size, dispatched = :dispatched, updated_on = NOW()\n WHERE subdef_id = :subdef_id"; $params[':subdef_id'] = $row['subdef_id']; } catch (\Exception_Media_SubdefNotFound $e) { $sql = "INSERT INTO subdef\n (record_id, name, path, file, width\n , height, mime, size, dispatched, created_on, updated_on)\n VALUES (:record_id, :name, :path, :file, :width, :height\n , :mime, :size, :dispatched, NOW(), NOW())"; $params[':record_id'] = $record->get_record_id(); $params[':name'] = $name; } $stmt = $connbas->prepare($sql); $stmt->execute($params); $stmt->closeCursor(); $subdef = new self($app, $record, $name); $subdef->delete_data_from_cache(); if ($subdef->get_permalink() instanceof media_Permalink_Adapter) { $subdef->get_permalink()->delete_data_from_cache(); } unset($media); return $subdef; }