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')));
 }