use App\Console\Commands\WorkshopMigration;
use App\Fields\FluidbookChapters;
use App\Fields\FluidbookComposition;
+use App\Fields\FluidbookID;
+use App\Fields\FluidbookIDOptionnal;
use App\Fields\FluidbookLocale;
use App\Fields\FluidbookStatus;
use App\Fields\User;
use App\Slack\Slack;
use App\SubForms\Link\Base;
use Cubist\Backpack\CubistBackpackServiceProvider;
+use Cubist\Backpack\Magic\Fields\Checkbox;
use Cubist\Backpack\Magic\Fields\FormBigSection;
+use Cubist\Backpack\Magic\Fields\FormSeparator;
use Cubist\Backpack\Magic\Fields\FormSuperSection;
use Cubist\Backpack\Magic\Fields\Hidden;
use Cubist\Backpack\Magic\Fields\Integer;
protected $_enableTrackNonDefaultValues = true;
protected static $_permissionBase = 'fluidbook-publication';
+ /**
+ * @var FluidbookPublication
+ */
+ protected $_fluidbookToUseForComposition = null;
+
protected static $_docs = [];
protected $_operations = [CreateOperation::class,
);
$this->addField('section_composition', FormBigSection::class, __('Composition'));
+ $this->addField('composition_fluidbook', Checkbox::class, __('Utiliser la composition d\'un autre fluidbook'), ['default' => false]);
+ $this->addField('composition_fluidbook_id', FluidbookID::class, __('Utiliser la composition d\'un autre fluidbook'), ['when' => ['composition_fluidbook' => 1]]);
+ $this->addField('composition_fluidbook_links', Checkbox::class, __('Utiliser également les liens de ce fluidbook'), ['default' => true, 'when' => ['composition_fluidbook' => 1]]);
$this->addField('page_numbers', Hidden::class, __('Numérotation'));
- $this->addField('composition', FluidbookComposition::class, __('Composition'));
+ $this->addField('composition', FluidbookComposition::class, __('Composition'), ['when' => ['composition_fluidbook' => 0]]);
$this->addField('section_theme', FormBigSection::class, __('Thème graphique'));
$this->addField('theme', \App\Fields\FluidbookTheme::class, __('Thème'), ['non_default_tracking' => false, 'default' => 1161]);
$this->c_title = $this->title;
if (null !== $this->composition) {
- $this->c_pages = count($this->composition);
+ $this->c_pages = count($this->getComposition());
} else {
Log::warning('Fluidbook ' . $this->id . ' has empty composition');
}
public function getTextFile($page, $type = FluidbookDocument::TEXT_PLAIN)
{
- $compo = $this->composition[$page];
+ $compo = $this->getComposition()[$page];
return self::_getDocument($compo[0])->getTextFile($compo[1], $type, $this->textExtraction, $this->ignoreSearchSeparators);
}
public function getHightlightFile($page)
{
- $compo = $this->composition[$page];
+ $compo = $this->getComposition()[$page];
return self::_getDocument($compo[0])->getHightlightFile($compo[1]);
}
public function getPDFSplitSource($page)
{
- $compo = $this->composition[$page];
+ $compo = $this->getComposition()[$page];
$doc = self::_getDocument($compo[0]);
$pdf = $doc->path('pdf/p' . $compo[1] . '.pdf');
if (!file_exists($pdf)) {
public function getFile($page, $format = 'jpg', $resolution = 150, $withText = true, $withGraphics = true, $version = 'html', $force = false)
{
- $compo = $this->composition[$page];
+ $compo = $this->getComposition()[$page];
return self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $this->JPEGQuality, $withText, $withGraphics, $version, $force);
}
{
if (null === $this->_documentsSize) {
$this->_documentsSize = [];
- if (null === $this->composition) {
+ if (null === $this->getComposition()) {
return $this->_documentsSize;
}
- foreach ($this->composition as $page => $data) {
+ foreach ($this->getComposition() as $page => $data) {
if (isset($this->_documentsSize[$data[0]])) {
continue;
}
*/
public function getPagesNumber()
{
- return count($this->composition);
+ return count($this->getComposition());
}
/**
*/
public function getDocument($page)
{
- return self::_getDocument($this->composition[$page][0]);
+ return self::_getDocument($this->getComposition()[$page][0]);
}
public function getDocumentSize($page = 1)
{
$document = $this->getDocument($page);
- return $document->getPageSize($this->composition[$page][1]);
+ return $document->getPageSize($this->getComposition()[$page][1]);
}
/**
public function getPDFSource($page, $type = 'crop'): string
{
- $compo = $this->composition[$page];
+ $compo = $this->getComposition()[$page];
if ($type == 'crop') {
return self::_getDocument($compo[0])->getPDFSource($type);
}
}
- public function getLinksAndRulers(&$links, &$rulers)
+ public function getLinksAndRulers(&$links, &$rulers, $time = 'latest', $forceDecrypt = false)
{
- LinksData::getLinksAndRulers($this->id, $links, $rulers);
+ $links_id = $this->composition_fluidbook && $this->composition_fluidbook_links ? $this->composition_fluidbook_id : $this->id;
+ LinksData::getLinksAndRulers($links_id, $links, $rulers, $time, $forceDecrypt);
}
/**
public function replicateFull(array $except = null)
{
$new = $this->_baseReplicate($except);
+ $new->composition_fluidbook = true;
+ $new->composition_fluidbook_id = $this->id;
+ $new->composition_fluidbook_links = true;
$new->save();
// Copy links & assets
$l10n['default'] = $this->getDefaultTranslations($l10n);
return $l10n;
}
+
+ /**
+ * @return mixed
+ */
+ public function getNumbering()
+ {
+ return $this->_getCompositionAttribute('page_numbers');
+ }
+
+ /**
+ * @return array
+ */
+ public function getComposition()
+ {
+ $res = $this->_getCompositionAttribute('composition');
+ return $res;
+ }
+
+ protected function _getCompositionAttribute($name)
+ {
+ if (null === $this->_fluidbookToUseForComposition) {
+ if ($this->composition_fluidbook) {
+ $this->_fluidbookToUseForComposition = FluidbookPublication::withoutGlobalScopes()->find($this->composition_fluidbook_id);
+ } else {
+ $this->_fluidbookToUseForComposition = $this;
+ }
+ }
+ return $this->_fluidbookToUseForComposition->$name;
+ }
}