From: Vincent Vanwaelscappel Date: Fri, 5 Nov 2021 15:56:52 +0000 (+0100) Subject: wip #4211 @1.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=d2c47b715d653c079cb0ec16ffa179444e91a1d0;p=fluidbook-toolbox.git wip #4211 @1.5 --- diff --git a/app/Console/Commands/WorkshopMigration.php b/app/Console/Commands/WorkshopMigration.php index 5e6a8ccc1..0354ec9fb 100644 --- a/app/Console/Commands/WorkshopMigration.php +++ b/app/Console/Commands/WorkshopMigration.php @@ -3,8 +3,15 @@ namespace App\Console\Commands; +use App\Models\AuthUser; +use App\Models\FluidbookPublication; use App\Models\FluidbookQuote; +use App\Models\FluidbookTheme; use Cubist\Backpack\Console\Commands\CubistCommand; +use Cubist\Backpack\Magic\Fields\Color; +use Cubist\Backpack\Magic\Fields\Date; +use Cubist\Backpack\Magic\Fields\Datetime; +use Cubist\Backpack\Magic\Fields\Files; use Illuminate\Support\Facades\DB; class WorkshopMigration extends CubistCommand @@ -14,13 +21,17 @@ class WorkshopMigration extends CubistCommand protected $_wsRanks = []; protected $_oldDB = 'extranet_clean'; protected $_oldRoot = '/home/extranet/www/fluidbook/'; + protected static $_admin = 5; public function handle() { + $user = AuthUser::where('id', self::$_admin)->first(); + backpack_auth()->login($user); + $actions = [ //'Backup current database' => 'backup', 'Migrate magic models' => 'migrate', - //'Import publications' => 'importPublications', + 'Import publications' => 'importPublications', 'Clean caches' => 'cleanCache' ]; @@ -68,6 +79,74 @@ class WorkshopMigration extends CubistCommand protected function importPublications() { + $map = ['book_id' => 'id', + 'nom' => 'name', + 'proprietaire' => 'owner', + 'date' => 'created_at', + 'lang' => 'locale', + 'compteur_visites' => 'visits_counter', + 'date_status' => 'status_date', + 'traductions' => 'translations', + 'numerotation' => 'page_numbers', + 'tache' => 'extranet_task', + 'changedate' => 'updated_at', + 'compiledate' => 'compilation_date', + 'composition_update' => 'composition_update_at', + 'dir_external' => 'install_ftp_settings', + 'dir_hosting' => 'install_hosting_settings', + 'dir_references' => 'install_references_settings', + ]; + + $mapValues = ['Open Sans (police du Fluidbook)' => 'OpenSans']; + + $ignore = []; + FluidbookTheme::$updateWS2ViewOnChange = false; + foreach (FluidbookPublication::all() as $book) { + $book->delete(); + } + + foreach (DB::table($this->_oldDB . '.books')->get() as $e) { + $oldRoot = $this->_oldRoot . 'books/working/' . $e->book_id . '/'; + $c = new FluidbookPublication(); + foreach ($e as $k => $v) { + $new = $map[$k] ?? $k; + if (!$c->hasField($new)) { + continue; + } + if ($c->getField($new) instanceof Datetime) { + $date = new \DateTime(); + $date->setTimestamp($v); + $v = $date; + } + $c->setAttribute($new, $v); + } + $c->save(); + + $s = $this->_unserialize($e->parametres); + + + foreach ($s->datas as $k => $data) { + if (in_array($k, $ignore)) { + continue; + } + if (!$c->hasField($k)) { + continue; + } + $f = $c->getField($k); + if ($f instanceof Files) { + //$c->_handleWS2File($f, $data, $oldRoot); + } else { + if ($f instanceof Color) { + $data = FluidbookTheme::_colorToWS3($data); + } + if(isset($mapValues[$data])){ + $data=$mapValues[$data]; + } + $c->setAttribute($k, $data); + } + } + $c->save(); + } } } diff --git a/app/Fields/FluidbookLocale.php b/app/Fields/FluidbookLocale.php index 70c449f53..69a88ce44 100644 --- a/app/Fields/FluidbookLocale.php +++ b/app/Fields/FluidbookLocale.php @@ -4,9 +4,29 @@ namespace App\Fields; +use Cubist\Backpack\CubistBackpackServiceProvider; use Cubist\Backpack\Magic\Fields\Locale; +use Cubist\Util\Files\Files; class FluidbookLocale extends Locale { + protected $_columnType = 'fromfield'; + protected $_columnViewNamespace = CubistBackpackServiceProvider::NAMESPACE . '::columns'; + public function __construct($attributes) + { + $list = Files::getDirectoryIterator(resource_path('lang')); + $this->_limitToLocales = []; + foreach ($list as $item) { + if (preg_match('/fluidbook.([a-z_A-Z]{2,5}).json/', $item->getFilename(), $matches)) { + $this->_limitToLocales[] = $matches[1]; + } + } + parent::__construct($attributes); + } + + public function filterColumn($value) + { + return mb_strtoupper($value); + } } diff --git a/app/Fields/FluidbookTheme.php b/app/Fields/FluidbookTheme.php index d027e2e89..368f41ca8 100644 --- a/app/Fields/FluidbookTheme.php +++ b/app/Fields/FluidbookTheme.php @@ -8,5 +8,9 @@ use Cubist\Backpack\Magic\Fields\SelectFromModel; class FluidbookTheme extends SelectFromModel { - + public function __construct($attributes) + { + $attributes['optionsmodel'] = \App\Models\FluidbookTheme::class; + parent::__construct($attributes); + } } diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 4506c2924..f102465cf 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -7,6 +7,15 @@ use App\Fields\FluidbookDevelopmentVersion; use App\Fields\FluidbookLocale; use App\Fields\FluidbookSignature; use App\Fields\User; +use Cubist\Backpack\Magic\Fields\Code; +use Cubist\Backpack\Magic\Fields\Date; +use Cubist\Backpack\Magic\Fields\Datetime; +use Cubist\Backpack\Magic\Fields\Hidden; +use Cubist\Backpack\Magic\Fields\Integer; +use Cubist\Backpack\Magic\Fields\LongText; +use Cubist\Backpack\Magic\Fields\SelectFromArray; + +use Cubist\Backpack\Magic\Fields\Textarea; use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; @@ -34,6 +43,8 @@ class FluidbookPublication extends CubistMagicAbstractModel { parent::setFields(); + $this->addField('name', 'Text', __('Nom'), ['column' => true]); + $this->addField(['name' => 'owner', 'label' => __('Propriétaire'), 'type' => User::class, @@ -44,6 +55,28 @@ class FluidbookPublication extends CubistMagicAbstractModel 'default' => Auth::id()] ); + $this->addField('theme', \App\Fields\FluidbookTheme::class, 'Thème'); + $this->addField('locale', FluidbookLocale::class, 'Langue', ['default' => 'fr', 'allows_null' => false, 'column' => true, 'column_label' => '']); + $this->addField('translations', Code::class, 'Traductions', ['language' => 'javascript']); + $this->addField('hash', Hidden::class); + $this->addField('cid', Hidden::class); + $this->addField('visits_counter', Integer::class, 'Compteur de visites', ['read_only' => true]); + $this->addField('status', SelectFromArray::class, 'Status', [ + 'options' => + [-1 => __('Brouillon'), 0 => __('Prêt'), 1 => __('Téléchargé'), 2 => __('Facturé')], + 'column' => true, + ] + ); + $this->addField('status_date', Datetime::class, __('Date de changement de status')); + $this->addField('chapters', Textarea::class, __('Sommaire')); + $this->addField('page_numbers', Textarea::class, __('Numérotation')); + $this->addField('extranet_task', Integer::class, __('Tâche de l\'extranet')); + $this->addField('compilation_date', Datetime::class, __('Dernière compilation')); + $this->addField('composition_updated_at', Datetime::class, __('Dernière modification de la composition')); + $this->addField('install_ftp_settings', LongText::class, __('Paramètres Installation FTP')); + $this->addField('install_hosting_settings', LongText::class, __('Paramètres Installation Hosting')); + $this->addField('install_references_settings', LongText::class, __('Paramètres Installation Résferences')); + $this->setSettingsFields(); } @@ -650,6 +683,8 @@ class FluidbookPublication extends CubistMagicAbstractModel 'label' => __('Nombre de pages'), 'default' => 0, 'translatable' => false, + 'column' => true, + 'column_label' => 'Pages' ]); $this->addField([ 'name' => 'width',