public function sidebarAction() { $apps = array('webasyst' => wa()->getAppInfo('webasyst')) + wa()->getUser()->getApps(); $locale = wa()->getUser()->getLocale(); $widgets = array(); foreach ($apps as $app_id => $app) { foreach (wa($app_id)->getConfig()->getWidgets() as $w_id => $w) { if (!empty($w['rights'])) { if (!waWidget::checkRights($w['rights'])) { continue; } } if (!empty($w['locale']) && $w['locale'] != $locale) { continue; } $w['size'] = $w['sizes'][0][0] . 'x' . $w['sizes'][0][1]; $widgets[$app_id][] = $w; } } foreach ($apps as $app_id => $app) { if (!isset($widgets[$app_id])) { unset($apps[$app_id]); } } $this->display(array('widgets' => $widgets, 'apps' => $apps)); }
protected function getSettingsConfig() { $blogs = array(); $blog_model = new blogBlogModel(); $blogs[''] = _wp('All blogs'); foreach ($blog_model->getAvailable(wa()->getUser()) as $b) { $blogs[$b['id']] = $b['name']; } $result = parent::getSettingsConfig(); $result['blog_id']['options'] = $blogs; return $result; }
protected function getSettingsConfig() { $feeds = array('http://rss.nytimes.com/services/xml/rss/nyt/InternationalHome.xml' => 'New York Times', 'http://feeds.washingtonpost.com/rss/world' => 'Washington Post', 'http://www.theguardian.com/world/rss' => 'The Guardian'); if (wa()->getLocale() == 'ru_RU') { $feeds = array_merge(array('https://news.yandex.ru/index.rss' => 'Яндекс.Новости', 'http://russian.rt.com/rss/' => 'Russia Today (на русском)'), $feeds); } else { $feeds = array_merge($feeds, array('http://rt.com/rss/news/' => 'Russia Today')); } $feeds = array_merge($feeds, array('custom' => 'RSS feed:')); $result = parent::getSettingsConfig(); $result['rss_feed']['options'] = $feeds; // Select first feed by default if nothing is selected if (empty($result['rss_feed']['value'])) { $result['rss_feed']['value'] = key($feeds); } return $result; }
private static function getSettingsModel() { if (!self::$settings_model) { self::$settings_model = new waWidgetSettingsModel(); } return self::$settings_model; }
public function dashboardAction() { $widget_model = new waWidgetModel(); $locale = wa()->getUser()->getLocale(); // Create dashboard widgets on first login if (!wa()->getUser()->getSettings('webasyst', 'dashboard')) { $apps = wa()->getApps(true); $widgets = array(); foreach ($apps as $app_id => $app) { if ($app_id == 'webasyst' || $this->getUser()->getRights($app_id, 'backend')) { foreach (wa($app_id)->getConfig()->getWidgets() as $w_id => $w) { if (!empty($w['rights'])) { if (!waWidget::checkRights($w['rights'])) { continue; } } if (!empty($w['locale']) && $w['locale'] != $locale) { continue; } $widgets[] = $w; } } } $block = 0; $contact_id = wa()->getUser()->getId(); foreach ($widgets as $w) { $max_size = $w['sizes'][0]; foreach ($w['sizes'] as $s) { if ($s[0] + $s[1] > $max_size[0] + $max_size[1]) { $max_size = $s; } } $row = array('app_id' => $w['app_id'], 'widget' => $w['widget'], 'name' => $w['name'], 'block' => $block++, 'sort' => 0, 'size' => $max_size[0] . 'x' . $max_size[1], 'contact_id' => $contact_id, 'create_datetime' => date('Y-m-d H:i:s')); $widget_model->insert($row); } wa()->getUser()->setSettings('webasyst', 'dashboard', 1); } // fetch widgets $rows = $widget_model->getByContact($this->getUserId()); $widgets = array(); foreach ($rows as $row) { if ($row['app_id'] == 'webasyst' || $this->getUser()->getRights($row['app_id'], 'backend')) { $app_widgets = wa($row['app_id'])->getConfig()->getWidgets(); if (isset($app_widgets[$row['widget']])) { $row['size'] = explode('x', $row['size']); $row = $row + $app_widgets[$row['widget']]; if (!empty($row['rights'])) { if (!waWidget::checkRights($row['rights'])) { continue; } } $row['href'] = wa()->getAppUrl($row['app_id']) . "?widget={$row['widget']}&id={$row['id']}"; foreach ($row['sizes'] as $s) { if ($s == array(1, 1)) { $row['has_sizes']['small'] = true; } elseif ($s == array(2, 1)) { $row['has_sizes']['medium'] = true; } elseif ($s == array(2, 2)) { $row['has_sizes']['big'] = true; } } $widgets[$row['block']][] = $row; } } } // announcement $user = wa()->getUser(); $announcement_model = new waAnnouncementModel(); $apps = $user->getApps(); $data = $announcement_model->getByApps($user->getId(), array_keys($apps), $user['create_datetime']); $announcements = array(); $announcements_apps = array(); foreach ($data as $row) { // show no more than 1 message per application if (!empty($announcements_apps[$row['app_id']])) { continue; } $announcements_apps[$row['app_id']] = true; $announcements[] = $row; } // activity stream $activity_action = new webasystDashboardActivityAction(); $user_filters = wa()->getUser()->getSettings('webasyst', 'dashboard_activity'); if ($user_filters) { $user_filters = explode(',', $user_filters); } else { $user_filters = array(); } $activity = $activity_action->getLogs(array(), $count); $activity_load_more = $count == 50; $is_admin = wa()->getUser()->isAdmin('webasyst'); $public_dashboards = array(); if ($is_admin) { $dashboard_model = new waDashboardModel(); $public_dashboards = $dashboard_model->order('name')->fetchAll('id'); } $this->view->assign(array('widgets' => $widgets, 'notifications' => $announcements, 'public_dashboards' => $public_dashboards, 'apps' => wa()->getUser()->getApps(), 'user_filters' => $user_filters, 'activity_load_more' => $activity_load_more, 'activity' => $activity, 'is_admin' => $is_admin, 'show_tutorial' => !wa()->getUser()->getSettings('webasyst', 'widget_tutorial_closed'))); }