'Birzha', 'description' => 'No description provided yet...', 'author' => 'TPS', 'icon' => 'icon-leaf' ]; } /** * Register method, called when the plugin is first registered. * * @return void */ public function register() { $this->registerConsoleCommand('birzha:databasebackup', DatabaseBackUp::class); $this->registerConsoleCommand('birzha:gifttousers', MakeGiftToUsers::class); } public function registerListColumnTypes() { return [ // A local method, i.e $this->evalUppercaseListColumn() 'status' => [$this, 'statusListColumn'], 'vendor' => [$this, 'vendorLinkListColumn'], 'user' => [$this, 'userLinkListColumn'], 'money' => [$this, 'moneyColumn'], ]; } public function moneyColumn($value, $column, $record){ return ''.number_format($value,2).' tmt'; } public function userLinkListColumn($value, $column, $record){ return ''.$value.''; } public function vendorLinkListColumn($value, $column, $record){ return ''.$value.''; } public function statusListColumn($value, $column, $record) { switch ($value){ case 'draft' : return ''.$value.''; case 'bank' : return ''.$value.''; case 'online' : return ''.$value.''; case 'gift' : return ''.$value.''; case 'payed': case 'approved' : return ''.$value.''; case 'new' : return ''.$value.''; case 'failed' : return ''.$value.''; case 'denied' : return ''.$value.''; case 'disabled' : return ''.$value.''; default : return $value; } } public function registerSchedule($schedule) { $schedule->command('birzha:databasebackup') ->timezone('America/New_York') ->daily(); } /** * Boot method, called right before the request route. * * @return array */ public function boot() { /* * Register menu items for the RainLab.Pages plugin */ Event::listen('pages.menuitem.listTypes', function() { return [ 'category' => 'Category', 'all-categories' => 'All Categories', 'all-products' => 'All products', 'category-products' => 'Category Products', ]; }); Event::listen('pages.menuitem.getTypeInfo', function($type) { if ($type == 'category' || $type == 'all-categories') { return Category::getMenuTypeInfo($type); } elseif ($type == 'product' || $type == 'all-products' || $type == 'category-products') { return Product::getMenuTypeInfo($type); } }); Event::listen('pages.menuitem.resolveItem', function($type, $item, $url, $theme) { if ($type == 'category' || $type == 'all-categories') { return Category::resolveMenuItem($item, $url, $theme); } elseif ($type == 'product' || $type == 'all-products' || $type == 'category-products') { return Product::resolveMenuItem($item, $url, $theme); } }); \Event::listen('offline.sitesearch.query', function ($query) { // The controller is used to generate page URLs. $controller = \Cms\Classes\Controller::getController() ?? new \Cms\Classes\Controller(); // Search your plugin's contents $locale = Session::get('rainlab.translate.locale'); if($locale == 'tm') { // user enters product name $items = Models\Product ::where('name', 'like', "%${query}%") ->where('status','approved') // ->where('ends_at','>=',\DB::raw('curdate()'))->orderBy('updated_at', 'desc') ->get(); } else { $queryString = $query; // user enters product name $items = Models\Product::whereHas('translations', function ($query) use ($locale,$queryString) { $query->where('locale', $locale)->where('attribute_data', 'like', "%${queryString}%"); }) ->where('status','approved') // ->where('ends_at','>=',\DB::raw('curdate()'))->orderBy('updated_at', 'desc') ->get(); } // show all offers that have that product // $items = collect(new Offer); // foreach($products as $p) { // foreach($p->offers()->where('status','approved')->get() as $of) { // $items->add($of); // } // } // Now build a results array $results = $items->map(function ($item) use ($query, $controller) { // If the query is found in the title, set a relevance of 2 $relevance = mb_stripos($item->title, $query) !== false ? 2 : 1; // Optional: Add an age penalty to older results. This makes sure that // newer results are listed first. // if ($relevance > 1 && $item->created_at) { // $ageInDays = $item->created_at->diffInDays(\Illuminate\Support\Carbon::now()); // $relevance -= \OFFLINE\SiteSearch\Classes\Providers\ResultsProvider::agePenaltyForDays($ageInDays); // } return [ 'title' => $item->name, 'url' => $controller->pageUrl('offer', ['slug' => $item->slug, 'id' => $item->id]), // 'thumb' => optional($item->product->images)->first(), // Instance of System\Models\File 'relevance' => $relevance, // higher relevance results in a higher // position in the results listing // 'meta' => 'data', // optional, any other information you want // to associate with this result 'model' => $item, // optional, pass along the original model ]; }); return [ 'provider' => 'Offers', // The badge to display for this result 'results' => $results, ]; }); /* * Notifications */ // \RainLab\Notify\Classes\Notifier::bindEvents([ // 'tps.payment.received' => \TPS\Birzha\Events\PaymentRecievedEvent::class, // 'tps.payment.reviewed' => \TPS\Birzha\Events\PaymentReviewedEvent::class, // 'tps.payment.gifted' => \TPS\Birzha\Events\PaymentGiftedEvent::class, // 'tps.product.received' => \TPS\Birzha\Events\ProductRecievedEvent::class, // 'tps.product.reviewed' => \TPS\Birzha\Events\ProductReviewedEvent::class, // 'tps.message.received' => \TPS\Birzha\Events\MessageReceivedEvent::class, // 'tps.contactus.received' => \TPS\Birzha\Events\ContactusReceivedEvent::class, // 'tps.exchangereq.submitted' => \TPS\Birzha\Events\ExchangerequestReceivedEvent::class, // ]); // // \RainLab\Notify\Classes\Notifier::instance()->registerCallback(function($manager) { // $manager->registerGlobalParams([ // 'user' => Auth::getUser() // ]); // }); Resource::withoutWrapping(); } public function registerMailLayouts() { return [ 'birzha_default' => 'tps.birzha::mail.layout-default', 'birzha_system' => 'tps.birzha::mail.layout-system', 'birzha_empty' => 'tps.birzha::mail.layout-empty', ]; } public function registerMailTemplates() { return [ 'tps.birzha::mail.ru.activate', 'tps.birzha::mail.en.activate', 'tps.birzha::mail.tm.activate', 'tps.birzha::mail.message', 'tps.birzha::mail.requests', // email verification 'tps.birzha::mail.ru.email_verify', 'tps.birzha::mail.en.email_verify', 'tps.birzha::mail.tm.email_verify', // product reviewed 'tps.birzha::mail.product_reviewed', // payment reviewed 'tps.birzha::mail.payment_reviewed', // new product submitted 'tps.birzha::mail.product_submitted', // new payment recieved 'tps.birzha::mail.payment_recieved', // new message recieved 'tps.birzha::mail.message_recieved', // test email template 'tps.birzha::mail.test', // password reset 'tps.birzha::mail.ru.reset_password', 'tps.birzha::mail.en.reset_password', 'tps.birzha::mail.tm.reset_password', ]; } public function registerNotificationRules() { return [ 'events' => [ \TPS\Birzha\Events\PaymentRecievedEvent::class, \TPS\Birzha\Events\PaymentReviewedEvent::class, \TPS\Birzha\Events\PaymentGiftedEvent::class, \TPS\Birzha\Events\ProductRecievedEvent::class, \TPS\Birzha\Events\ProductReviewedEvent::class, \TPS\Birzha\Events\MessageReceivedEvent::class, \TPS\Birzha\Events\ContactusReceivedEvent::class, \TPS\Birzha\Events\ExchangerequestReceivedEvent::class, ], 'actions' => [ SendSMSAction::class, MailToAdminsAction::class, VerifyAction::class, MakeGiftAction::class ], 'conditions' => [ \RainLab\User\NotifyRules\UserAttributeCondition::class ], 'groups' => [ 'payment' => [ 'label' => 'Payment', 'icon' => 'icon-money' ], 'product' => [ 'label' => 'Product', 'icon' => 'icon-cube' ], 'message' => [ 'label' => 'Message', 'icon' => 'icon-envelope' ], ], // 'presets' => '$/rainlab/user/config/notify_presets.yaml', ]; } /** * @return array */ public function registerSettings() { return [ 'config' => [ 'label' => 'Application Settings', 'icon' => 'icon-cogs', 'description' => 'Site general settings', 'class' => 'TPS\Birzha\Models\Settings', 'order' => 300, 'permissions' => [ 'toolbox-menu-settings', ], ], ]; } /** * Registers any front-end components implemented in this plugin. * * @return array */ public function registerComponents() { return [ 'TPS\Birzha\Components\Categories' => 'categories', 'TPS\Birzha\Components\Sliders' => 'sliders', 'TPS\Birzha\Components\Offers' => 'offers', 'TPS\Birzha\Components\FilteredProducts' => 'filteredProducts', 'TPS\Birzha\Components\Singleoffer' => 'singleoffer', 'TPS\Birzha\Components\OfferForm' => 'offerform', 'TPS\Birzha\Components\Messages' => 'messages', 'TPS\Birzha\Components\PaymentApi' => 'paymentapi', 'TPS\Birzha\Components\MyOffers' => 'myOffers', 'TPS\Birzha\Components\UserOffers' => 'userOffers', 'TPS\Birzha\Components\SearchOffers' => 'searchOffers', 'TPS\Birzha\Components\Balance' => 'balance', 'TPS\Birzha\Components\ContactForm' => 'contactForm', 'TPS\Birzha\Components\EmailVerify' => 'emailverify', 'TPS\Birzha\Components\Birzhadocs' => 'birzhadocs', ]; } /** * Registers any back-end permissions used by this plugin. * * @return array */ // public function registerPermissions() // { // return []; // Remove this line to activate // // return [ // 'tps.birzha.some_permission' => [ // 'tab' => 'Birzha', // 'label' => 'Some permission' // ], // ]; // } // // /** // * Registers back-end navigation items for this plugin. // * // * @return array // */ // public function registerNavigation() // { // return []; // Remove this line to activate // // return [ // 'birzha' => [ // 'label' => 'Birzha', // 'url' => Backend::url('tps/birzha/mycontroller'), // 'icon' => 'icon-leaf', // 'permissions' => ['tps.birzha.*'], // 'order' => 500, // ], // ]; // } }