render-notification-options.xslt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. IBM Cognos Products: HTS
  5. (C) Copyright IBM Corp. 2005, 2010
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xts="http://developer.cognos.com/schemas/xts/" xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt" xmlns:hts="http://developer.cognos.com/myinbox/common/hts_ui" exclude-result-prefixes="xts xtsext hts">
  9. <xsl:import href="../../common/set-priority.xslt"/>
  10. <xsl:import href="../../common/json-converter.xslt"/>
  11. <xsl:import href="../../common/task-info.xslt"/>
  12. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
  13. <xsl:template match="/">
  14. <xsl:apply-templates select="/" mode="common"/>
  15. <hts:script language="javascript">
  16. var INDIVIDUAL_SUBSCRIBE = "INDIVIDUAL_SUBSCRIBE";
  17. var INDIVIDUAL_UNSUBSCRIBE = "INDIVIDUAL_UNSUBSCRIBE";
  18. var GLOBAL_SUBSCRIBE = "GLOBAL_SUBSCRIBE";
  19. var GLOBAL_UNSUBSCRIBE = "GLOBAL_UNSUBSCRIBE";
  20. dojo.require("dijit.layout.ContentPane");
  21. _F_config.enableLog = false;
  22. _THIS_.addEventListener("fragment.load", "_THIS_init");
  23. _THIS_.addEventListener("fragment.retrieve.after", "_THIS_retrieveAfter");
  24. //create the subscriptions object. This is an associative object
  25. //index = event type, value = true|false
  26. var _THIS_subscriptionObj = new Object();
  27. function _THIS_init() {
  28. _THIS_setSubscriptions();
  29. //decide whether to check the parent notification box or not.
  30. var notification = $('_THIS_notification');
  31. notification.checked=hts_checkStateChanges($('_THIS_taskOptions_advanced'),&apos;_THIS_&apos;);
  32. _THIS_setNotificationEnableState();
  33. }
  34. function _THIS_retrieveAfter(evt) {
  35. if (evt.target.id == "_THIS_") {
  36. //get the selected task, JSONify it and raise the event
  37. _THIS_raiseTaskInfo();
  38. }
  39. var taskId = _THIS_.transientState['taskid'];
  40. if (taskId &amp;&amp; taskId != '') {
  41. //This is to hide the waiting div and show the correct div (task details where comment tab is visible)
  42. _THIS_.raiseEvent('cognos.hts.showTaskViewer');
  43. }
  44. var noteTaskId = _THIS_.transientState['notificationtaskid'];
  45. if (noteTaskId &amp;&amp; noteTaskId != '') {
  46. //This is to hide the waiting div and show the correct div (task details where comment tab is visible)
  47. THIS_.raiseEvent('cognos.hts.showNotificationTaskViewer');
  48. }
  49. _THIS_setNotificationEnableState();
  50. }
  51. function _THIS_setNotificationEnableState() {
  52. //disable the UI if the task status is complete, failed or exited
  53. var status = '<xsl:value-of select="xtsext:javascriptencode(string(/root/input[@name='dep']/queryResponse/*[local-name()='getTaskInfoResponse']/*[local-name()='task']/*[local-name()='status']/text()))"/>';
  54. var _THIS_utils = new hts_utils(_THIS_);
  55. //_THIS_utils.setUIState($('_THIS_taskOptions_advanced'),status);
  56. //tha above commented out line works for IE but not firefox - I suspect firefox is correct, so
  57. //disable the check boxes individually (can improve - e.g. send wrapper to a function that digs out checkboxes)
  58. _THIS_utils.setUIState($('_THIS_sub_startDeadline'),status);
  59. _THIS_utils.setUIState($('_THIS_sub_completionDeadline'),status);
  60. _THIS_utils.setUIState($('_THIS_notification'),status);
  61. _THIS_utils.setUIState($('_THIS_sub_stateChange_started'),status);
  62. _THIS_utils.setUIState($('_THIS_sub_stateChange_ownerChanged'),status);
  63. _THIS_utils.setUIState($('_THIS_sub_stateChange_comments'),status);
  64. _THIS_utils.setUIState($('_THIS_sub_stateChange_completed'),status);
  65. _THIS_utils.setUIState($('_THIS_sub_stateChange_cancelled'),status);
  66. }
  67. function _THIS_setSubscriptions() {
  68. //create the default subscription object
  69. _THIS_subscriptionObj.events = new Object();
  70. _THIS_subscriptionObj.events['START_DEADLINE']=INDIVIDUAL_SUBSCRIBE;
  71. _THIS_subscriptionObj.events['COMPLETE_DEADLINE']=INDIVIDUAL_SUBSCRIBE;
  72. _THIS_subscriptionObj.events['STATE_CHANGE_STARTED']=INDIVIDUAL_SUBSCRIBE;
  73. _THIS_subscriptionObj.events['STATE_CHANGE_OWNER_CHANGED']=INDIVIDUAL_SUBSCRIBE;
  74. _THIS_subscriptionObj.events['STATE_CHANGE_COMPLETED']=INDIVIDUAL_SUBSCRIBE;
  75. _THIS_subscriptionObj.events['COMMENTS']=INDIVIDUAL_SUBSCRIBE;
  76. _THIS_subscriptionObj.events['STATE_CHANGE_CANCELLED']=INDIVIDUAL_SUBSCRIBE;
  77. var eventx, statex;
  78. //get the task unsubscriptions and set into the subscriptions object
  79. <xsl:for-each select="/root/input[@name='dep']/queryResponse/*[local-name()='getUnsubscriptionsResponse']/*[local-name()='subscription']">
  80. //unsubscribe any that we have to, based on the users preferences
  81. eventx = '<xsl:value-of select="xtsext:javascriptencode(string(./*[local-name()='event']))"/>';
  82. statex = '<xsl:value-of select="xtsext:javascriptencode(string(./*[local-name()='subscriptionState']))"/>';
  83. _THIS_subscriptionObj.events[eventx]=statex;
  84. </xsl:for-each>
  85. //loop through the subscriptions and set the correct value into each checkbox
  86. for (eventx in _THIS_subscriptionObj.events) {
  87. var cb = _THIS_getCheckboxByValue(eventx);
  88. if (cb) {
  89. var state = _THIS_subscriptionObj.events[eventx];
  90. var checked = state ? state.indexOf("UNSUBSCRIBE") == -1 : true;
  91. cb.checked=checked;
  92. }
  93. }
  94. }
  95. /*
  96. * a subscription has changed. Fire the 'cognos.hts.changed_subscriptions' event
  97. * Example payload : action=changeSubscription&amp;events={"STATE_CHANGE_FAILED":INDIVIDUAL_SUBSCRIBE}
  98. */
  99. function _THIS_subscriptionsChanged() {
  100. var _THIS_params = _THIS_getSubscriptionParams();
  101. //pass the changed params to those fragments interested
  102. _THIS_.raiseEvent('cognos.hts.changed_subscriptions',_THIS_params);
  103. }
  104. function _THIS_getSubscriptionParams() {
  105. var checkboxes = _THIS_getSubscriptionCheckboxes();
  106. var params;
  107. var events = new Object();
  108. for (var i=0;i&lt;checkboxes.length;i++) {
  109. var cb = checkboxes[i];
  110. //only select if the subscription event has changed
  111. if (_THIS_subscriptionObj.events[cb.value] != cb.checked) {
  112. //we are setting the subscriptions here
  113. if (cb.checked) {
  114. events[cb.value]=INDIVIDUAL_SUBSCRIBE;
  115. }else{
  116. events[cb.value]=INDIVIDUAL_UNSUBSCRIBE;
  117. }
  118. update = true;
  119. }
  120. }
  121. if (update) {
  122. params = "action=changeSubscription&amp;events=";
  123. params += dojo.toJson(events);
  124. }
  125. return params;
  126. }
  127. function _THIS_getSubscriptionCheckboxes() {
  128. var node = $('_THIS_taskOptions_advanced');
  129. var subscriptionCheckboxes = new Array();
  130. var checkboxes = new Object();
  131. var checkboxes = node.getElementsByTagName('INPUT');//_F_DOM.selectNodes(node,"//input[@type='checkbox']");
  132. var count=0;
  133. for (var i=0;i&lt;checkboxes.length;i++) {
  134. if (checkboxes[i].type =='checkbox' &amp;&amp; checkboxes[i].id.match("^"+'_THIS_sub_')=='_THIS_sub_' ) {
  135. subscriptionCheckboxes[count]=checkboxes[i];
  136. count++;
  137. }
  138. }
  139. return subscriptionCheckboxes;
  140. }
  141. function _THIS_getCheckboxByValue(value) {
  142. var cb;
  143. var checkboxes = _THIS_getSubscriptionCheckboxes();
  144. for (var i=0;i&lt;checkboxes.length;i++) {
  145. if (checkboxes[i].value == value) {
  146. cb = checkboxes[i];
  147. break;
  148. }
  149. }
  150. return cb;
  151. }
  152. </hts:script>
  153. <xsl:call-template name="displayOptions"/>
  154. </xsl:template>
  155. <xsl:template name="displayOptions">
  156. <hts:section format="select-dialog" style="width:100%">
  157. <hts:rowset width="100%">
  158. <hts:row>
  159. <hts:div id="_THIS_taskOptions_advanced" name="_THIS_taskOptions_advanced">
  160. <hts:actionlist>
  161. <hts:action>
  162. <hts:img src="_THIS?frag-resource=/fragments/common/images/space.gif/THIS_" alt="" width="12px"/>
  163. </hts:action>
  164. <hts:action>
  165. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_GENERICTASK_LABEL_OPTIONS"/></hts:text>
  166. <hts:actionlist>
  167. <hts:action>
  168. <hts:checkbox id="_THIS_sub_startDeadline" onclick="_THIS_subscriptionsChanged()">
  169. <hts:value>START_DEADLINE</hts:value>
  170. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_MY_START_DEADLINE"/></hts:text>
  171. </hts:checkbox>
  172. <hts:checkbox id="_THIS_sub_completionDeadline" onclick="_THIS_subscriptionsChanged()">
  173. <hts:value>COMPLETE_DEADLINE</hts:value>
  174. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_MY_COMPLETE_DEADLINE"/></hts:text>
  175. </hts:checkbox>
  176. <hts:checkbox id="_THIS_notification" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()">
  177. <hts:value>STATE_CHANGE</hts:value>
  178. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_MY_STATUS_CHANGE"/></hts:text>
  179. </hts:checkbox>
  180. <hts:actionlist>
  181. <hts:action>
  182. <hts:img src="_THIS?frag-resource=/fragments/common/images/space.gif/THIS_" alt="" width="13px"/>
  183. </hts:action>
  184. <hts:action>
  185. <hts:rowset>
  186. <hts:row>
  187. <hts:action>
  188. <hts:checkbox id="_THIS_sub_stateChange_started" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()" >
  189. <hts:value>STATE_CHANGE_STARTED</hts:value>
  190. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_STATE_CHANGE_STARTED"/></hts:text>
  191. </hts:checkbox>
  192. </hts:action>
  193. <hts:action>
  194. <hts:checkbox id="_THIS_sub_stateChange_ownerChanged" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()">
  195. <hts:value>STATE_CHANGE_OWNER_CHANGED</hts:value>
  196. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_STATE_CHANGE_OWNER_CHANGED"/></hts:text>
  197. </hts:checkbox>
  198. </hts:action>
  199. </hts:row>
  200. <hts:row>
  201. <hts:action>
  202. <hts:checkbox id="_THIS_sub_stateChange_comments" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()">
  203. <hts:value>COMMENTS</hts:value>
  204. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_COMMENT"/></hts:text>
  205. </hts:checkbox>
  206. </hts:action>
  207. <hts:action>
  208. <hts:checkbox id="_THIS_sub_stateChange_completed" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()">
  209. <hts:value>STATE_CHANGE_COMPLETED</hts:value>
  210. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_STATE_CHANGE_COMPLETED"/></hts:text>
  211. </hts:checkbox>
  212. </hts:action>
  213. </hts:row>
  214. <hts:row>
  215. <hts:action>
  216. <hts:checkbox id="_THIS_sub_stateChange_cancelled" onclick="hts_selectCheckbox(this.id,'_THIS_');_THIS_subscriptionsChanged()">
  217. <hts:value>STATE_CHANGE_CANCELLED</hts:value>
  218. <hts:text><xts:string id="IDS_FRAG_TASKVIEWER_SUBSCRIPTION_LABEL_CANCELLED"/></hts:text>
  219. </hts:checkbox>
  220. </hts:action>
  221. </hts:row>
  222. </hts:rowset>
  223. </hts:action>
  224. </hts:actionlist>
  225. </hts:action>
  226. </hts:actionlist>
  227. </hts:action>
  228. </hts:actionlist>
  229. </hts:div>
  230. </hts:row>
  231. </hts:rowset>
  232. </hts:section>
  233. </xsl:template>
  234. </xsl:stylesheet>