浏览代码

added special filters in Przypomnij StorageAcl

Piotr Labudda 8 年之前
父节点
当前提交
10537941ff
共有 2 个文件被更改,包括 101 次插入1 次删除
  1. 9 1
      SE/se-lib/AclQueryFeatures.php
  2. 92 0
      SE/se-lib/Schema/PrzypomnijStorageAcl.php

+ 9 - 1
SE/se-lib/AclQueryFeatures.php

@@ -329,7 +329,15 @@ class AclQueryFeatures {
 					case 'Status': $this->_query->where($this->parseSpecialFilterStatus($v)); break;
 					case 'Spotkania': $this->_query->where($this->parseSpecialFilterSpotkania($v)); break;
 					case 'Access': break; // SKIP - used below
-					default: throw new Exception("Not Implemented special filter '".substr($k, 3)."'");
+					default: {
+						if (method_exists($this->_acl, 'parseSpecialFilter')) {
+							$this->_query->where(
+								$this->_acl->parseSpecialFilter(substr($k, 3), $v)
+							);
+						} else {
+							throw new Exception("Not Implemented special filter '".substr($k, 3)."'");
+						}
+					}
 				}
 			} else if ('ogc:Filter' === $k) {
 				$this->_query->where($this->parseOgcFilter($v));

+ 92 - 0
SE/se-lib/Schema/PrzypomnijStorageAcl.php

@@ -747,4 +747,96 @@ class Schema_PrzypomnijStorageAcl extends Core_AclSimpleSchemaBase {
 		return in_array($fieldName, array_keys($this->_simpleSchema['root']));
 	}
 
+	// TODO: to use in AclQueryFeatures
+	function parseSpecialFilter($filterName, $value) { // @return string | array | null
+		switch ($filterName) {
+			case 'UserStatus': return $this->_parseSpecialFilterUserStatus($value);
+			case 'ns': return $this->_parseSpecialFilterNamespace($value);
+			case 'time': return $this->_parseSpecialFilterTime($value);
+			default: return null;
+		}
+	}
+	function _parseSpecialFilterUserStatus($value) {
+		switch ($value) {
+			case 'IS_ACTIVE': return ['USER__IS_ACTIVE', '=', '1'];
+			case 'IS_NOT_ACTIVE': return ['USER__IS_ACTIVE', '=', '0'];
+			default: return null;
+		}
+	}
+	function _parseSpecialFilterNamespace($value) {
+		switch ($value) {
+			case 'IN7_MK_BAZA_DYSTRYBUCJI': return ['namespace', '=', 'default_db/IN7_MK_BAZA_DYSTRYBUCJI'];
+			case 'IN7_DZIENNIK_KORESP': return ['namespace', '=', 'default_db/IN7_DZIENNIK_KORESP'];
+			case 'CRM_PROCES': return ['namespace', '=', 'default_db/CRM_PROCES'];
+			case 'PROBLEMS': return ['namespace', '=', 'default_db/PROBLEMS'];
+			case 'CRM_LISTA_ZASOBOW': return ['namespace', '=', 'default_db/CRM_LISTA_ZASOBOW'];
+			case 'MK_Rewiry': return ['namespace', '=', 'default_db/MK_Rewiry'];
+			case 'BUILDINGS': return ['namespace', '=', 'default_db/BUILDINGS'];
+			case 'QUALITY_NOTICES': return ['namespace', '=', 'default_db/QUALITY_NOTICES'];
+			case 'BADANIA_W_TERENIE': return ['namespace', '=', 'default_db/BADANIA_W_TERENIE'];
+			default: return null;
+		}
+	}
+	function _parseSpecialFilterTime($value) {
+		switch ($value) {
+			case 'PO_TERMINIE': return ['L_APPOITMENT_DATE', 'and', [
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN_NOW'],
+			] ];
+			case 'DZISIAJ': return ['L_APPOITMENT_DATE', 'and', [
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d"), date("Y"))],
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN', mktime(0,0,0, date("m"), date("d") + 1, date("Y"))],
+			] ];
+			case 'W_CIAGU_7_DNI': return ['L_APPOITMENT_DATE', 'and', [
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d") + 1, date("Y"))],
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_LESS_THAN', mktime(0,0,0, date("m"), date("d") + 7, date("Y"))],
+			] ];
+			case 'PO_7_DNIACH': return ['L_APPOITMENT_DATE', 'and', [
+				['L_APPOITMENT_DATE', 'UNIX_TIMESTAMP_GREATER_THAN', mktime(0,0,0, date("m"), date("d") + 7, date("Y"))],
+			] ];
+			case 'BRAK': return ['L_APPOITMENT_DATE', 'or', [
+				['L_APPOITMENT_DATE', '=', ''],
+				['L_APPOITMENT_DATE', '=', '0000-00-00 00:00:00'],
+			] ];
+			default: return null;
+		}
+	}
+	function getSpecialFilters() {
+		$fltrs = array();
+		{
+			$fltrs['UserStatus'] = new stdClass();
+			$fltrs['UserStatus']->icon = 'glyphicon glyphicon-user';
+			$fltrs['UserStatus']->label = 'Status użytkownika';
+			$fltrs['UserStatus']->btns = [];
+			$fltrs['UserStatus']->btns['Aktywny'] = (object)[ 'value' => 'IS_ACTIVE' ];
+			$fltrs['UserStatus']->btns['Nieaktywny'] = (object)[ 'value' => 'IS_NOT_ACTIVE' ];
+		}
+		{
+			$fltrs['ns'] = new stdClass();
+			$fltrs['ns']->icon = 'glyphicon glyphicon-tag';
+			$fltrs['ns']->label = 'Typ rekordu';
+			$fltrs['ns']->btns = [];
+			$fltrs['ns']->btns['Projekty'] = (object)[ 'value' => 'IN7_MK_BAZA_DYSTRYBUCJI' ];
+			$fltrs['ns']->btns['Koresp.'] = (object)[ 'value' => 'IN7_DZIENNIK_KORESP' ];
+			$fltrs['ns']->btns['Procesy'] = (object)[ 'value' => 'CRM_PROCES' ];
+			$fltrs['ns']->btns['Zadania'] = (object)[ 'value' => 'PROBLEMS' ];
+			$fltrs['ns']->btns['Zasoby'] = (object)[ 'value' => 'CRM_LISTA_ZASOBOW' ];
+			$fltrs['ns']->btns['MK_Rewiry'] = (object)[ 'value' => 'MK_Rewiry' ];
+			$fltrs['ns']->btns['Budynki'] = (object)[ 'value' => 'BUILDINGS' ];
+			$fltrs['ns']->btns['Jakość-Zgłoszenia'] = (object)[ 'value' => 'QUALITY_NOTICES' ];
+			$fltrs['ns']->btns['Badania w terenie'] = (object)[ 'value' => 'BADANIA_W_TERENIE' ];
+		}
+		{
+			$fltrs['time'] = new stdClass();
+			$fltrs['time']->icon = 'glyphicon glyphicon-calendar';
+			$fltrs['time']->label = 'Czas';
+			$fltrs['time']->btns = [];
+			$fltrs['time']->btns['po termine'] = (object)[ 'value' => 'PO_TERMINIE' ];
+			$fltrs['time']->btns['dzisiaj'] = (object)[ 'value' => 'DZISIAJ' ];
+			$fltrs['time']->btns['w ciągu 7 dni'] = (object)[ 'value' => 'W_CIAGU_7_DNI' ];
+			$fltrs['time']->btns['po 7 dniach'] = (object)[ 'value' => 'PO_7_DNIACH' ];
+			$fltrs['time']->btns['brak'] = (object)[ 'value' => 'BRAK' ];
+		}
+		return $fltrs;
+	}
+
 }