aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/activitymanager.php108
-rw-r--r--lib/public/activity/iextension.php38
-rw-r--r--lib/public/activity/imanager.php24
-rw-r--r--tests/lib/activitymanager.php88
4 files changed, 151 insertions, 107 deletions
diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php
index 30a54fa009c..c4759120a39 100644
--- a/lib/private/activitymanager.php
+++ b/lib/private/activitymanager.php
@@ -40,6 +40,19 @@ class ActivityManager implements IManager {
*/
private $extensions = array();
+ /** @var array list of filters "name" => "is valid" */
+ protected $validFilters = array(
+ 'all' => true,
+ 'by' => true,
+ 'self' => true,
+ );
+
+ /** @var array list of type icons "type" => "css class" */
+ protected $typeIcons = array();
+
+ /** @var array list of special parameters "app" => ["text" => ["parameter" => "type"]] */
+ protected $specialParameters = array();
+
/**
* @param $app
* @param $subject
@@ -124,39 +137,45 @@ class ActivityManager implements IManager {
}
/**
- * @param array $types
- * @param string $filter
+ * @param string $method
* @return array
*/
- function filterNotificationTypes($types, $filter) {
+ function getDefaultTypes($method) {
+ $defaultTypes = array();
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
- $result = $c->filterNotificationTypes($types, $filter);
- if (is_array($result)) {
- $types = $result;
+ $types = $c->getDefaultTypes($method);
+ if (is_array($types)) {
+ $defaultTypes = array_merge($types, $defaultTypes);
}
}
}
- return $types;
+ return $defaultTypes;
}
/**
- * @param string $method
- * @return array
+ * @param string $type
+ * @return string
*/
- function getDefaultTypes($method) {
- $defaultTypes = array();
+ function getTypeIcon($type) {
+ if (isset($this->typeIcons[$type])) {
+ return $this->typeIcons[$type];
+ }
+
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
- $types = $c->getDefaultTypes($method);
- if (is_array($types)) {
- $defaultTypes = array_merge($types, $defaultTypes);
+ $icon = $c->getTypeIcon($type);
+ if (is_string($icon)) {
+ $this->typeIcons[$type] = $icon;
+ return $icon;
}
}
}
- return $defaultTypes;
+
+ $this->typeIcons[$type] = '';
+ return '';
}
/**
@@ -188,38 +207,30 @@ class ActivityManager implements IManager {
* @return array|false
*/
function getSpecialParameterList($app, $text) {
+ if (isset($this->specialParameters[$app][$text])) {
+ return $this->specialParameters[$app][$text];
+ }
+
+ if (!isset($this->specialParameters[$app])) {
+ $this->specialParameters[$app] = array();
+ }
+
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
$specialParameter = $c->getSpecialParameterList($app, $text);
if (is_array($specialParameter)) {
+ $this->specialParameters[$app][$text] = $specialParameter;
return $specialParameter;
}
}
}
+ $this->specialParameters[$app][$text] = false;
return false;
}
/**
- * @param string $type
- * @return string
- */
- function getTypeIcon($type) {
- foreach($this->extensions as $extension) {
- $c = $extension();
- if ($c instanceof IExtension) {
- $icon = $c->getTypeIcon($type);
- if (is_string($icon)) {
- return $icon;
- }
- }
- }
-
- return '';
- }
-
- /**
* @param array $activity
* @return integer|false
*/
@@ -264,23 +275,54 @@ class ActivityManager implements IManager {
* @return boolean
*/
function isFilterValid($filterValue) {
+ if (isset($this->validFilters[$filterValue])) {
+ return $this->validFilters[$filterValue];
+ }
+
foreach($this->extensions as $extension) {
$c = $extension();
if ($c instanceof IExtension) {
if ($c->isFilterValid($filterValue) === true) {
+ $this->validFilters[$filterValue] = true;
return true;
}
}
}
+ $this->validFilters[$filterValue] = false;
return false;
}
/**
+ * @param array $types
+ * @param string $filter
+ * @return array
+ */
+ function filterNotificationTypes($types, $filter) {
+ if (!$this->isFilterValid($filter)) {
+ return $types;
+ }
+
+ foreach($this->extensions as $extension) {
+ $c = $extension();
+ if ($c instanceof IExtension) {
+ $result = $c->filterNotificationTypes($types, $filter);
+ if (is_array($result)) {
+ $types = $result;
+ }
+ }
+ }
+ return $types;
+ }
+
+ /**
* @param string $filter
* @return array
*/
function getQueryForFilter($filter) {
+ if (!$this->isFilterValid($filter)) {
+ return [null, null];
+ }
$conditions = array();
$parameters = array();
diff --git a/lib/public/activity/iextension.php b/lib/public/activity/iextension.php
index b85532ded1f..643ea11cffa 100644
--- a/lib/public/activity/iextension.php
+++ b/lib/public/activity/iextension.php
@@ -42,16 +42,6 @@ interface IExtension {
public function getNotificationTypes($languageCode);
/**
- * The extension can filter the types based on the filter if required.
- * In case no filter is to be applied false is to be returned unchanged.
- *
- * @param array $types
- * @param string $filter
- * @return array|false
- */
- public function filterNotificationTypes($types, $filter);
-
- /**
* For a given method additional types to be displayed in the settings can be returned.
* In case no additional types are to be added false is to be returned.
*
@@ -61,6 +51,15 @@ interface IExtension {
public function getDefaultTypes($method);
/**
+ * A string naming the css class for the icon to be used can be returned.
+ * If no icon is known for the given type false is to be returned.
+ *
+ * @param string $type
+ * @return string|false
+ */
+ public function getTypeIcon($type);
+
+ /**
* The extension can translate a given message to the requested languages.
* If no translation is available false is to be returned.
*
@@ -88,15 +87,6 @@ interface IExtension {
public function getSpecialParameterList($app, $text);
/**
- * A string naming the css class for the icon to be used can be returned.
- * If no icon is known for the given type false is to be returned.
- *
- * @param string $type
- * @return string|false
- */
- public function getTypeIcon($type);
-
- /**
* The extension can define the parameter grouping by returning the index as integer.
* In case no grouping is required false is to be returned.
*
@@ -123,6 +113,16 @@ interface IExtension {
public function isFilterValid($filterValue);
/**
+ * The extension can filter the types based on the filter if required.
+ * In case no filter is to be applied false is to be returned unchanged.
+ *
+ * @param array $types
+ * @param string $filter
+ * @return array|false
+ */
+ public function filterNotificationTypes($types, $filter);
+
+ /**
* 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.
diff --git a/lib/public/activity/imanager.php b/lib/public/activity/imanager.php
index ded17336ed8..bc320a0f8b4 100644
--- a/lib/public/activity/imanager.php
+++ b/lib/public/activity/imanager.php
@@ -72,17 +72,16 @@ interface IManager {
function getNotificationTypes($languageCode);
/**
- * @param array $types
- * @param string $filter
+ * @param string $method
* @return array
*/
- function filterNotificationTypes($types, $filter);
+ function getDefaultTypes($method);
/**
- * @param string $method
- * @return array
+ * @param string $type
+ * @return string
*/
- function getDefaultTypes($method);
+ function getTypeIcon($type);
/**
* @param string $app
@@ -103,12 +102,6 @@ interface IManager {
function getSpecialParameterList($app, $text);
/**
- * @param string $type
- * @return string
- */
- function getTypeIcon($type);
-
- /**
* @param array $activity
* @return integer|false
*/
@@ -126,6 +119,13 @@ interface IManager {
function isFilterValid($filterValue);
/**
+ * @param array $types
+ * @param string $filter
+ * @return array
+ */
+ function filterNotificationTypes($types, $filter);
+
+ /**
* @param string $filter
* @return array
*/
diff --git a/tests/lib/activitymanager.php b/tests/lib/activitymanager.php
index 6a5af7b259b..d227c05d827 100644
--- a/tests/lib/activitymanager.php
+++ b/tests/lib/activitymanager.php
@@ -31,16 +31,6 @@ class Test_ActivityManager extends \Test\TestCase {
$this->assertEquals(2, sizeof($result));
}
- public function testFilterNotificationTypes() {
- $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'FILTER1');
- $this->assertTrue(is_array($result));
- $this->assertEquals(3, sizeof($result));
-
- $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'FILTER2');
- $this->assertTrue(is_array($result));
- $this->assertEquals(4, sizeof($result));
- }
-
public function testDefaultTypes() {
$result = $this->activityManager->getDefaultTypes('stream');
$this->assertTrue(is_array($result));
@@ -51,6 +41,14 @@ class Test_ActivityManager extends \Test\TestCase {
$this->assertEquals(0, sizeof($result));
}
+ public function testTypeIcon() {
+ $result = $this->activityManager->getTypeIcon('NT1');
+ $this->assertEquals('icon-nt-one', $result);
+
+ $result = $this->activityManager->getTypeIcon('NT2');
+ $this->assertEquals('', $result);
+ }
+
public function testTranslate() {
$result = $this->activityManager->translate('APP0', '', '', array(), false, false, 'en');
$this->assertEquals('Stupid translation', $result);
@@ -67,14 +65,6 @@ class Test_ActivityManager extends \Test\TestCase {
$this->assertFalse($result);
}
- public function testTypeIcon() {
- $result = $this->activityManager->getTypeIcon('NT1');
- $this->assertEquals('icon-nt-one', $result);
-
- $result = $this->activityManager->getTypeIcon('NT2');
- $this->assertEquals('', $result);
- }
-
public function testGroupParameter() {
$result = $this->activityManager->getGroupParameter(array());
$this->assertEquals(5, $result);
@@ -90,15 +80,27 @@ class Test_ActivityManager extends \Test\TestCase {
$result = $this->activityManager->isFilterValid('fv01');
$this->assertTrue($result);
- $result = $this->activityManager->isFilterValid('FV2');
+ $result = $this->activityManager->isFilterValid('InvalidFilter');
$this->assertFalse($result);
}
+ public function testFilterNotificationTypes() {
+ $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'fv01');
+ $this->assertTrue(is_array($result));
+ $this->assertEquals(3, sizeof($result));
+
+ $result = $this->activityManager->filterNotificationTypes(array('NT0', 'NT1', 'NT2', 'NT3'), 'InvalidFilter');
+ $this->assertTrue(is_array($result));
+ $this->assertEquals(4, sizeof($result));
+ }
+
public function testQueryForFilter() {
+ // Register twice, to test the created sql part
$this->activityManager->registerExtension(function() {
return new SimpleExtension();
});
- $result = $this->activityManager->getQueryForFilter('filter1');
+
+ $result = $this->activityManager->getQueryForFilter('fv01');
$this->assertEquals(
array(
' and ((`app` = ? and `message` like ?) or (`app` = ? and `message` like ?))',
@@ -106,8 +108,8 @@ class Test_ActivityManager extends \Test\TestCase {
), $result
);
- $result = $this->activityManager->isFilterValid('filter2');
- $this->assertFalse($result);
+ $result = $this->activityManager->getQueryForFilter('InvalidFilter');
+ $this->assertEquals(array(null, null), $result);
}
}
@@ -117,13 +119,6 @@ class SimpleExtension implements \OCP\Activity\IExtension {
return array('NT1', 'NT2');
}
- public function filterNotificationTypes($types, $filter) {
- if ($filter === 'FILTER1') {
- unset($types[0]);
- }
- return $types;
- }
-
public function getDefaultTypes($method) {
if ($method === 'stream') {
return array('DT0');
@@ -132,6 +127,13 @@ class SimpleExtension implements \OCP\Activity\IExtension {
return array();
}
+ public function getTypeIcon($type) {
+ if ($type === 'NT1') {
+ return 'icon-nt-one';
+ }
+ return '';
+ }
+
public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
if ($app === 'APP0') {
return "Stupid translation";
@@ -148,13 +150,6 @@ class SimpleExtension implements \OCP\Activity\IExtension {
return false;
}
- public function getTypeIcon($type) {
- if ($type === 'NT1') {
- return 'icon-nt-one';
- }
- return '';
- }
-
public function getGroupParameter($activity) {
return 5;
}
@@ -174,8 +169,15 @@ class SimpleExtension implements \OCP\Activity\IExtension {
return false;
}
+ public function filterNotificationTypes($types, $filter) {
+ if ($filter === 'fv01') {
+ unset($types[0]);
+ }
+ return $types;
+ }
+
public function getQueryForFilter($filter) {
- if ($filter === 'filter1') {
+ if ($filter === 'fv01') {
return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%'));
}
@@ -189,11 +191,11 @@ class NoOpExtension implements \OCP\Activity\IExtension {
return false;
}
- public function filterNotificationTypes($types, $filter) {
+ public function getDefaultTypes($method) {
return false;
}
- public function getDefaultTypes($method) {
+ public function getTypeIcon($type) {
return false;
}
@@ -205,10 +207,6 @@ class NoOpExtension implements \OCP\Activity\IExtension {
return false;
}
- public function getTypeIcon($type) {
- return false;
- }
-
public function getGroupParameter($activity) {
return false;
}
@@ -221,6 +219,10 @@ class NoOpExtension implements \OCP\Activity\IExtension {
return false;
}
+ public function filterNotificationTypes($types, $filter) {
+ return false;
+ }
+
public function getQueryForFilter($filter) {
return false;
}