[open-ils-commits] r17228 - in trunk/Open-ILS: src/sql/Pg src/sql/Pg/upgrade web/opac/common/js web/opac/skin/default/js web/opac/skin/default/xml/myopac (phasefx)

svn at svn.open-ils.org svn at svn.open-ils.org
Mon Aug 16 13:41:58 EDT 2010


Author: phasefx
Date: 2010-08-16 13:41:54 -0400 (Mon, 16 Aug 2010)
New Revision: 17228

Added:
   trunk/Open-ILS/src/sql/Pg/upgrade/0373.data.org-setting-opac.org_unit_hiding.depth.sql
Modified:
   trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
   trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql
   trunk/Open-ILS/web/opac/common/js/opac_utils.js
   trunk/Open-ILS/web/opac/common/js/org_utils.js
   trunk/Open-ILS/web/opac/skin/default/js/depth_selector.js
   trunk/Open-ILS/web/opac/skin/default/js/myopac.js
   trunk/Open-ILS/web/opac/skin/default/js/rdetail.js
   trunk/Open-ILS/web/opac/skin/default/js/result_common.js
   trunk/Open-ILS/web/opac/skin/default/xml/myopac/myopac_prefs.xml
Log:
forwardport of 17216, org hiding depth in opac

Modified: trunk/Open-ILS/src/sql/Pg/002.schema.config.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-08-16 17:41:54 UTC (rev 17228)
@@ -68,7 +68,7 @@
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0372'); -- atz
+INSERT INTO config.upgrade_log (version) VALUES ('0373'); -- phasefx
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,

Modified: trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/src/sql/Pg/950.data.seed-values.sql	2010-08-16 17:41:54 UTC (rev 17228)
@@ -6605,3 +6605,19 @@
         ,( 34, 'circ_lib.billing_address')
 ;
 
+-- 0373.data.org-setting-opac.org_unit_hiding.depth.sql
+INSERT INTO config.org_unit_setting_type ( name, label, description, datatype ) VALUES (
+        'opac.org_unit_hiding.depth',
+        oils_i18n_gettext(
+            'opac.org_unit_hiding.depth',
+            'OPAC: Org Unit Hiding Depth', 
+            'coust', 
+            'label'),
+        oils_i18n_gettext(
+            'opac.org_unit_hiding.depth',
+            'This will hide certain org units in the public OPAC if the Original Location (url param "ol") for the OPAC inherits this setting.  This setting specifies an org unit depth, that together with the OPAC Original Location determines which section of the Org Hierarchy should be visible in the OPAC.  For example, a stock Evergreen installation will have a 3-tier hierarchy (Consortium/System/Branch), where System has a depth of 1 and Branch has a depth of 2.  If this setting contains a depth of 1 in such an installation, then every library in the System in which the Original Location belongs will be visible, and everything else will be hidden.  A depth of 0 will effectively make every org visible.  The embedded OPAC in the staff client ignores this setting.', 
+            'coust', 
+            'description'),
+        'integer'
+);
+

Added: trunk/Open-ILS/src/sql/Pg/upgrade/0373.data.org-setting-opac.org_unit_hiding.depth.sql
===================================================================
--- trunk/Open-ILS/src/sql/Pg/upgrade/0373.data.org-setting-opac.org_unit_hiding.depth.sql	                        (rev 0)
+++ trunk/Open-ILS/src/sql/Pg/upgrade/0373.data.org-setting-opac.org_unit_hiding.depth.sql	2010-08-16 17:41:54 UTC (rev 17228)
@@ -0,0 +1,20 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0373'); -- phasefx
+
+INSERT INTO config.org_unit_setting_type ( name, label, description, datatype ) VALUES (
+        'opac.org_unit_hiding.depth',
+        oils_i18n_gettext(
+            'opac.org_unit_hiding.depth',
+            'OPAC: Org Unit Hiding Depth', 
+            'coust', 
+            'label'),
+        oils_i18n_gettext(
+            'opac.org_unit_hiding.depth',
+            'This will hide certain org units in the public OPAC if the Original Location (url param "ol") for the OPAC inherits this setting.  This setting specifies an org unit depth, that together with the OPAC Original Location determines which section of the Org Hierarchy should be visible in the OPAC.  For example, a stock Evergreen installation will have a 3-tier hierarchy (Consortium/System/Branch), where System has a depth of 1 and Branch has a depth of 2.  If this setting contains a depth of 1 in such an installation, then every library in the System in which the Original Location belongs will be visible, and everything else will be hidden.  A depth of 0 will effectively make every org visible.  The embedded OPAC in the staff client ignores this setting.', 
+            'coust', 
+            'description'),
+        'integer'
+);
+
+COMMIT;

Modified: trunk/Open-ILS/web/opac/common/js/opac_utils.js
===================================================================
--- trunk/Open-ILS/web/opac/common/js/opac_utils.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/common/js/opac_utils.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -826,20 +826,43 @@
 	setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 1 );
 }
 	
