Example #1
0
 /**
  * @dataProvider queryForFilterData
  *
  * @param mixed $will
  * @param string $query
  * @param array $parameters
  */
 public function testQueryForFilter($will, $query, $parameters)
 {
     $this->mockUserSession('test');
     $this->config->expects($this->any())->method('getUserValue')->willReturnMap([['test', 'activity', 'notify_stream_' . Activity::TYPE_FAVORITES, false, true]]);
     if (is_array($will)) {
         $this->activityHelper->expects($this->any())->method('getFavoriteFilePaths')->with('test')->willReturn($will);
     } else {
         $this->activityHelper->expects($this->any())->method('getFavoriteFilePaths')->with('test')->willThrowException($will);
     }
     $result = $this->activityExtension->getQueryForFilter('all');
     $this->assertEquals([$query, $parameters], $result);
     $this->executeQueryForFilter($result);
 }
Example #2
0
 /**
  * For a given filter the extension can specify the sql query conditions including parameters for that query.
  * In case the extension does not know the filter false is to be returned.
  * The query condition and the parameters are to be returned as array with two elements.
  * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
  *
  * @param string $filter
  * @return array|false
  */
 public function getQueryForFilter($filter)
 {
     $user = $this->activityManager->getCurrentUserId();
     // Display actions from all files
     if ($filter === self::FILTER_FILES) {
         return ['`app` = ?', [self::APP_FILES]];
     }
     if (!$user) {
         // Remaining filters only work with a user/token
         return false;
     }
     // Display actions from favorites only
     if ($filter === self::FILTER_FAVORITES || in_array($filter, ['all', 'by', 'self']) && $this->userSettingFavoritesOnly($user)) {
         try {
             $favorites = $this->helper->getFavoriteFilePaths($user);
         } catch (\RuntimeException $e) {
             // Too many favorites, can not put them into one query anymore...
             return ['`app` = ?', [self::APP_FILES]];
         }
         /*
          * Display activities only, when they are not `type` create/change
          * or `file` is a favorite or in a favorite folder
          */
         $parameters = $fileQueryList = [];
         $parameters[] = self::APP_FILES;
         $parameters[] = self::APP_FILES;
         $fileQueryList[] = '(`type` <> ? AND `type` <> ?)';
         $parameters[] = self::TYPE_SHARE_CREATED;
         $parameters[] = self::TYPE_SHARE_CHANGED;
         foreach ($favorites['items'] as $favorite) {
             $fileQueryList[] = '`file` = ?';
             $parameters[] = $favorite;
         }
         foreach ($favorites['folders'] as $favorite) {
             $fileQueryList[] = '`file` LIKE ?';
             $parameters[] = $this->connection->escapeLikeParameter($favorite) . '/%';
         }
         return [' CASE ' . 'WHEN `app` <> ? THEN 1 ' . 'WHEN `app` = ? AND (' . implode(' OR ', $fileQueryList) . ') THEN 1 ' . 'ELSE 0 ' . 'END = 1 ', $parameters];
     }
     return false;
 }