/** * @param $zip_file * @return array|string */ static function install($zip_file) { $already_installed = static::modules(); # Extract archive $zip = new \ZipArchive(); if ($zip->open($zip_file)) { if (!$zip->extractTo(ROOT)) { return 'admin.insta.error.101'; } } # Migrate database $db = NCService::load('Database')->connection(); $new = array_diff($already_installed, static::modules()); foreach ($new as $module_name) { $migration = ROOT . S . 'engine' . S . 'Module' . S . ucfirst($module_name) . S . 'migration.sql'; if (!file_exists($migration)) { continue; } $queries = file_get_contents($migration); $queries = explode(';', $queries); foreach ($queries as $sql) { $db->query($sql); } } return $new; }
public function edit_page(Request $request, $matches) { $title = $this->lang->translate('page.create'); // Get page for updating $id = intval($matches->get('id', $request->get('id'))); if ($id > 0) { $page = \Page::find_by_id($id); $title = $this->lang->translate('page.editing', $page->title); } else { $page = ['title' => $this->lang->translate('page.name'), 'content' => '', 'template' => 'default.twig']; } // Create or update page if ($request->isMethod('post')) { if ($page instanceof \Page) { $page->title = $request->get('title'); $page->content = $request->get('content'); $page->slug = $request->get('slug'); $page->template = $request->get('template'); } else { $page = new \Page(['title' => $request->get('title'), 'content' => $request->get('content'), 'slug' => $request->get('slug'), 'template' => $request->get('template'), 'author_id' => $this->user->id]); // Ping sitemap NCService::load('SocialMedia.Ping'); } // Updating instance $page->save(); $page = $page->to_array(); return static::json_response(['success' => true, 'message' => $this->lang->translate('form.saved')]); } return $this->view->render('pages/create.twig', ['page' => $page, 'title' => $title, 'templates' => $this->view->list_files('pages', '@current')]); }
/** * @param null $redirect_uri * @return bool */ public static function go($redirect_uri = null) { /** @var SocialMedia $smp */ $smp = NCService::load('SocialMedia'); /** @var Google $manager */ $manager = $smp->go(); return $manager->setup($_GET); }
public function __construct() { session_start(); // Init request and response objects Env::$request = Request::createFromGlobals(); Env::$response = Response::create(); // Loads database NCService::load('Database'); // Starts application kernel NCService::load('Application', [Env::$request->server->get('REQUEST_URI')]); }
/** * Comments list * * @param $request * @return mixed */ public function comments_list($request) { // Delete page if ($request->get('delete')) { $delete = $request->get('delete'); if ($delete != 'all') { $comment = \Comment::find_by_id(intval($delete)); if ($comment) { // Delete child comments \Comment::table()->delete('parent_id = ' . $comment->id); if ($comment->delete()) { $this->view->assign('message', $this->lang->translate('form.deleted')); } } } else { \Comment::table()->delete('1'); $this->view->assign('message', $this->lang->translate('form.deleted')); } } // Filter $filter = []; if ($request->get('author')) { $author = \User::find($request->get('author')); if ($author) { $filter['conditions'] = ['author_id = ?', $author->id]; } } $filter['order'] = 'id DESC'; if ($request->order) { $filter['order'] = $request->order; } /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \Comment::count('all')]); $filter = array_merge($filter, $paginator->limit()); // Filter users $comments = \Comment::all($filter); $comments = \Comment::as_array($comments); return $this->view->render('comment/list.twig', ['title' => $this->lang->translate('comment.list'), 'comments_list' => $comments, 'listing' => $paginator->pages(), 'page' => $paginator->cur_page]); }
/** * Import videos from youtube * * @param Request $request * @param $match * @return string */ public function import(Request $request, $match) { if ($request->isMethod('post')) { $items = []; $query = ['part' => 'snippet,id', 'channelId' => $request->get('channel')]; // Fetch videos /** @var Google $sm */ $sm = NCService::load('SocialMedia.Google'); while ($response = $sm->request('https://www.googleapis.com/youtube/v3/search', $query)) { $response = json_decode($response, true); $items = array_merge($items, $response['items']); // Move to next page or break if (isset($response['nextPageToken']) && $response['nextPageToken']) { $query['pageToken'] = $response['nextPageToken']; } else { break; } } // Save videos foreach ($items as $video) { $id = $video['id']['videoId']; $url = 'https://www.youtube.com/watch?v=' . $id; $title = $video['snippet']['title']; $description = $video['snippet']['description']; $iframe = '<iframe class="youtube" width="560" height="315" src="https://www.youtube.com/embed/' . $id . '" frameborder="0" allowfullscreen></iframe>'; $created_at = strtotime($video['snippet']['publishedAt']); // Get image url $preview_img = end(array_values($video['snippet']['thumbnails']))['url']; // Render import template $body = $this->view->render('@assets/templates/youtube.import.twig', ['title' => $title, 'description' => $description, 'player' => $iframe, 'url' => $url, 'short' => '#split#', 'preview' => $preview_img]); $entity = new \Post(['author_id' => $this->user->id, 'title' => $title, 'content' => str_replace('#split#', '<!-- split -->', $body), 'moderate' => 1, 'category_id' => $request->get('category'), 'created_at' => $created_at, 'updated_at' => $created_at]); $entity->save(); } $this->view->assign('message', $this->lang->translate('post.youtube.done', count($items))); } return $this->view->render('posts/import.twig', ['title' => $this->lang->translate('post.import'), 'categories' => \PostCategory::as_array(\PostCategory::all())]); }
/** * Comments list * * @param $request * @param $matches * @return mixed */ public function posts_list($request, $matches) { $topic = $this->view->get('topic', $matches->get('topic')); $topic = $topic instanceof \ForumTheme ? $topic : \ForumTheme::find($topic); $filter = ['conditions' => ['theme_id = ?', $topic->id], 'order' => 'created_at DESC']; /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \ForumPost::count($filter)]); $filter = array_merge($filter, $paginator->limit()); // Comments $comments = \ForumPost::find('all', $filter); $comments = \ForumPost::as_array($comments); // Context $context = ['topic' => $topic, 'posts_list' => $comments, 'page' => $paginator->cur_page, 'listing' => $paginator->pages()]; // Add comment status if ($status = $this->view->get('status', false)) { $context['status'] = $status; } // Build response if ($request->get('type', 'html') == 'json') { unset($context['listing']); $context['pages'] = $paginator->pages; $context['rows'] = $paginator->num_rows; return static::json_response($context); } return $this->view->render('forum/posts.twig', $context); }
/** * Comments list * * @param $request * @param $matches * @return mixed */ public function likes_list($request, $matches) { $post = trim($matches->get('post'), '-+ '); $filter = ['conditions' => ['post = ?', $post], 'order' => 'created_at DESC']; /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \Like::count($filter)]); $filter = array_merge($filter, $paginator->limit()); // Likes $likes = \Like::find('all', $filter); $likes = \Like::as_array($likes); // Context $context = ['rating' => \Like::rating($post), 'likes' => $likes, 'page' => $paginator->cur_page, 'listing' => $paginator->pages()]; // Build response if ($request->get('type', 'html') == 'json') { unset($context['listing']); $context['pages'] = $paginator->pages; $context['rows'] = $paginator->num_rows; return static::json_response($context); } return $this->view->render('likes/list.twig', $context); }
/** * @param NCModule $module * @param Translate $lang */ public function load_globals(NCModule $module, Translate $lang) { /** @var array $modules */ $modules = NCService::load('Module')->modules('all'); foreach ($modules as $mdl_dir) { $globalize = '\\Module\\' . $mdl_dir . '\\Module::globalize'; if (!is_callable($globalize)) { continue; } $globals = call_user_func($globalize, $module, $this, $lang); if ($globals) { foreach ($globals as $k => $v) { if (is_int($k)) { break; } if ($v instanceof NCBlock) { $this->assign($k, $v->render($this)); continue; } $this->assign($k, $v); } } } }
/** * @param Request $request * @param null $matches * @return mixed|string */ public function create(Request $request, $matches = null) { $this->authenticated_only(); if (!$this->user->can('publicate')) { return $this->error403($request); } $title = $this->lang->translate('post.create'); // Get post for updating $id = intval($matches->get('id', $request->get('id'))); if ($id > 0) { $post = \Post::find(['conditions' => ['id = ? AND author_id = ?', $id, $this->user->id]]); $title = $this->lang->translate('post.editing', $post->title); } else { $last_category = \PostCategory::last(); if ($last_category) { $last_category = $last_category->to_array(); } else { $last_category = null; } $post = ['title' => $this->lang->translate('post.name'), 'content' => '', 'category' => $last_category]; } // Create or update page if ($request->isMethod('post')) { if ($post instanceof \Post) { $post->title = $request->get('title'); $post->content = $request->get('content'); $post->category_id = $request->get('category'); $post->keywords = $request->get('keywords'); $post->slug = $request->get('slug'); $post->moderate = $this->user->can('premoderate_publ'); } else { $post = new \Post(['title' => $request->get('title'), 'content' => $request->get('content'), 'category_id' => $request->get('category'), 'keywords' => $request->get('keywords'), 'slug' => $request->get('slug'), 'author_id' => $this->user->id, 'moderate' => $this->user->can('premoderate_publ')]); } // Updating instance $post->save(); if (!$post->moderate) { // Exporting to social static::export($post, $this->view); // Ping sitemap NCService::load('SocialMedia.Ping'); } return static::json_response(['success' => true, 'message' => $this->lang->translate('form.saved')]); } if ($post instanceof \Post) { $post = $post->to_array(); } return $this->view->render('posts/create.twig', ['post' => $post, 'title' => $title, 'categories' => \PostCategory::as_array(\PostCategory::all())]); }
/** * Comments list * * @param $request * @param $matches * @return mixed */ public function comments_list($request, $matches) { $post = trim($this->view->get('com', $matches->get('post'))); $filter = ['conditions' => ['post = ?', $post], 'order' => 'created_at DESC']; /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \Comment::count($filter)]); $filter = array_merge($filter, $paginator->limit()); // Comments $comments = \Comment::find('all', $filter); $comments = \Comment::as_array($comments); // Context $context = ['com' => $post, 'comments' => $comments, 'page' => $paginator->cur_page, 'listing' => $paginator->pages()]; // Add comment status if ($status = $this->view->get('status', false)) { $context['status'] = $status; } // Build response if ($request->get('type', 'html') == 'json') { unset($context['listing']); $context['pages'] = $paginator->pages; $context['rows'] = $paginator->num_rows; return static::json_response($context); } return $this->view->render('comment/list.twig', $context); }
/** * Installed modules list * * @return array */ static function modules() { return NCService::load('Module')->modules(); }
/** * @param $url * @param $theme * @param $namespace */ public function __construct($url, $theme = 'default', $namespace = '') { // Authentication /** @var Auth auth */ $this->auth = NCService::load('User.Auth'); /** @var \User user */ $this->user = $this->auth->identify(Env::$request->cookies->get('sess')); // Settings /** @var Settings settings */ $this->settings = NCService::load('Application.Settings'); // Analytics module if ($this->analytics) { $counter = NCService::load('Application.Analytics', [$this->user ? $this->user->id : null]); $counter->save(); } // Renderring /** @var Theme view */ $this->view = NCModuleCore::load_view($theme); // Translation /** @var Translate lang */ $this->lang = NCModuleCore::load_lang(); // Module level routing /** @var NCRouter map */ $this->map = new NCRouter($this, $namespace); // Adding sitemap to urls $this->map->addRoute('sitemap.xml', [$this, 'sitemap'], 'sitemap'); // Register reverse url filter $this->view->twig->addFilter(new \Twig_SimpleFilter('url', [$this->map, 'reverse_filter'])); // Register translate filters $this->view->twig->addFilter(new \Twig_SimpleFilter('lang', [$this->lang, 'translate'])); $this->view->twig->addFilter(new \Twig_SimpleFilter('dlang', [$this->lang, 'translate_date'])); // Assign user $this->view->assign('user', $this->user ? $this->user->to_array() : []); $this->view->assign('group', $this->user ? $this->user->group : []); // Assign captcha URL $this->view->assign('secure_image', NCModuleCore::$captcha_url); // Loading modules globals $this->view->load_globals($this, $this->lang); // Disable access to banned users if ($this->user->ban_time > time() || $this->user->ban_time == -1) { Env::$response->setContent($this->errorBanned(Env::$request, $this->user->ban_reason)); Env::$response->send(); return; } // Check access to current module if (!$this->access()) { Env::$response->setContent($this->error403(Env::$request)); Env::$response->send(); return; } // Build current module map $this->route(); /** @var NCRoute $route */ $route = $this->map->match($url); // Check route if (!is_callable($route->callback)) { Env::$response->setContent($this->error404(Env::$request)); Env::$response->send(); return; } // Bufferization content ob_start(); $this->configure(); if (strpos($url, 'sitemap.xml') > -1) { Env::$response->headers->set('Content-Type', 'application/xml'); $response = call_user_func($route->callback, new NCSitemapBuilder(), $this->map); $response = strval($response); } else { $response = call_user_func($route->callback, Env::$request, $route->matches); } $buffer = ob_get_clean(); Env::$response->setContent(!is_null($response) ? $response : $buffer); // Flush content Env::$response->send(); }
/** * View users list * * @param Request $request * @param $matches * @return mixed */ public function users_list(Request $request, $matches) { $filter = []; $title = $this->lang->translate('user.list'); // Filtering by user if ($request->get('group')) { $filter['conditions'] = ['group_id = ?', intval($request->get('group'))]; $group = \Group::find($request->get('group')); if ($group) { $title = $this->lang->translate('user.profile.group') . ' ' . $group->name; } } // Ordering table if ($request->order) { $filter['order'] = $request->order; } /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, $filter ? \User::count($filter) : \User::count()]); $filter = array_merge($filter, $paginator->limit()); // Filter users $users = \User::all($filter); $users = array_map(function ($i) { return $i->to_array(); }, $users); return $this->view->render('users/list.twig', ['title' => $title, 'users_list' => $users, 'listing' => $paginator->pages(), 'page' => $paginator->cur_page]); }
public function logout(Request $request) { /** @var Auth $service */ $service = NCService::load('User.Auth'); $service->logout(); Env::$response->sendHeaders(); header('Location: ' . $this->map->reverse('login')); die; }
/** * Exporting to social */ public function export($templates) { /** @var \Service\SocialMedia\SocialMedia $smp */ $smp = \System\Engine\NCService::load('SocialMedia'); $post_url = '/post/' . $this->id . '-' . $this->slug . '.html'; $url = \System\Environment\Env::$request->getSchemeAndHttpHost() . $post_url; // Posting vk if ($this->category->post_vkontakte && isset($templates['vkontakte']) && !$this->post_twitter) { $vk = $smp->vk(); $this->assign_attribute('post_vkontakte', $vkp = $vk->m_post($this->category->post_vkontakte, $templates['vkontakte'], ['attachments' => $url])); } // Posting twitter if ($this->category->post_twitter && isset($templates['twitter']) && !$this->post_twitter) { $tw = $smp->tw(); $this->assign_attribute('post_twitter', $tw->m_post($templates['twitter'], reset($this->images(ROOT)))->id); } if ($this->save()) { return ['vk' => $this->post_vkontakte, 'tw' => $this->post_twitter]; } return false; }
/** * @param $code * @return bool */ static function verify_captcha($code) { /** @var Captcha $captcha */ $captcha = NCService::load('Application.Captcha'); return $captcha->is_valid($code); }
/** * @return \Service\User\Permissions */ public static function getPermissionsMap() { if (!static::$permissionsMap) { static::$permissionsMap = NCService::load('User.Permissions'); } return static::$permissionsMap; }
public function subjects(Request $request, $matches) { $title = $this->lang->translate('forum.list'); // Delete topic if ($request->get('delete')) { $forum = \Forum::find_by_id(intval($request->get('delete'))); if ($forum) { $forum->delete(); $this->view->assign('message', $this->lang->translate('form.deleted')); } } // Filter $filter = ['conditions' => ['forum_id < 1']]; if ($request->get('author')) { $author = \User::find($request->get('author')); if ($author) { $filter['conditions'] = ['author_id = ?', $author->id]; } } // Parent if ($request->get('parent')) { $parent = \Forum::find($request->get('parent')); if ($parent) { $filter['conditions'] = ['forum_id = ?', $parent->id]; } } $filter['order'] = 'id DESC'; if ($request->order) { $filter['order'] = $request->order; } /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \Forum::count('all')]); $filter = array_merge($filter, $paginator->limit()); // Filter topics $forums = \Forum::as_array(\Forum::all($filter)); return $this->view->render('forum/list.twig', ['title' => $title, 'forums_list' => $forums, 'listing' => $paginator->pages(), 'page' => $paginator->cur_page]); }