+function checkOrgHiding() {
+	var context_org = getOrigLocation() || globalOrgTree.id();
+	var depth = fetchOrgSettingDefault( context_org, 'opac.org_unit_hiding.depth');
+	if (isXUL()) {
+		return false; // disable org hiding for staff client
+	}
+	if ( findOrgDepth( context_org ) < depth ) {
+		return false; // disable org hiding if Original Location doesn't make sense with setting depth (avoids disjointed org selectors)
+	}
+	return { 'org' : findOrgUnit(context_org), 'depth' : depth };
+}
+
 var orgTreeSelector;
 function buildOrgSelector(node) {
 	var tree = new SlimTree(node,'orgTreeSelector');
 	orgTreeSelector = tree;
+	var orgHiding = checkOrgHiding();
 	for( var i in orgArraySearcher ) { 
 		var node = orgArraySearcher[i];
 		if( node == null ) continue;
-        if(!isXUL() && !isTrue(node.opac_visible())) continue; 
-		if(node.parent_ou() == null)
+		if(!isXUL() && !isTrue(node.opac_visible())) continue; 
+		if (orgHiding) {
+			if ( ! orgIsMine( orgHiding.org, node, orgHiding.depth ) ) {
+				continue;
+			}
+		}
+		if(node.parent_ou() == null) {
 			tree.addNode(node.id(), -1, node.name(), 
 				"javascript:orgSelect(" + node.id() + ");", node.name());
-		else {
-			tree.addNode(node.id(), node.parent_ou(), node.name(), 
-				"javascript:orgSelect(" + node.id() + ");", node.name());
+		} else {
+			if (orgHiding && orgHiding.depth == findOrgDepth(node)) {
+				tree.addNode(node.id(), -1, node.name(), 
+					"javascript:orgSelect(" + node.id() + ");", node.name());
+			} else {
+				tree.addNode(node.id(), node.parent_ou(), node.name(), 
+					"javascript:orgSelect(" + node.id() + ");", node.name());
+			}
 		}
 	}
 	hideMe($('org_loading_div'));

Modified: trunk/Open-ILS/web/opac/common/js/org_utils.js
===================================================================
--- trunk/Open-ILS/web/opac/common/js/org_utils.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/common/js/org_utils.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -92,14 +92,28 @@
 
 function findSiblingOrgs(node) { return findOrgUnit(node.parent_ou()).children(); }
 
-/* true if 'org' is 'me' or a child of mine */
-function orgIsMine(me, org) {
-	if(!me || !org) return false;
-	if(me.id() == org.id()) return true;
-    var kids = me.children();
+/* true if 'org' is 'me' or a child of mine, or optionally, a child of an ancestor org within the specified depth */
+function orgIsMine(me, org, depth) {
+	if(!me || !org) {
+		return false;
+	}
+	if(me.id() == org.id()) {
+		return true;
+	}
+	if (depth) {
+		while (depth < findOrgDepth(me)) {
+			me = findOrgUnit( me.parent_ou() );
+		}
+		if(me.id() == org.id()) {
+			return true;
+		}
+	}
+	var kids = me.children();
 	for( var i = 0; kids && i < kids.length; i++ ) {
-		if(orgIsMine(kids[i], org))
+		if(orgIsMine(kids[i], org, false)) {
 			return true;
+		}
+
 	}
 	return false;
 }

Modified: trunk/Open-ILS/web/opac/skin/default/js/depth_selector.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/js/depth_selector.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/skin/default/js/depth_selector.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -78,6 +78,7 @@
 	var type;
 	if (location) type = findOrgType(location.ou_type());
 
+	var orgHiding = checkOrgHiding();
 	while( type && location ) {
 		var n = node.cloneNode(true);	
 		n.setAttribute("value", type.depth());
@@ -85,8 +86,14 @@
 		n.appendChild(text(type.opac_label()));
 		selector.appendChild(n);
 		location = findOrgUnit(location.parent_ou());
-		if(location) type = findOrgType(location.ou_type());
-		else type = null;
+		if(location) {
+			type = findOrgType(location.ou_type());
+			if (orgHiding && orgHiding.depth > type.depth()) {
+				type = null;
+			}
+		} else {
+			type = null;
+		}
 	}
 
 	selector.appendChild(node);

Modified: trunk/Open-ILS/web/opac/skin/default/js/myopac.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/js/myopac.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/skin/default/js/myopac.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -21,6 +21,12 @@
 
 function myOPACInit() {
 
+    var orgHiding = checkOrgHiding();
+    if (orgHiding) {
+        hideMe($('prefs_def_location_row'));
+        hideMe($('prefs_def_range_row'));
+    }
+
 	if(!(G.user && G.user.session)) {
         initLogin();
 

Modified: trunk/Open-ILS/web/opac/skin/default/js/rdetail.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/js/rdetail.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/skin/default/js/rdetail.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -44,6 +44,7 @@
 var rdetailEnd = null;
 
 var mfhdDetails = [];
+var orgHiding = false;
 
 /* serials are currently the only use of Dojo strings in the OPAC */
 if (rdetailDisplaySerialHoldings) {
@@ -835,6 +836,14 @@
 
 		if(!isXUL() && !isTrue(node.opac_visible())) return;
 
+		if (orgHiding) {
+			if (isTrue( findOrgType(node.ou_type()).can_have_vols() )) {
+				if ( ! orgIsMine( orgHiding.org, node, orgHiding.depth ) ) {
+					return;
+				}
+			}
+		}
+
 		var row = copyRow.cloneNode(true);
 		row.id = "cp_info_" + node.id();
 
@@ -887,6 +896,8 @@
 
 	removeChildren(copyRowParent);
 
+	orgHiding = checkOrgHiding();
+
 	_rdetailRows();
 
 	var summary = r.getResultObject();

Modified: trunk/Open-ILS/web/opac/skin/default/js/result_common.js
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/js/result_common.js	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/skin/default/js/result_common.js	2010-08-16 17:41:54 UTC (rev 17228)
@@ -697,7 +697,17 @@
 	var ccell = $n(countsrow, config.names.result.count_cell);
 
 	var nodes = orgNodeTrail(findOrgUnit(getLocation()));
-	var node = nodes[0];
+	var start_here = 0;
+	var orgHiding = checkOrgHiding();
+	if (orgHiding) {
+		for (var i = 0; i < nodes.length; i++) {
+			if (orgHiding.depth == findOrgDepth(nodes[i])) {
+				start_here = i;
+			}
+		}
+	}
+
+	var node = nodes[start_here];
 	var type = findOrgType(node.ou_type());
 	ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
 	ccell.title = type.opac_label();
@@ -718,10 +728,10 @@
 		resultCCHeaderApplied = true;
 	}
 
-	if(nodes[1]) {
+	if(nodes[start_here+1]) {
 
-		var x = 1;
-		var d = findOrgDepth(nodes[1]);
+		var x = start_here+1;
+		var d = findOrgDepth(nodes[start_here+1]);
 		var d2 = findOrgDepth(nodes[nodes.length -1]);
 
 		for( var i = d; i <= d2 ; i++ ) {
@@ -798,20 +808,22 @@
 	var i = 0;
 	while(copy_counts[i] != null) {
 		var cell = $("copy_count_cell_" + i +"_" + pagePosition);
-		var cts = copy_counts[i];
-		cell.appendChild(text(cts.available + " / " + cts.count));
+		if (cell) {
+			var cts = copy_counts[i];
+			cell.appendChild(text(cts.available + " / " + cts.count));
 
-		if(isXUL()) {
-			/* here we style opac-invisible records for xul */
+			if(isXUL()) {
+				/* here we style opac-invisible records for xul */
 
-			if( cts.depth == 0 ) {
-				if(cts.transcendant == null && cts.unshadow == 0) {
-					_debug("found an opac-shadowed record: " + rec.doc_id());
-					var row = cell.parentNode.parentNode.parentNode.parentNode.parentNode; 
-					if( cts.count == 0 ) 
-						addCSSClass( row, 'no_copies' );
-					else 
-						addCSSClass( row, 'shadowed' );
+				if( cts.depth == 0 ) {
+					if(cts.transcendant == null && cts.unshadow == 0) {
+						_debug("found an opac-shadowed record: " + rec.doc_id());
+						var row = cell.parentNode.parentNode.parentNode.parentNode.parentNode; 
+						if( cts.count == 0 ) 
+							addCSSClass( row, 'no_copies' );
+						else 
+							addCSSClass( row, 'shadowed' );
+					}
 				}
 			}
 		}

Modified: trunk/Open-ILS/web/opac/skin/default/xml/myopac/myopac_prefs.xml
===================================================================
--- trunk/Open-ILS/web/opac/skin/default/xml/myopac/myopac_prefs.xml	2010-08-16 16:23:41 UTC (rev 17227)
+++ trunk/Open-ILS/web/opac/skin/default/xml/myopac/myopac_prefs.xml	2010-08-16 17:41:54 UTC (rev 17228)
@@ -56,7 +56,7 @@
 			</tr>
 
 
-			<tr>
+			<tr id='prefs_def_location_row'>
 				<td>&myopac.prefs.search.location;</td>
 				<td>
 					<div style='margin-bottom: 5px;'>
@@ -71,7 +71,7 @@
 				</td>
 			</tr>
 
-			<tr>
+			<tr id='prefs_def_range_row'>
 				<td>&myopac.prefs.search.range;</td>
 				<td>
 					<select id='prefs_def_range'>



More information about the open-ils-commits mailing list