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
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'
];
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();
+ }
}
}
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);
+ }
}
class FluidbookTheme extends SelectFromModel
{
-
+ public function __construct($attributes)
+ {
+ $attributes['optionsmodel'] = \App\Models\FluidbookTheme::class;
+ parent::__construct($attributes);
+ }
}
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;
{
parent::setFields();
+ $this->addField('name', 'Text', __('Nom'), ['column' => true]);
+
$this->addField(['name' => 'owner',
'label' => __('Propriétaire'),
'type' => User::class,
'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' => '<i class="la la-language"></i>']);
+ $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();
}
'label' => __('Nombre de pages'),
'default' => 0,
'translatable' => false,
+ 'column' => true,
+ 'column_label' => 'Pages'
]);
$this->addField([
'name' => 'width',