Changeset 1318

Show
Ignore:
Timestamp:
03/31/07 21:14:21
Author:
johnsa
Message:

admin client: overhaul of access control; now the same as in user client. Provides much simpler basic interface, and a much more complete advanced interface.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/deployment/webadmin/webapp/resources/default/default/default.css

    r1242 r1318  
    576576} 
    577577#sharingBox { 
    578   margin: 2em 0; 
     578  margin: 0; 
    579579  border-top: 1px solid #333; 
    580 
    581 #sharingBox h3 { 
    582   padding: 1em 0 0.5em 0.5em; 
    583 
     580  padding: 1em 1em 2em 1em; 
     581
     582#bwEventTab-Access #sharingBox { 
     583  border-top: none; 
     584
     585#sharingBox h3, 
    584586#sharingBox h5 { 
    585   padding: 1em 0 0.5em 0; 
     587  padding: 0 0 0.5em 0; 
    586588} 
    587589#sharingBox ul { 
     
    589591  margin: 0 1em; 
    590592} 
    591 #sharingBox table td, 
    592 #sharingBox table th { 
    593   white-space: nowrap; 
    594 
    595 #sharing td, 
    596 #sharing th.thin { 
    597   font-size: 0.8em; 
     593#sharingBox p { 
     594  font-size: 0.9em; 
    598595} 
    599596#shareForm { 
     
    601598  padding: 0; 
    602599} 
    603 #shareFormTable { 
    604   /* width: 96%; less than 100% helps avoid IE weirdness */ 
    605   border-right: 1px solid #666; 
    606 
    607 #shareFormTable tr.subhead th { 
    608   border-left: 1px solid #666; 
     600#calendarTable #shareFormTable td { 
     601  border: 1px solid #666; 
     602  padding: 0 0 0.5em 0; 
     603
     604#shareFormTable h5 { 
    609605  background: #e5e5e5; 
    610606  color: black; 
     
    612608  padding: 4px; 
    613609} 
    614 #shareFormTable td { 
    615   border-bottom: 1px solid #666; 
    616   border-left: 1px solid #666; 
    617   padding: 1em; 
    618   vertical-align: top; 
     610#shareFormTable #accessRightsToggle { 
     611  float: right; 
     612  font-weight: normal; 
     613  font-size: 0.8em; 
     614
     615#shareFormTable .whoTypes { 
     616  margin: 1em; 
     617
     618#howTable { 
     619  border: none; 
     620  padding: 0; 
     621  margin: 0; 
     622  font-size: 0.8em; 
     623  width: 100%; 
     624
     625#calendarTable #howTable th { 
     626  color: white; 
     627  background-color: #999; 
     628  font-weight: normal; 
     629
     630#calendarTable #howTable td { 
     631  white-space: nowrap; 
     632  border-top: 1px dotted #ccc; 
     633  border-right: none; 
     634  border-left: none; 
     635  border-bottom: none; 
     636  text-align: center; 
     637
     638#calendarTable #howTable td.level1 { 
     639  text-align: left; 
     640  font-weight: bold; 
     641
     642#calendarTable #howTable td.level2 { 
     643  padding-left: 2em; 
     644  text-align: left; 
     645  font-weight: bold; 
     646
     647#calendarTable #howTable td.level3 { 
     648  padding-left: 4em; 
     649  text-align: left; 
     650
     651#calendarTable #howTable td.level4 { 
     652  padding-left: 6em; 
     653  text-align: left; 
     654
     655#calendarTable #howTable td.level5 { 
     656  padding-left: 8em; 
     657  text-align: left; 
    619658} 
    620659#howList { 
  • trunk/deployment/webadmin/webapp/resources/default/default/default.xsl

    r1315 r1318  
    202202          <script type="text/javascript" src="/bedework-common/javascript/dojo/dojo.js">&#160;</script> 
    203203          <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkEventForm.js">&#160;</script> 
     204        </xsl:if> 
     205        <xsl:if test="/bedeworkadmin/page='modCalendar'"> 
     206          <script type="text/javascript" src="{$resourcesRoot}/resources/bedework.js">&#160;</script> 
     207          <script type="text/javascript" src="{$resourcesRoot}/resources/bedeworkAccess.js">&#160;</script> 
    204208        </xsl:if> 
    205209        <xsl:if test="/bedeworkadmin/page='upload' or /bedeworkadmin/page='selectCalForEvent'"> 
     
    30443048    </form> 
    30453049 
    3046  
     3050     
    30473051    <div id="sharingBox"> 
     3052      <xsl:apply-templates select="acl" mode="currentAccess"> 
     3053        <xsl:with-param name="action" select="$calendar-setAccess"/> 
     3054        <xsl:with-param name="calPathEncoded" select="encodedPath"/> 
     3055      </xsl:apply-templates> 
     3056      <form name="calendarShareForm" action="{$calendar-setAccess}" id="shareForm" onsubmit="setAccessHow(this)"> 
     3057        <input type="hidden" name="calPath"> 
     3058          <xsl:attribute name="value"><xsl:value-of select="path"/></xsl:attribute> 
     3059        </input> 
     3060        <xsl:call-template name="entityAccessForm"> 
     3061          <xsl:with-param name="type"> 
     3062            <xsl:choose> 
     3063              <xsl:when test="calType = '5'">inbox</xsl:when> 
     3064              <xsl:when test="calType = '6'">outbox</xsl:when> 
     3065              <xsl:otherwise>normal</xsl:otherwise> 
     3066            </xsl:choose> 
     3067          </xsl:with-param> 
     3068        </xsl:call-template> 
     3069      </form> 
     3070    </div> 
     3071 
     3072    <!--<div id="sharingBox"> 
    30483073      <xsl:variable name="calPath" select="path"/> 
    30493074      <xsl:variable name="encodedCalPath" select="encodedPath"/> 
     
    31393164                        <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/></xsl:when> 
    31403165                        <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/></xsl:when> 
    3141                         <xsl:otherwise></xsl:otherwise> <!-- if not user or group, send no who --> 
    3142                       </xsl:choose> 
     3166                        <xsl:otherwise></xsl:otherwise>--> <!-- if not user or group, send no who --> 
     3167        <!--              </xsl:choose> 
    31433168                    </xsl:variable> 
    31443169                    <xsl:choose> 
     
    31843209                  <input type="radio" value="other" name="whoType"/> other users<br/> 
    31853210                  <input type="radio" value="owner" name="whoType"/> owner 
    3186                 </p> 
     3211                </p>--> 
    31873212                <!-- we may never use the invert action ...it is probably 
    31883213                     too confusing, and can be achieved in other ways --> 
     
    31913216                  <input type="checkbox" value="yes" name="notWho"/> invert (deny) 
    31923217                </p>--> 
    3193               </td> 
     3218              <!--</td> 
    31943219              <td> 
    31953220                <ul id="howList"> 
     
    32213246                    <input type="radio" value="N" name="how"/> 
    32223247                    <strong>None</strong> 
    3223                   </li> 
     3248                  </li>--> 
    32243249                  <!-- 
    32253250                  <li class="padTop"> 
     
    32273252                    <strong>Restore default access</strong> 
    32283253                  </li>--> 
    3229                 </ul> 
     3254                <!--</ul> 
    32303255              </td> 
    32313256            </tr> 
     
    32343259        </form> 
    32353260      </xsl:if> 
    3236     </div> 
    3237   </xsl:template> 
    3238  
     3261    </div>--> 
     3262  </xsl:template> 
     3263   
     3264   
    32393265  <xsl:template name="calendarList"> 
    32403266    <h3>Manage Calendars</h3> 
     
    34463472  </xsl:template> 
    34473473 
     3474  <!--==== ACCESS CONTROL TEMPLATES ====--> 
     3475 
     3476  <!--<xsl:template match="eventAccess"> 
     3477    <xsl:variable name="calPathEncoded" select="calendar/encodedPath"/> 
     3478    <xsl:variable name="calPath" select="calendar/path"/> 
     3479    <xsl:variable name="guid" select="guid"/> 
     3480    <xsl:variable name="recurrenceId" select="recurrenceId"/> 
     3481    <div id="bwEventTab-Access"> 
     3482      <div id="sharingBox"> 
     3483        <xsl:apply-templates select="access/acl" mode="currentAccess"> 
     3484          <xsl:with-param name="action" select="$event-setAccess"/> 
     3485          <xsl:with-param name="calPathEncoded" select="$calPathEncoded"/> 
     3486          <xsl:with-param name="guid" select="$guid"/> 
     3487          <xsl:with-param name="recurrenceId" select="$recurrenceId"/> 
     3488        </xsl:apply-templates> 
     3489        <form name="eventShareForm" action="{$event-setAccess}" id="shareForm" onsubmit="setAccessHow(this)"> 
     3490          <input type="hidden" name="calPath" value="{$calPath}"/> 
     3491          <input type="hidden" name="guid" value="{$guid}"/> 
     3492          <input type="hidden" name="recurid" value="{$recurrenceId}"/> 
     3493          <xsl:call-template name="entityAccessForm"/> 
     3494        </form> 
     3495      </div> 
     3496    </div> 
     3497  </xsl:template>--> 
     3498 
     3499  <xsl:template name="schedulingAccessForm"> 
     3500    <xsl:param name="what"/> 
     3501    <input type="hidden" name="what"> 
     3502      <xsl:attribute name="value"><xsl:value-of select="$what"/></xsl:attribute> 
     3503    </input> 
     3504    <p> 
     3505      <input type="text" name="who" width="40"/> 
     3506      <span class="nowrap"><input type="radio" name="whoType" value="user" checked="checked"/>user</span> 
     3507      <span class="nowrap"><input type="radio" name="whoType" value="group"/>group</span> 
     3508    </p> 
     3509    <p> 
     3510      <strong>or</strong> 
     3511      <span class="nowrap"><input type="radio" name="whoType" value="owner"/>owner</span> 
     3512      <span class="nowrap"><input type="radio" name="whoType" value="auth"/>authenticated users</span> 
     3513      <span class="nowrap"><input type="radio" name="whoType" value="other"/>anyone</span> 
     3514    </p> 
     3515 
     3516    <input type="hidden" name="how" value="S"/> 
     3517    <dl> 
     3518      <dt> 
     3519        <input type="checkbox" name="howSetter" value="S" checked="checked" onchange="toggleScheduleHow(this.form,this)"/>all scheduling 
     3520      </dt> 
     3521      <dd> 
     3522        <input type="checkbox" name="howSetter" value="t" checked="checked" disabled="disabled"/>scheduling requests<br/> 
     3523        <input type="checkbox" name="howSetter" value="y" checked="checked" disabled="disabled"/>scheduling replies<br/> 
     3524        <input type="checkbox" name="howSetter" value="s" checked="checked" disabled="disabled"/>free-busy requests 
     3525      </dd> 
     3526    </dl> 
     3527 
     3528    <input type="submit" name="modPrefs" value="Update"/> 
     3529    <input type="reset" value="Reset"/> 
     3530    <input type="submit" name="cancelled" value="cancel"/> 
     3531  </xsl:template> 
     3532 
     3533  <xsl:template name="entityAccessForm"> 
     3534    <xsl:param name="type"/><!-- optional: 
     3535    currently used for inbox and outbox to conditionally 
     3536    display scheduling access --> 
     3537    <table cellpadding="0" id="shareFormTable" class="common"> 
     3538      <tr> 
     3539        <th colspan="2" class="commonHeader">Add:</th> 
     3540      </tr> 
     3541      <tr> 
     3542        <td> 
     3543          <h5>Who:</h5> 
     3544          <div class="whoTypes"> 
     3545            <input type="text" name="who" size="20"/><br/> 
     3546            <input type="radio" value="user" name="whoType" checked="checked"/> user 
     3547            <input type="radio" value="group" name="whoType"/> group 
     3548            <p>OR</p> 
     3549            <p> 
     3550              <input type="radio" value="auth" name="whoType"/> authenticated<br/> 
     3551              <input type="radio" value="other" name="whoType"/> other users 
     3552            </p> 
     3553          </div> 
     3554        </td> 
     3555        <td> 
     3556          <h5> 
     3557            <span id="accessRightsToggle"> 
     3558              <xsl:choose> 
     3559                <xsl:when test="/bedeworkadmin/appvar[key='accessRightsToggle']/value='advanced'"> 
     3560                  <input type="radio" name="setappvar" value="accessRightsToggle(basic)" onclick="changeClass('howList','visible');changeClass('howTable','invisible');"/>basic 
     3561                  <input type="radio" name="setappvar" value="accessRightsToggle(advanced)" checked="checked" onclick="changeClass('howList','invisible');changeClass('howTable','visible');"/>advanced 
     3562                </xsl:when> 
     3563                <xsl:otherwise> 
     3564                  <input type="radio" name="setappvar" value="accessRightsToggle(basic)" checked="checked" onclick="changeClass('howList','visible');changeClass('howTable','invisible');"/>basic 
     3565                  <input type="radio" name="setappvar" value="accessRightsToggle(advanced)" onclick="changeClass('howList','invisible');changeClass('howTable','visible');"/>advanced 
     3566                </xsl:otherwise> 
     3567              </xsl:choose> 
     3568            </span> 
     3569            Rights: 
     3570          </h5> 
     3571          <input type="hidden" name="how" value=""/> 
     3572          <!-- Advanced Access Rights: --> 
     3573          <!-- the "how" field is set by iterating over the howItems below --> 
     3574          <table id="howTable" class="invisible" cellspacing="0"> 
     3575            <xsl:if test="/bedeworkadmin/appvar[key='accessRightsToggle']/value='advanced'"> 
     3576              <xsl:attribute name="class">visible</xsl:attribute> 
     3577            </xsl:if> 
     3578            <tr> 
     3579              <th>access type</th> 
     3580              <th>allow</th> 
     3581              <th>deny</th> 
     3582            </tr> 
     3583            <tr> 
     3584              <td class="level1"> 
     3585                <input type="checkbox" value="A" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/>All 
     3586              </td> 
     3587              <td> 
     3588                <input type="radio" value="A" name="A" checked="checked" disabled="disabled"/> 
     3589              </td> 
     3590              <td> 
     3591                <input type="radio" value="-A" name="A" disabled="disabled"/> 
     3592              </td> 
     3593            </tr> 
     3594            <tr> 
     3595              <td class="level2"> 
     3596                <input type="checkbox" value="R" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)" checked="checked"/> Read 
     3597              </td> 
     3598              <td> 
     3599                <input type="radio" value="R" name="R" checked="checked"/> 
     3600              </td> 
     3601              <td> 
     3602                <input type="radio" value="-R" name="R"/> 
     3603              </td> 
     3604            </tr> 
     3605            <tr> 
     3606              <td class="level3"> 
     3607                <input type="checkbox" value="r" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read ACL 
     3608              </td> 
     3609              <td> 
     3610                <input type="radio" value="r" name="r" checked="checked" disabled="disabled"/> 
     3611              </td> 
     3612              <td> 
     3613                <input type="radio" value="-r" name="r" disabled="disabled"/> 
     3614              </td> 
     3615            </tr> 
     3616            <tr> 
     3617              <td class="level3"> 
     3618                <input type="checkbox" value="P" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read current user privilege set 
     3619              </td> 
     3620              <td> 
     3621                <input type="radio" value="P" name="P" checked="checked" disabled="disabled"/> 
     3622              </td> 
     3623              <td> 
     3624                <input type="radio" value="-P" name="P" disabled="disabled"/> 
     3625              </td> 
     3626            </tr> 
     3627            <tr> 
     3628              <td class="level3"> 
     3629                <input type="checkbox" value="F" name="howItem" disabled="disabled" onclick="toggleAllowDenyFlag(this, this.form)"/> read freebusy 
     3630              </td> 
     3631              <td> 
     3632                <input type="radio" value="F" name="F" checked="checked" disabled="disabled"/> 
     3633              </td> 
     3634              <td> 
     3635                <input type="radio" value="-F" name="F" disabled="disabled"/> 
     3636              </td> 
     3637            </tr> 
     3638            <tr> 
     3639              <td class="level2"> 
     3640                <input type="checkbox" value="W" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> Write 
     3641              </td> 
     3642              <td> 
     3643                <input type="radio" value="W" name="W" checked="checked" disabled="disabled"/> 
     3644              </td> 
     3645              <td> 
     3646                <input type="radio" value="-W" name="W" disabled="disabled"/> 
     3647              </td> 
     3648            </tr> 
     3649            <tr> 
     3650              <td class="level3"> 
     3651                <input type="checkbox" value="a" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write ACL 
     3652              </td> 
     3653              <td> 
     3654                <input type="radio" value="a" name="a" checked="checked" disabled="disabled"/> 
     3655              </td> 
     3656              <td> 
     3657                <input type="radio" value="-a" name="a" disabled="disabled"/> 
     3658              </td> 
     3659            </tr> 
     3660            <tr> 
     3661              <td class="level3"> 
     3662                <input type="checkbox" value="p" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write properties 
     3663              </td> 
     3664              <td> 
     3665                <input type="radio" value="p" name="p" checked="checked" disabled="disabled"/> 
     3666              </td> 
     3667              <td> 
     3668                <input type="radio" value="-p" name="p" disabled="disabled"/> 
     3669              </td> 
     3670            </tr> 
     3671            <tr> 
     3672              <td class="level3"> 
     3673                <input type="checkbox" value="c" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> write content 
     3674              </td> 
     3675              <td> 
     3676                <input type="radio" value="c" name="c" checked="checked" disabled="disabled"/> 
     3677              </td> 
     3678              <td> 
     3679                <input type="radio" value="-c" name="c" disabled="disabled"/> 
     3680              </td> 
     3681            </tr> 
     3682            <tr> 
     3683              <td class="level3"> 
     3684                <input type="checkbox" value="b" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> create (bind) 
     3685              </td> 
     3686              <td> 
     3687                <input type="radio" value="b" name="b" checked="checked" disabled="disabled"/> 
     3688              </td> 
     3689              <td> 
     3690                <input type="radio" value="-b" name="b" disabled="disabled"/> 
     3691              </td> 
     3692            </tr> 
     3693            <xsl:if test="$type = 'inbox' or $type = 'outbox'"> 
     3694              <tr> 
     3695                <td class="level4"> 
     3696                  <input type="checkbox" value="S" name="howItem" onclick="setupAccessForm(this, this.form); toggleAllowDenyFlag(this, this.form)"/> schedule 
     3697                </td> 
     3698              <td> 
     3699                <input type="radio" value="S" name="S" checked="checked" disabled="disabled"/> 
     3700              </td> 
     3701              <td> 
     3702                <input type="radio" value="-S" name="S" disabled="disabled"/> 
     3703              </td> 
     3704              </tr> 
     3705              <tr> 
     3706                <td class="level5"> 
     3707                  <input type="checkbox" value="t" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule request 
     3708                </td> 
     3709              <td> 
     3710                <input type="radio" value="t" name="t" checked="checked" disabled="disabled"/> 
     3711              </td> 
     3712              <td> 
     3713                <input type="radio" value="-t" name="t" disabled="disabled"/> 
     3714              </td> 
     3715              </tr> 
     3716              <tr> 
     3717                <td class="level5"> 
     3718                  <input type="checkbox" value="y" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule reply 
     3719                </td> 
     3720              <td> 
     3721                <input type="radio" value="y" name="y" checked="checked" disabled="disabled"/> 
     3722              </td> 
     3723              <td> 
     3724                <input type="radio" value="-y" name="y" disabled="disabled"/> 
     3725              </td> 
     3726              </tr> 
     3727              <tr> 
     3728                <td class="level5"> 
     3729                  <input type="checkbox" value="s" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> schedule free-busy 
     3730                </td> 
     3731              <td> 
     3732                <input type="radio" value="s" name="s" checked="checked" disabled="disabled"/> 
     3733              </td> 
     3734              <td> 
     3735                <input type="radio" value="-s" name="s" disabled="disabled"/> 
     3736              </td> 
     3737              </tr> 
     3738            </xsl:if> 
     3739            <tr> 
     3740              <td class="level3"> 
     3741                 <input type="checkbox" value="u" name="howItem" onclick="toggleAllowDenyFlag(this, this.form)"/> delete (unbind) 
     3742              </td> 
     3743              <td> 
     3744                <input type="radio" value="u" name="u" checked="checked" disabled="disabled"/> 
     3745              </td> 
     3746              <td> 
     3747                <input type="radio" value="-u" name="u" disabled="disabled"/> 
     3748              </td> 
     3749            </tr> 
     3750            <!--<tr> 
     3751              <td class="level1"> 
     3752                <input type="checkbox" value="N" name="howItem" onclick="setupAccessForm(this, this.form)"/> None 
     3753              </td> 
     3754              <td> 
     3755              </td> 
     3756              <td> 
     3757              </td> 
     3758            </tr>--> 
     3759          </table> 
     3760          <!-- Simple Access Rights: --> 
     3761          <!-- the "how" field is set by getting the selected basicHowItem --> 
     3762          <ul id="howList"> 
     3763            <xsl:if test="/bedeworkadmin/appvar[key='accessRightsToggle']/value='advanced'"> 
     3764              <xsl:attribute name="class">invisible</xsl:attribute> 
     3765            </xsl:if> 
     3766            <li> 
     3767              <input type="radio" value="A" name="basicHowItem"/>All 
     3768            </li> 
     3769            <li> 
     3770              <input type="radio" value="R" name="basicHowItem" checked="checked"/>Read only 
     3771            </li> 
     3772          </ul> 
     3773 
     3774          <!-- below is a simplified listing using radio buttons only; keep for 
     3775               those who would like something inbetween the advanced and simple 
     3776               interfaces --> 
     3777          <!-- 
     3778          <ul id="howList"> 
     3779            <li><input type="radio" value="A" name="how"/> <strong>All</strong> (read, write, delete)</li> 
     3780            <li class="padTop"> 
     3781              <input type="radio" value="R" name="how" checked="checked"/> <strong>Read</strong> (content, access, freebusy) 
     3782            </li> 
     3783            <li> 
     3784              <input type="radio" value="F" name="how"/> Read freebusy only 
     3785            </li> 
     3786            <li class="padTop"> 
     3787              <input type="radio" value="W" name="how"/> <strong>Write and delete</strong> (content, access, properties) 
     3788            </li> 
     3789            <li> 
     3790              <input type="radio" value="c" name="how"/> Write content only 
     3791            </li> 
     3792            <li> 
     3793             <input type="radio" value="u" name="how"/> Delete only 
     3794            </li> 
     3795            <li class="padTop"> 
     3796              <input type="radio" value="Rc" name="how"/> <strong>Read</strong> and <strong>Write content only</strong> 
     3797            </li> 
     3798            <li class="padTop"> 
     3799              <input type="radio" value="N" name="how"/> <strong>None</strong> 
     3800            </li> 
     3801          </ul> --> 
     3802        </td> 
     3803      </tr> 
     3804    </table> 
     3805    <input type="submit" name="submit" value="Submit"/> 
     3806  </xsl:template> 
     3807 
     3808  <xsl:template match="acl" mode="currentAccess"> 
     3809    <xsl:param name="action"/> <!-- required --> 
     3810    <xsl:param name="calPathEncoded"/> <!-- optional (for entities) --> 
     3811    <xsl:param name="guid"/> <!-- optional (for entities) --> 
     3812    <xsl:param name="recurrenceId"/> <!-- optional (for entities) --> 
     3813    <xsl:param name="what"/> <!-- optional (for scheduling only) --> 
     3814    <h3>Current Access:</h3> 
     3815      <table class="common scheduling"> 
     3816        <tr> 
     3817          <th>Entry</th> 
     3818          <th>Access</th> 
     3819          <th>Inherited from</th> 
     3820          <td></td> 
     3821        </tr> 
     3822        <xsl:for-each select="ace"> 
     3823        <xsl:variable name="who"> 
     3824          <xsl:choose> 
     3825            <xsl:when test="invert"> 
     3826              <xsl:choose> 
     3827                <xsl:when test="invert/principal/href"><xsl:value-of select="normalize-space(invert/principal/href)"/></xsl:when> 
     3828                <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when> 
     3829                <xsl:otherwise><xsl:value-of select="name(invert/principal/*)"/></xsl:otherwise> 
     3830              </xsl:choose> 
     3831            </xsl:when> 
     3832            <xsl:otherwise> 
     3833              <xsl:choose> 
     3834                <xsl:when test="principal/href"><xsl:value-of select="normalize-space(principal/href)"/></xsl:when> 
     3835                <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when> 
     3836                <xsl:otherwise><xsl:value-of select="name(principal/*)"/></xsl:otherwise> 
     3837              </xsl:choose> 
     3838            </xsl:otherwise> 
     3839          </xsl:choose> 
     3840        </xsl:variable> 
     3841        <xsl:variable name="whoType"> 
     3842          <xsl:choose> 
     3843            <xsl:when test="contains($who,/bedeworkadmin/syspars/userPrincipalRoot)">user</xsl:when> 
     3844            <xsl:when test="contains($who,/bedeworkadmin/syspars/groupPrincipalRoot)">group</xsl:when> 
     3845            <xsl:when test="$who='authenticated'">auth</xsl:when> 
     3846            <xsl:when test="invert/principal/property/owner">other</xsl:when> 
     3847            <xsl:when test="principal/property"><xsl:value-of select="name(principal/property/*)"/></xsl:when> 
     3848            <xsl:when test="invert/principal/property"><xsl:value-of select="name(invert/principal/property/*)"/></xsl:when> 
     3849            <xsl:otherwise></xsl:otherwise> 
     3850          </xsl:choose> 
     3851        </xsl:variable> 
     3852        <xsl:variable name="shortWho"> 
     3853          <xsl:choose> 
     3854            <xsl:when test="$whoType='user'"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/userPrincipalRoot)),'/')"/></xsl:when> 
     3855            <xsl:when test="$whoType='group'"><xsl:value-of select="substring-after(substring-after($who,normalize-space(/bedeworkadmin/syspars/groupPrincipalRoot)),'/')"/></xsl:when> 
     3856            <xsl:otherwise></xsl:otherwise> <!-- if not user or group, send no who --> 
     3857          </xsl:choose> 
     3858        </xsl:variable> 
     3859        <tr> 
     3860          <td> 
     3861            <xsl:choose> 
     3862              <xsl:when test="$whoType = 'user' or ($who = 'owner' and $whoType != 'other')"> 
     3863                <img src="{$resourcesRoot}/resources/userIcon.gif" width="13" height="13" border="0" alt="user"/> 
     3864              </xsl:when> 
     3865              <xsl:otherwise> 
     3866                <img src="{$resourcesRoot}/resources/groupIcon.gif" width="13" height="13" border="0" alt="group"/> 
     3867              </xsl:otherwise> 
     3868            </xsl:choose> 
     3869            <xsl:text> </xsl:text> 
     3870            <xsl:choose> 
     3871              <xsl:when test="$whoType = 'other'"> 
     3872                anyone (other) 
     3873              </xsl:when> 
     3874              <xsl:when test="$shortWho != ''"> 
     3875                <xsl:value-of select="$shortWho"/> 
     3876              </xsl:when> 
     3877              <xsl:otherwise> 
     3878                <xsl:value-of select="$who"/> 
     3879              </xsl:otherwise> 
     3880            </xsl:choose> 
     3881          </td> 
     3882          <td class="acls"> 
     3883            <xsl:if test="grant"> 
     3884              grant: 
     3885              <span class="grant"> 
     3886                <xsl:for-each select="grant/*"> 
     3887                  <xsl:value-of select="name(.)"/> 
     3888                  <xsl:if test="position() != last()">, </xsl:if> 
     3889                </xsl:for-each> 
     3890              </span><br/> 
     3891            </xsl:if> 
     3892            <xsl:if test="deny"> 
     3893              deny: 
     3894              <span class="deny"> 
     3895                <xsl:for-each select="deny/*"> 
     3896                  <xsl:value-of select="name(.)"/> 
     3897                  <xsl:if test="position() != last()">, </xsl:if> 
     3898                </xsl:for-each> 
     3899              </span> 
     3900            </xsl:if> 
     3901          </td> 
     3902          <td> 
     3903            <xsl:choose> 
     3904              <xsl:when test="inherited"> 
     3905                <xsl:value-of select="inherited/href"/> 
     3906              </xsl:when> 
     3907              <xsl:otherwise> 
     3908                local 
     3909              </xsl:otherwise> 
     3910            </xsl:choose> 
     3911          </td> 
     3912          <td> 
     3913            <xsl:if test="not(inherited)"> 
     3914              <a href="{$action}&amp;how=default&amp;what={$what}&amp;who={$shortWho}&amp;whoType={$whoType}&amp;calPath={$calPathEncoded}&amp;guid={$guid}&amp;recurrenceId={$recurrenceId}" title="reset to default"> 
     3915                <img src="{$resourcesRoot}/resources/trashIcon.gif" width="13" height="13" border="0" alt="reset to default"/> 
     3916              </a> 
     3917            </xsl:if> 
     3918          </td> 
     3919        </tr> 
     3920      </xsl:for-each> 
     3921    </table> 
     3922  </xsl:template> 
     3923   
    34483924  <!--+++++++++++++++ Subscriptions ++++++++++++++++++++--> 
    34493925  <xsl:template match="subscriptions">