Преглед изворни кода

U ref list in more functions: show object labels

Piotr Labudda пре 7 година
родитељ
комит
8742690fb2
3 измењених фајлова са 66 додато и 10 уклоњено
  1. 46 6
      SE/se-lib/ACL.php
  2. 16 4
      SE/se-lib/Core/AclHelper.php
  3. 4 0
      SE/se-lib/V.php

+ 46 - 6
SE/se-lib/ACL.php

@@ -580,20 +580,60 @@ class ACL {
 	// AclBase->canWriteRecord
 	// AclBase->canReadRecord
 
-	static function _getAclInfo($idZasob) {
+	static function _getAclInfo($mode = 'idZasob', $query) {
 		static $_aclInfoCache = [];
-		if (array_key_exists($idZasob, $_aclInfoCache)) return $_aclInfoCache[$idZasob];
+		switch ($mode) {
+			case 'idZasob': {
+				$idZasob = $query;
+				if (array_key_exists($idZasob, $_aclInfoCache)) return $_aclInfoCache[$idZasob];
 
-		$_aclInfoCache[$idZasob] = DB::getPDO()->fetchFirst(" select z.DESC_PL, z.OPIS from CRM_LISTA_ZASOBOW z where z.ID = :id ", [ ':id' => $idZasob ]);
+				$_aclInfoCache[$idZasob] = DB::getPDO()->fetchFirst(" select z.DESC_PL, z.OPIS from CRM_LISTA_ZASOBOW z where z.ID = :id ", [ ':id' => $idZasob ]);
 
-		return $_aclInfoCache[$idZasob];
+				return $_aclInfoCache[$idZasob];
+			}
+			case 'fetchAllByIds': {
+				$ids = $query;
+				if (empty($ids)) throw new Exception("Empty ids list for get All Acl Info");
+				if (!is_array($ids)) throw new Exception("Wrong param ids for get All Acl Info");
+				$sqlIds = implode(",", array_map(['V', 'addSingleQuotes'], $ids));
+				$list = DB::getPDO()->fetchAllByKey(" select z.ID, z.DESC_PL, z.OPIS from CRM_LISTA_ZASOBOW z where z.ID in ({$sqlIds}) ", $key = 'ID');
+				foreach ($list as $id => $info) {
+					$_aclInfoCache[$id] = $info;
+				}
+				return $list;
+			}
+			case 'fetchAllByNs': {
+				$nsList = $query;
+				if (empty($nsList)) throw new Exception("Empty ns list list for get All Acl Info");
+				if (!is_array($nsList)) throw new Exception("Wrong param ns list for get All Acl Info");
+				$sqlNsList = implode(",", array_map(['V', 'addSingleQuotes'], $nsList));
+				$list = DB::getPDO()->fetchAllByKey("
+					select z.ID, z.DESC_PL, z.OPIS
+						, o.namespace
+					from CRM_LISTA_ZASOBOW z
+						join `CRM_#CACHE_ACL_OBJECT` o on ( o.idZasob = z.ID )
+					where o.namespace in ({$sqlNsList})
+				", $key = 'ID');
+				foreach ($list as $id => $info) {
+					$_aclInfoCache[$id] = $info;
+				}
+				return $list;
+			}
+			default: return null;
+		}
+	}
+	static function fetchAllAclInfoByIds($ids) {
+		return self::_getAclInfo('fetchAllByIds', $ids);
+	}
+	static function fetchAllAclInfoByNs($nsList) {
+		return self::_getAclInfo('fetchAllByNs', $nsList);
 	}
 	static function getAclOpis($idZasob) {
-		$aclInfo = self::_getAclInfo($idZasob);
+		$aclInfo = self::_getAclInfo('idZasob', $idZasob);
 		return ($aclInfo && !empty($aclInfo['OPIS'])) ? $aclInfo['OPIS'] : '';
 	}
 	static function getAclLabel($idZasob) {
-		$aclInfo = self::_getAclInfo($idZasob);
+		$aclInfo = self::_getAclInfo('idZasob', $idZasob);
 		return ($aclInfo && !empty($aclInfo['DESC_PL'])) ? $aclInfo['DESC_PL'] : '';
 	}
 

+ 16 - 4
SE/se-lib/Core/AclHelper.php

@@ -279,8 +279,14 @@ class Core_AclHelper {// Helper class for Acl
 		if (count($partsNs) > 2) { // is AntAcl
 			$backRefList = ACL::getBackRefList($ns);
 			DBG::log($backRefList, 'array', "\$backRefList");
+			{
+				$backRefLabelList = ACL::fetchAllAclInfoByNs( array_map( V::makePick('namespace'), $backRefList ) );
+				// DBG::log($backRefLabelList, 'array', "\$backRefLabelList");
+				$backRefLabelsByNs = array_combine( array_map( V::makePick('namespace'), $backRefLabelList ), array_map( V::makePick('DESC_PL'), $backRefLabelList ) );
+				// DBG::log($backRefLabelsByNs, 'array', "\$backRefLabelsByNs");
+			}
 			foreach ($backRefList as $backRef) { // [ namespace, idInstance ]
-				$backRefLabel = $backRef['namespace']; // TODO: get DESC from Zasoby
+				$backRefLabel = V::get($backRef['namespace'], $backRef['namespace'], $backRefLabelsByNs);
 				$backRefShort = explode("/", $backRefLabel);
 				$backRefShort = array_pop($backRefShort);
 				$backRefShort = (strlen($backRefShort) > 28) ? substr($backRefShort, 0, 28) . "..." : $backRefShort;
@@ -300,7 +306,7 @@ class Core_AclHelper {// Helper class for Acl
 						'childRefNS' => $acl->getNamespace(),
 						'childRefPK' => $id,
 					]),
-					'title' => "Powiązania od '{$backRefLabel}'",
+					'title' => "Powiązania od '{$backRefLabel}' ({$totalBackRefs})",
 					'label' => "Powiązania od '{$backRefShort}' <span class=\"badge\">{$totalBackRefs}</span>",
 				];
 			}
@@ -308,8 +314,14 @@ class Core_AclHelper {// Helper class for Acl
 		if (count($partsNs) > 2) { // is AntAcl
 			$refList = ACL::getRefList($ns);
 			DBG::log($refList, 'array', "\$refList");
+			{
+				$refLabelList = ACL::fetchAllAclInfoByNs( array_map( V::makePick('namespace'), $backRefList ) );
+				// DBG::log($refLabelList, 'array', "\$refLabelList");
+				$refLabelsByNs = array_combine( array_map( V::makePick('namespace'), $refLabelList ), array_map( V::makePick('DESC_PL'), $refLabelList ) );
+				// DBG::log($refLabelsByNs, 'array', "\$refLabelsByNs");
+			}
 			foreach ($refList as $refInfo) { // [ namespace, idInstance ]
-				$refLabel = $refInfo['namespace']; // TODO: get DESC from Zasoby
+				$refLabel = V::get($refInfo['namespace'], $refInfo['namespace'], $refLabelsByNs);
 				$refShortLabel = explode("/", $refLabel);
 				$refShortLabel = array_pop($refShortLabel);
 				$refShortLabel = (strlen($refShortLabel) > 28) ? substr($refShortLabel, 0, 28) . "..." : $refShortLabel;
@@ -330,7 +342,7 @@ class Core_AclHelper {// Helper class for Acl
 						'backRefPK' => $id,
 						'backRefField' => Api_WfsNs::typeName($refInfo['namespace']),
 					]),
-					'title' => "Powiązania do '{$refLabel}'",
+					'title' => "Powiązania do '{$refLabel}' ({$totalRefs})",
 					'label' => "Powiązania do '{$refShortLabel}' <span class=\"badge\">{$totalRefs}</span>",
 				];
 			}

+ 4 - 0
SE/se-lib/V.php

@@ -570,6 +570,10 @@ EOF';
 		return $items;
 	}
 
+	static function addSingleQuotes($str) {
+		return "'{$str}'";
+	}
+
 	public static function arrayToXML($array, $formatOutput = false, $root = "root") {
 
 		$arrayToXML_rec = function($data, $dom, $node, $parent = null) use (&$arrayToXML_rec) {