diff --git a/addons/default/visiosoft/advs-module/resources/config/settings/sections.php b/addons/default/visiosoft/advs-module/resources/config/settings/sections.php index 7c83e2392..300e9539e 100644 --- a/addons/default/visiosoft/advs-module/resources/config/settings/sections.php +++ b/addons/default/visiosoft/advs-module/resources/config/settings/sections.php @@ -67,7 +67,7 @@ return [ 'user' => [ 'title' => 'visiosoft.module.advs::section.user', 'fields' => [ - 'register_email_field', + 'register_email_field' ], ], 'filter' => [ @@ -76,6 +76,12 @@ return [ 'hide_price_filter', 'hide_date_filter', 'hide_photo_filter', 'hide_map_filter', 'user_filter_limit' ], ], + 'translations' => [ + 'title' => 'visiosoft.module.advs::section.translations', + 'fields' => [ + 'override_text', + ], + ], ], ], ]; diff --git a/addons/default/visiosoft/advs-module/resources/config/settings/settings.php b/addons/default/visiosoft/advs-module/resources/config/settings/settings.php index df69de9c2..0eb3541bc 100644 --- a/addons/default/visiosoft/advs-module/resources/config/settings/settings.php +++ b/addons/default/visiosoft/advs-module/resources/config/settings/settings.php @@ -339,4 +339,9 @@ return [ 'mode' => 'checkbox' ], ], + 'override_text' => [ + 'type' => 'anomaly.field_type.tags', + 'bind' => 'override_text', + 'env' => 'OVERRIDE_TEXT', + ], ]; diff --git a/addons/default/visiosoft/advs-module/resources/lang/en/button.php b/addons/default/visiosoft/advs-module/resources/lang/en/button.php index c09c7bc27..777bc94d0 100644 --- a/addons/default/visiosoft/advs-module/resources/lang/en/button.php +++ b/addons/default/visiosoft/advs-module/resources/lang/en/button.php @@ -42,4 +42,5 @@ return [ 'replicate' => 'Replicate', 'fast_create' => 'Fast create', 'publish' => 'Publish', + 'import' => 'Import', ]; diff --git a/addons/default/visiosoft/advs-module/resources/lang/en/section.php b/addons/default/visiosoft/advs-module/resources/lang/en/section.php index 1992005b1..6e1310527 100644 --- a/addons/default/visiosoft/advs-module/resources/lang/en/section.php +++ b/addons/default/visiosoft/advs-module/resources/lang/en/section.php @@ -55,4 +55,5 @@ return [ 'option_configuration' => [ 'title' => 'Configuration', ], + 'translations' => 'Translations', ]; diff --git a/addons/default/visiosoft/advs-module/resources/lang/en/setting.php b/addons/default/visiosoft/advs-module/resources/lang/en/setting.php index 660e90150..b213d2b67 100644 --- a/addons/default/visiosoft/advs-module/resources/lang/en/setting.php +++ b/addons/default/visiosoft/advs-module/resources/lang/en/setting.php @@ -205,4 +205,8 @@ return [ 'name' => 'Show Post Ad Agreement', 'instructions' => 'Turn this on if you want to display a privacy policy agreement on the ad creation page', ], + 'override_text' => [ + 'name' => 'Override Text', + 'instructions' => 'Old Value:New Value' + ], ]; diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvsImport.php b/addons/default/visiosoft/advs-module/src/Adv/AdvsImport.php new file mode 100644 index 000000000..ef6fa24ce --- /dev/null +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvsImport.php @@ -0,0 +1,19 @@ + $row[0], + 'slug' => Str::slug($row[0]), + 'price' => $row[1], + 'currency' => $row[2], + ]); + } +} diff --git a/addons/default/visiosoft/advs-module/src/Adv/Table/AdvTableButtons.php b/addons/default/visiosoft/advs-module/src/Adv/Table/AdvTableButtons.php index 266de8c98..d8bd59c4c 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Table/AdvTableButtons.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Table/AdvTableButtons.php @@ -25,13 +25,7 @@ class AdvTableButtons return ($entry->getStatus() == 'approved') ? "danger" : "success"; }, ], - - 'edit' => [ - 'href' => function (EntryModel $entry) { - return route('visiosoft.module.advs::edit_adv', ['id' => $entry->getId()]); - }, - 'text' => "" . trans('streams::button.edit') . "" - ], + 'edit', 'settings' => [ 'text' => false, 'href' => false, diff --git a/addons/default/visiosoft/advs-module/src/AdvsModuleSeeder.php b/addons/default/visiosoft/advs-module/src/AdvsModuleSeeder.php index a511c269b..96fe8e1d1 100644 --- a/addons/default/visiosoft/advs-module/src/AdvsModuleSeeder.php +++ b/addons/default/visiosoft/advs-module/src/AdvsModuleSeeder.php @@ -1,13 +1,56 @@ disks = $disks; + $this->folders = $folders; + } + /** * Run the seeder. */ public function run() { + //Create Store Icon Folder + if (!$this->folders->findBySlug('ads_excel')) { + $disk = $this->disks->findBySlug('local'); + + $this->folders->create([ + 'en' => [ + 'name' => 'Ads Excel', + 'description' => 'A folder for Ads Excel.', + ], + 'slug' => 'ads_excel', + 'disk' => $disk + ]); + }; } } \ No newline at end of file diff --git a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php index 4ee0bf3ea..41d20cac3 100644 --- a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php +++ b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php @@ -47,10 +47,18 @@ class AdvsModuleServiceProvider extends AddonServiceProvider ], 'admin/advs-users/choose/{advId}' => 'Visiosoft\AdvsModule\Http\Controller\Admin\AdvsController@choose', 'admin/class/actions/{id}/{type}' => 'Visiosoft\AdvsModule\Http\Controller\Admin\AdvsController@actions', - 'admin/advs/export' => [ - 'as' => 'advs::exportAdvs', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\AdvsController@exportAdvs', - ], + + + //Excel + 'admin/advs/export' => [ + 'as' => 'advs::exportAdvs', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\AdvsController@exportAdvs', + ], + 'admin/advs/import' => [ + 'as' => 'visiosoft.module.advs::import.advs', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ExcelController@import', + ], + // advsController 'advs/list' => [ @@ -187,25 +195,25 @@ class AdvsModuleServiceProvider extends AddonServiceProvider // Others 'advs/ttr/{id}' => 'Visiosoft\PackagesModule\Http\Controller\packageFEController@advsStatusbyUser', - //Configurations Admin Controller - 'admin/advs/option_configuration/create' => [ - 'as' => 'visiosoft.module.advs::configrations.create', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\OptionConfigurationController@create', - ], - 'admin/advs/option_configuration' => [ - 'as' => 'visiosoft.module.advs::configrations.index', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\OptionConfigurationController@index', - ], + //Configurations Admin Controller + 'admin/advs/option_configuration/create' => [ + 'as' => 'visiosoft.module.advs::configrations.create', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\OptionConfigurationController@create', + ], + 'admin/advs/option_configuration' => [ + 'as' => 'visiosoft.module.advs::configrations.index', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\Admin\OptionConfigurationController@index', + ], - //Configuration Controller - 'advs/option_configuration/create' => [ - 'as' => 'visiosoft.module.advs::user.configrations.create', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@create', - ], - 'conf/addCart' => [ - 'as' => 'configuration::add_cart', - 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@confAddCart', - ], + //Configuration Controller + 'advs/option_configuration/create' => [ + 'as' => 'visiosoft.module.advs::user.configrations.create', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@create', + ], + 'conf/addCart' => [ + 'as' => 'configuration::add_cart', + 'uses' => 'Visiosoft\AdvsModule\Http\Controller\OptionConfigurationController@confAddCart', + ], // Admin ProductoptionsController 'admin/advs/product_options' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ProductoptionsController@index', @@ -236,9 +244,9 @@ class AdvsModuleServiceProvider extends AddonServiceProvider CategoryRepositoryInterface::class => CategoryRepository::class, CountryRepositoryInterface::class => CountryRepository::class, OptionRepositoryInterface::class => OptionRepository::class, - ProductoptionRepositoryInterface::class => ProductoptionRepository::class, - OptionConfigurationRepositoryInterface::class => OptionConfigurationRepository::class, - ProductoptionsValueRepositoryInterface::class => ProductoptionsValueRepository::class, + ProductoptionRepositoryInterface::class => ProductoptionRepository::class, + OptionConfigurationRepositoryInterface::class => OptionConfigurationRepository::class, + ProductoptionsValueRepositoryInterface::class => ProductoptionsValueRepository::class, ]; public function boot(AddonCollection $addonCollection, FileModel $fileModel) @@ -247,30 +255,35 @@ class AdvsModuleServiceProvider extends AddonServiceProvider 'general_settings' => [ 'title' => 'visiosoft.module.advs::button.general_settings', 'href' => '/admin/settings/modules/visiosoft.module.advs', - 'page' => 'anomaly.module.settings' + 'page' => 'anomaly.module.settings' ], 'theme_settings' => [ 'title' => 'visiosoft.theme.defaultadmin::section.theme_settings.name', 'href' => url('admin/settings/themes/' . setting_value('streams::standard_theme')), - 'page' => 'anomaly.module.settings' + 'page' => 'anomaly.module.settings' ], 'assets_clear' => [ 'title' => 'visiosoft.module.advs::section.assets_clear.name', 'href' => route('assets_clear'), - 'page' => 'anomaly.module.settings' + 'page' => 'anomaly.module.settings' ], - 'export' => [ - 'title' => 'visiosoft.module.advs::button.export', - 'href' => route('advs::exportAdvs'), - 'page' => 'visiosoft.module.advs' - ] + 'export' => [ + 'title' => 'visiosoft.module.advs::button.export', + 'href' => route('advs::exportAdvs'), + 'page' => 'visiosoft.module.advs' + ], + 'import' => [ + 'title' => 'visiosoft.module.advs::button.import', + 'href' => route('visiosoft.module.advs::import.advs'), + 'page' => 'visiosoft.module.advs' + ] ]; foreach ($settings_url as $key => $value) { $addonCollection->get($value['page'])->addSection($key, $value); } - // Disable file versioning + // Disable file versioning $fileModel->disableVersioning(); } } diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ExcelController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ExcelController.php new file mode 100644 index 000000000..361d4308a --- /dev/null +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ExcelController.php @@ -0,0 +1,41 @@ +action == "save" and $file = $fileRepository->find(request()->file)) { + if ($file->extension === 'xls' || $file->extension === 'xlsx') { + $pathToFolder = "/storage/streams/default/files-module/local/ads_excel/"; + Excel::import(new AdvsImport(), base_path() . $pathToFolder . $file->name); + $this->messages->success(trans('streams::message.create_success', ['name' => trans('module::addon.title')])); + } + } + + //Form Render + $builder->setFields([ + 'file' => [ + "type" => "anomaly.field_type.file", + "config" => [ + 'folders' => ["ads_excel"], + 'mode' => 'upload' + ] + ], + ]); + $builder->setActions([ + 'save' + ]); + + $builder->setOptions([ + 'redirect' => route('visiosoft.module.advs::admin_advs') + ]); + + return $builder->render(); + } +} diff --git a/app/Lang/Loader.php b/app/Lang/Loader.php new file mode 100644 index 000000000..72f7728a0 --- /dev/null +++ b/app/Lang/Loader.php @@ -0,0 +1,266 @@ + + * @author Ryan Thompson + */ +class Loader extends FileLoader +{ + + /** + * The runtime cache. + * + * @var array + */ + protected static $disabled = []; + + /** + * The streams path. + * + * @var string + */ + protected $streams; + + /** + * The addon collection instance. + * + * @var AddonCollection + */ + protected $addons; + + /** + * The application instance. + * + * @var Application + */ + protected $application; + + /** + * Create a new Loader instance. + * + * @param Filesystem $files + * @param string $path + */ + public function __construct(Filesystem $files, $path) + { + $this->streams = base_path('vendor/visiosoft/streams-platform/resources/lang'); + + $this->application = app(Application::class); + $this->addons = app(AddonCollection::class); + + parent::__construct($files, $path); + } + + /** + * Load a locale from a given path. + * + * Keep streams overrides in place + * that are NOT namespaced cause + * we're overriding Laravel's + * base language files too. + * + * @param string $path + * @param string $locale + * @param string $group + * @return array + */ + protected function loadPath($path, $locale, $group) + { + $lines = parent::loadPath($path, $locale, $group); + + if ($path == $this->streams && $lines) { + $lines = $this->loadAddonOverrides($lines, $locale, $group); + $lines = $this->loadSystemOverrides($lines, $locale, $group); + $lines = $this->loadApplicationOverrides($lines, $locale, $group); + } + + return $lines; + } + + /** + * Load namespaced overrides from + * system AND application paths. + * + * @param array $lines + * @param string $locale + * @param string $group + * @param string $namespace + * @return array + */ + protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace) + { + /** + * @deprecated since 1.6; Use manual loading or publishing. + */ + if (env('AUTOMATIC_ADDON_OVERRIDES', true)) { + $lines = $this->loadAddonOverrides($lines, $locale, $group, $namespace); + } + + $lines = $this->loadSystemOverrides($lines, $locale, $group, $namespace); + $lines = $this->loadApplicationOverrides($lines, $locale, $group, $namespace); + + return parent::loadNamespaceOverrides($lines, $locale, $group, $namespace); + } + + /** + * Load system overrides. + * + * @param array $lines + * @param $locale + * @param $group + * @param $namespace + * @return array + */ + protected function loadSystemOverrides(array $lines, $locale, $group, $namespace = null) + { + if (!$namespace || $namespace == 'streams') { + + $file = base_path("resources/streams/lang/{$locale}/{$group}.php"); + + if (is_dir(base_path("resources/streams/lang")) && $this->files->exists($file)) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + + if (str_is('*.*.*', $namespace)) { + + list($vendor, $type, $slug) = explode('.', $namespace); + + $file = base_path("resources/addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php"); + + if (is_dir(base_path("resources/addons/{$vendor}/{$slug}-{$type}/lang")) && $this->files->exists($file)) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + + return $lines; + } + + /** + * Load system overrides. + * + * @param array $lines + * @param $locale + * @param $group + * @param $namespace + * @return array + */ + protected function loadApplicationOverrides(array $lines, $locale, $group, $namespace = null) + { + if (!$namespace || $namespace == 'streams') { + + $file = $this->application->getResourcesPath("streams/lang/{$locale}/{$group}.php"); + + if (is_dir($this->application->getResourcesPath("streams/lang")) && $this->files->exists($file)) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + + if (str_is('*.*.*', $namespace)) { + + list($vendor, $type, $slug) = explode('.', $namespace); + + $file = $this->application->getResourcesPath( + "addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php" + ); + + if ( + is_dir($this->application->getResourcesPath("addons/{$vendor}/{$slug}-{$type}/lang")) + && $this->files->exists($file) + ) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + if (config()->has('override_text')) { + foreach (config()->get('override_text') as $override) { + $override = explode(':', $override); + + $lines = $this->findArrayValue($override[0], $override[1], $lines); + } + } + + return $lines; + } + + function replaceNewValue($find_value, $new_value, $arr) + { + if (is_array($arr)) { + foreach ($arr as $key => $item) { + $arr[$key] = $this->replaceNewValue($find_value, $new_value, $item); + } + return $arr; + } + if (strtolower($arr) == strtolower($find_value)) { + return $new_value; + } + return $arr; + } + + function findArrayValue($find_value, $new_value, $arr) + { + foreach ($arr as $key => $item) { + $arr[$key] = $this->replaceNewValue($find_value, $new_value, $item); + } + return $arr; + } + + + /** + * @param array $lines + * @param $locale + * @param $group + * @param null $namespace + * @return array + */ + protected function loadAddonOverrides(array $lines, $locale, $group, $namespace = null) + { + /** @var Addon $addon */ + foreach ($this->addons->enabled() as $addon) { + + $disabled = array_get(self::$disabled, $key = $addon->getNamespace('streams'), false); + + if (!$disabled && !$this->files->isDirectory($addon->getPath('resources/streams'))) { + self::$disabled[$key] = $disabled = true; + } + + if (!$disabled && (!$namespace || $namespace == 'streams')) { + + $file = $addon->getPath("resources/streams/lang/{$locale}/{$group}.php"); + + if ($this->files->exists($file)) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + + $disabled = array_get(self::$disabled, $key = $addon->getNamespace('addons'), false); + + if (!$disabled && !$this->files->isDirectory($addon->getPath('resources/addons'))) { + self::$disabled[$key] = $disabled = true; + } + + if (!$disabled && str_is('*.*.*', $namespace)) { + + list($vendor, $type, $slug) = explode('.', $namespace); + + $file = $addon->getPath( + "resources/addons/{$vendor}/{$slug}-{$type}/lang/{$locale}/{$group}.php" + ); + + if ($this->files->exists($file)) { + $lines = array_replace_recursive($lines, $this->files->getRequire($file)); + } + } + } + + return $lines; + } +} diff --git a/app/Listeners/Translations.php b/app/Listeners/Translations.php new file mode 100755 index 000000000..a891f3401 --- /dev/null +++ b/app/Listeners/Translations.php @@ -0,0 +1,45 @@ +singleton( + 'translation.loader', + function ($application) { + return new Loader($application['files'], $application['path.lang']); + } + ); + + app()->singleton( + 'translator', + function ($application) { + $loader = $application->make('translation.loader'); + + // When registering the translator component, we'll need to set the default + // locale as well as the fallback locale. So, we'll grab the application + // configuration so we can easily get both of these values from there. + $locale = $application['config']['app.locale']; + + $trans = new Translator($loader, $locale); + + $trans->setFallback($application['config']['app.fallback_locale']); + + return $trans; + } + ); + + if (defined('LOCALE')) { + app()->setLocale(LOCALE); + config()->set('app.locale', LOCALE); + } + // Set our locale namespace. + app()->make('translator')->addNamespace('streams', realpath(__DIR__ . '/../../vendor/visiosoft/streams-platform/resources/lang')); + + } +} diff --git a/config/streams.php b/config/streams.php index a05e9b5d3..bc4d41f38 100644 --- a/config/streams.php +++ b/config/streams.php @@ -13,7 +13,11 @@ return [ | */ - 'listeners' => [], + 'listeners' => [ + \Anomaly\Streams\Platform\Event\Booted::class => [ + \App\Listeners\Translations::class + ], + ], /* |--------------------------------------------------------------------------