private function intercept() { intercept('XeStorage@remove', 'storage.optimize.log', function ($target, $file) { $this->bag[] = $file; return $target($file); }); }
/** * registerInterceptForThemePreview * * @return void */ protected function registerInterceptForThemePreview() { $preview_theme = $this->app['request']->get('preview_theme', null); if ($preview_theme !== null) { intercept('Theme@getSelectedTheme', 'preview_theme', function ($target) use($preview_theme) { /** @var ThemeHandler $themeHandler */ $themeHandler = $target->getTargetObject(); $themeHandler->selectTheme($preview_theme); return $target(); }); } }
public function boot() { // 라우트 등록 intercept('Plugin@addPluginRoutes', 'route_for_pluginsample', function ($target, &$args) { $routes = $args[0]; $this->registerAssignedRoute($routes); $target($args); }); $args::get('/manage', function () { return 'hihihi'; }); }
/** * registerInterceptForThemePreview * * @return void */ protected function registerInterceptForThemePreview() { $preview_theme = $this->app['request']->get('preview_theme', null); if ($preview_theme !== null) { intercept('XeTheme@getSelectedTheme', 'preview_theme', function ($target) use($preview_theme) { if (!auth()->user()->isAdmin()) { throw new AccessDeniedHttpException(); } /** @var ThemeHandler $themeHandler */ $themeHandler = $target->getTargetObject(); $themeHandler->selectTheme($preview_theme); return $target(); }); } }
private function registerEvent() { intercept('XePresenter@make', 'googleAnalytics.addScript', function ($target, $id, $data = [], $mergeData = [], $html = true, $api = false) { $app = app(); $router = $app['router']; /** @var \Illuminate\Routing\Route $route */ $route = $router->current(); if (in_array('manage', $route->middleware()) === false) { $setting = $this->getSetting(); if ($setting->get('trackingId')) { XeFrontend::html('analytics')->content($this->getTrackingCode($setting->get('trackingId'), $setting->get('domain', 'auto')))->load(); } } return $target($id, $data, $mergeData, $html, $api); }); }
/** * Register the service provider. * * @return void */ public function register() { $this->app->bind('xe.storage', function ($app) { $distributor = new RoundRobinDistributor($app['config']['filesystems'], $app['xe.db']->connection()); $proxyClass = $app['xe.interception']->proxy(Storage::class, 'Storage'); return new $proxyClass(new FileHandler($app['filesystem'], $distributor), new DatabaseFileRepository($app['xe.db']->connection()), $app['xe.auth'], $app['xe.keygen']); }, true); $this->app->bind(Storage::class, 'xe.storage'); $this->app->bind('xe.storage.url', function ($app) { return new UrlMaker($app['Illuminate\\Contracts\\Routing\\UrlGenerator'], $app['config']['filesystems.disks']); }, true); intercept('Settings@getManageMenu', ['storage.managemenu' => ['before' => 'manage.sort']], function ($target) { $menu = $target(); $menu['contents']['submenu']['file'] = ['title' => '파일', 'description' => 'blur blur~', 'link' => '/manage/storage']; return $menu; }); }
/** * Register the service provider. * * @return void */ public function register() { $this->app->bind('xe.comment', function ($app) { $repo = new CommentRepository($app['xe.db']->connection('comment'), $app['xe.keygen']); // xe.db 에서 schema builder 반환하는지 확인 $decorator = new DivisionDecorator($repo, $app['db']->connection()->getSchemaBuilder(), $app['config']['comment.schema'], $app['xe.config']); $proxyClass = $app['xe.interception']->proxy(CommentHandler::class, 'Comment'); $comment = new $proxyClass($app['xe.member'], $app['xe.auth'], $decorator, $app['xe.config'], $app['session.store'], $app['xe.counter']); return $comment; }, true); $this->app->bind(CommentHandler::class, 'xe.comment'); // manage menu 등록 intercept('Settings@getManageMenu', ['comment.managemenu' => ['before' => 'manage.sort']], function ($target) { $menu = $target(); $menu['contents']['submenu']['comment'] = ['title' => '댓글', 'description' => 'blur blur~', 'link' => '/manage/comment']; return $menu; }); }
/** * Register the service provider. * * @return void */ public function register() { $this->app->singleton('xe.trash', function ($app) { $proxyClass = $app['xe.interception']->proxy(TrashManager::class, 'Trash'); return new $proxyClass($app['xe.register'], $app['xe.db']->connection()); }); // /** // * register command // */ // $this->commands([ // Commands\Trash::class, // ]); // manage menu 등록 intercept('XeSettings@getManageMenu', ['trash.managemenu' => ['before' => 'manage.sort']], function ($target) { $menu = $target(); $menu['contents']['submenu']['trash'] = ['title' => '휴지통 관리', 'description' => 'blur blur~', 'link' => route('manage.trash.index')]; return $menu; }); }
public function boot() { intercept('XeStorage@upload', 'orientator.orientate', function ($target, $uploaded, $path, $name = null, $disk = null, $user = null) { /** @var UploadedFile $uploaded */ if ($uploaded->isValid()) { $mime = $uploaded->getMimeType(); /** @var \Xpressengine\Media\Handlers\ImageHandler $imageHandler */ $imageHandler = app('xe.media')->getHandler(Media::TYPE_IMAGE); // todo: 모바일 판단여부 적용 or 무시 (ex. app('request')->isMobile()) if ($imageHandler->isAvailable($mime)) { $manager = new ImageManager(); $image = $manager->make($uploaded); if (isset($image->exif()['Orientation'])) { $content = $image->orientate()->encode()->getEncoded(); file_put_contents($uploaded->getPathname(), $content); $uploaded = new UploadedFile($uploaded->getPathname(), $uploaded->getClientOriginalName(), $uploaded->getClientMimeType(), strlen($content)); } } } return $target($uploaded, $path, $name, $disk, $user); }); }
/** * Register the service provider. * * @return void */ public function register() { $this->app->singleton('xe.widget', function ($app) { $proxyClass = $app['xe.interception']->proxy(WidgetHandler::class, 'Widget'); $widgetHandler = new $proxyClass($app['xe.pluginRegister'], $app['xe.auth'], $app['view'], $app['config']->get('app.debug') === true); return $widgetHandler; }); $this->app->singleton('xe.widget.parser', function ($app) { $handler = $app['xe.widget']; return new WidgetParser($handler); }); $this->app->bind('Xpressengine\\Widget\\WidgetHandler', 'xe.widget'); $this->app->bind('Xpressengine\\Widget\\WidgetParser', 'xe.widget.parser'); intercept('HtmlRenderer@render', 'widget.replace', function ($target) { $htmlResponseString = $target(); /** * @var WidgetParser $parser */ $parser = app('xe.widget.parser'); $htmlResponseString = $parser->parseXml($htmlResponseString); return $htmlResponseString; }); }
/** * register comment intercept * * @return void */ protected function registerCommentIntercept() { $app = $this->app; // add comment interception intercept('Comment@add', 'DocumentCommentCountIncrease', function ($method, CommentEntity $comment, MemberEntityInterface $user = null) use($app) { /** @var VirtualConnection $conn */ $conn = $app['xe.db']->connection('document'); $conn->beginTransaction(); // add comment $result = $method($comment, $user); /** @var DocumentHandler $documentHandler */ $documentHandler = app('xe.document'); $doc = $documentHandler->get($comment->targetId, $comment->instanceId); /** @var CommentHandler $commentHandler */ $commentHandler = app('xe.comment'); $doc->commentCount = $commentHandler->countAllByTarget($comment->instanceId, $comment->targetId); $documentHandler->put($doc); $conn->commit(); return $result; }); intercept('Comment@remove', 'DocumentCommentCountDecrease', function ($method, CommentEntity $comment) use($app) { /** @var VirtualConnection $conn */ $conn = $app['xe.db']->connection('document'); $conn->beginTransaction(); // remove comment $result = $method($comment); /** @var DocumentHandler $documentHandler */ $documentHandler = app('xe.document'); $doc = $documentHandler->get($comment->targetId, $comment->instanceId); /** @var CommentHandler $commentHandler */ $commentHandler = app('xe.comment'); $doc->commentCount = $commentHandler->countAllByTarget($comment->instanceId, $comment->targetId); $documentHandler->put($doc); $conn->commit(); return $result; }); }
private function registerEvent() { intercept('XeStorage@remove', 'media.remove', function ($target, $file) { /** @var MediaManager $manager */ $manager = $this->app['xe.media']; if ($manager->is($file)) { if (!$file instanceof Media) { $file = $manager->make($file); } $manager->metaRemove($file); } return $target($file); }); }
/** * skin 설정할 때 thumbnail table 을 join 할 수 있도록 intercept 등록 * * @return void */ protected static function interceptSetSkinTargetId() { intercept(sprintf('%s@setSkinTargetId', Presenter::class), 'board_gallery_skin::set_skin_target_id', function ($func, $skinTargetId) { $func($skinTargetId); $request = app('request'); $instanceConfig = InstanceConfig::instance(); if ($request instanceof Request) { $isMobile = $request->isMobile(); } else { $isMobile = false; } $assignedSkin = XeSkin::getAssigned([$skinTargetId, $instanceConfig->getInstanceId()], $isMobile ? 'mobile' : 'desktop'); // target 의 스킨이 현재 skin 의 아이디와 일치하는지 확인 if (in_array($assignedSkin->getId(), static::getThumbSkins())) { // 리스트 출력할 때 gallery thumbnail 확인을 위한 table join 이벤트 등록 Event::listen('xe.plugin.board.articles', function ($query) { $query->leftJoin('board_gallery_thumbs', sprintf('%s.%s', $query->getQuery()->from, 'id'), '=', sprintf('%s.%s', 'board_gallery_thumbs', 'targetId')); }); } }); }
/** * 댓글 등록 시 글 작성자에게 이메일 발송 * 인터셉셥 사용 * * @see http://xpressengine.io/docs/3.0/Interception#사용법 * @see http://xpressengine.io/plugin/xe_aoplist * @return void */ protected function pointInterception() { // 게시물 등록 인터셉트 intercept(BoardHandler::class . '@add', static::getId() . '::board.add', function ($addFunc, array $args, UserInterface $user, ConfigEntity $config) { /** @var Board $board */ $board = $addFunc($args, $user, $config); $pointLog = new PointLog(); $pointLog->userId = $user->getId(); $pointLog->point = 2; // 관리자에서 설정한 값으로 사용하도록 // $config = app('xe.config')->get('openseminar'); // $pointLog->point = $config->get('document_point'); $pointLog->createdAt = date('Y-m-d H:i:s'); $pointLog->save(); $point = Point::find($user->getId()); if ($point === null) { $point = new Point(); } $point->userId = $user->getId(); $point->point = $pointLog->where('userId', $user->getId())->sum('point'); $point->save(); return $board; }); // 댓글 등록 인터셉트트 intercept(CommentHandler::class . '@create', static::getId() . '::comment.add', function ($addFunc, array $inputs, UserInterface $user = null) { /** @var Comment $comment */ $comment = $addFunc($inputs, $user); if ($user == null) { $user = Auth::user(); } $pointLog = new PointLog(); $pointLog->userId = $user->getId(); $pointLog->point = 1; // 관리자에서 설정한 값으로 사용하도록 // $config = app('xe.config')->get('openseminar'); // $pointLog->point = $config->get('comment_point'); $pointLog->createdAt = date('Y-m-d H:i:s'); $pointLog->save(); $point = Point::find($user->getId()); if ($point === null) { $point = new Point(); } $point->userId = $user->getId(); $point->point = $pointLog->where('userId', $user->getId())->sum('point'); $point->save(); return $comment; }); }
public static function registerManagerAlarmIntercept() { intercept(sprintf('%s@add', BoardHandler::class), static::class . '-manager-board-alarm', function ($func, $args, $user, $config) { $board = $func($args, $user, $config); /** @var UrlHandler $urlHandler */ $urlHandler = app('xe.board.url'); $urlHandler->setConfig($config); $url = $urlHandler->getShow($board); $data = ['title' => xe_trans('board::newPostsRegistered'), 'contents' => sprintf('<a href="%s" target="_blank">%s</a><br/><br/><br/>%s', $url, $url, $board->pureContent)]; /** @var ConfigHandler $configHandler */ $configHandler = app('xe.board.config'); $config = $configHandler->get($board->instanceId); if ($config->get('managerEmail') === null) { return $board; } $managerEmails = explode(',', trim($config->get('managerEmail'))); if (count($managerEmails) == 0) { return $board; } foreach ($managerEmails as $toMail) { if (!$toMail) { continue; } Mail::send('emails.notice', $data, function ($m) use($toMail, $board) { $fromEmail = app('config')->get('mail.from.address'); $applicationName = xe_trans(app('xe.site')->getSiteConfig()->get('site_title')); $menuItem = app('xe.menu')->getItem($board->instanceId); $subject = sprintf('[%s - %s] %s', $applicationName, xe_trans($menuItem->title), xe_trans('board::newPostsRegistered')); $m->from($fromEmail, $applicationName); $m->to($toMail, 'Board manager'); $m->subject($subject); }); } return $board; }); }
/** * Register the service provider. * * @return void */ public function register() { $this->app->bind('xe.media', function ($app) { $config = $app['config']['xe.media']; $proxyClass = $app['xe.interception']->proxy(MediaManager::class, 'Media'); $mediaManager = new $proxyClass(new CommandFactory(), $config['thumbnail']); $image = new ImageHandler($app['xe.storage'], new ImageRepository($app['xe.db']->connection())); $mediaManager->extend(Media::TYPE_IMAGE, $image); $extensionName = isset($config['videoExtensionDefault']) ? $config['videoExtensionDefault'] : 'dummy'; $method = 'create' . ucfirst($extensionName) . 'Extension'; if (method_exists($this, $method) !== true) { throw new \InvalidArgumentException(sprintf('Unknown extension [%s]', $config['videoExtensionDefault'])); } $extension = $this->{$method}($config); $video = new VideoHandler($app['xe.storage'], new VideoRepository($app['xe.db']->connection()), new \getID3(), new TempStorage(), $extension); $mediaManager->extend(Media::TYPE_VIDEO, $video); $audio = new AudioHandler($app['xe.storage'], new AudioRepository($app['xe.db']->connection()), new \getID3(), new TempStorage()); $mediaManager->extend(Media::TYPE_AUDIO, $audio); return $mediaManager; }, true); $app = $this->app; intercept('Storage@remove', 'media.remove', function ($target, $file) use($app) { /** @var MediaManager $manager */ $manager = $app['xe.media']; if ($manager->is($file)) { $media = $manager->make($file); if ($media->originId === null) { $manager->getHandler(Media::TYPE_IMAGE)->removeThumbnails($media); } $manager->remove($media); } return $target($file); }); }
function a($x, $y) { return intercept($x, $y); }