%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/templates/
Upload File :
Create Path :
Current File : //home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/templates/extensionHistory.vm

#template('extension.vm')

#macro (handleExtensionHistoryRequest)
  #if ($request.action == 'export')
    #exportExtensionHistory
  #elseif ($request.action == 'replay')
    #if ($services.csrf.isTokenValid($request.form_token))
      #replayExtensionHistory
    #else
      $response.sendError(401, $services.localization.render('extension.history.invalidCSRFToken'))
    #end
  #elseif ($request.action == 'continue')
    #if ($services.csrf.isTokenValid($request.form_token))
      #continueExtensionHistoryReplay($request.jobId)
    #else
      $response.sendError(401, $services.localization.render('extension.history.invalidCSRFToken'))
    #end
  #elseif ($request.data == 'sources')
    #displayExtensionHistorySourcesList
  #elseif ($request.data == 'records')
    #getExtensionHistoryRecords
    #if ($records && $records.size() > 0)
      #displayExtensionHistoryRecords($records)
    #end
  #elseif ($request.data == 'replayPlan')
    #displayExtensionHistoryReplayPlan
  #elseif ($request.data == 'replayStatus')
    #maybeDisplayExtensionHistoryReplayStatus($request.jobId)
  #elseif ($xcontext.action == 'get' && $isAjaxRequest)
    #maybeDisplayExtensionHistoryRecordsForm
  #else
    #set ($discard = $xwiki.ssfx.use('uicomponents/extension/history.css', true))
    #set ($discard = $xwiki.jsfx.use('uicomponents/extension/history.js'))
    <div class="extension-history">
      <p class="noitems">$escapetool.xml($services.localization.render('extension.history.hint'))</p>
      #displayCurrentJobInfo
      #displayExtensionHistorySourcesForm
      #maybeDisplayExtensionHistoryRecordsForm
    </div>
  #end
#end

#macro (exportExtensionHistory)
  #set ($discard = $response.setContentType('application/xml'))
  #set ($discard = $response.addHeader('Content-disposition', "attachment; filename*=utf-8''extensionHistory.xml"))
  #getSelectedExtensionHistoryRecords
  #if ($selectedRecords && $selectedRecords.size() > 0)
    #set ($output = [])
    ## Export the oldest selected history records first.
    #foreach ($i in [$mathtool.sub($selectedRecords.size(), 1)..0])
      #set ($discard = $output.add($services.extension.history.serialize($selectedRecords.get($i))))
    #end
    $stringtool.join($output, $util.newline)
  #end
#end

#macro (replayExtensionHistory)
  #createExtensionHistoryReplayPlan
  #set ($job = $services.extension.history.replay($records))
  #if ($job)
    #if ($isAjaxRequest)
      #set ($discard = $response.setContentType('application/json'))
      $jsontool.serialize({'jobId': $job.request.id.get(2)})
    #else
      #getExtensionHistoryURL($redirectURL 'view' {
        'data': 'replayStatus',
        'jobId': $job.request.id.get(2)
      })
      $response.sendRedirect($redirectURL)
    #end
  #else
    $response.sendError(400, $exceptiontool.getRootCauseMessage($services.extension.history.lastError))
  #end
#end

#macro (continueExtensionHistoryReplay $replayJobId)
  #set ($replayJobStatus = $services.extension.history.getReplayJobStatus($replayJobId))
  #if ($hasGlobalAdmin && $replayJobStatus && $replayJobStatus.state == 'WAITING')
    #answerExtensionJobQuestion($replayJobStatus)
  #end
  #getExtensionHistoryURL($redirectURL "#if ($isAjaxRequest)get#{else}view#end" {
    'data': 'replayStatus',
    'jobId': $replayJobId
  })
  $response.sendRedirect($redirectURL)
#end

#macro (displayCurrentJobInfo)
  #set ($currentJobStatus = $services.extension.currentJobStatus)
  #if ($currentJobStatus)
    #set ($jobId = $stringtool.join($currentJobStatus.request.id, '/'))
    #if ($jobId.startsWith('extension/history'))
      #getExtensionHistoryURL($jobStatusURL 'view' {
        'data': 'replayStatus',
        'jobId': $stringtool.substringAfterLast($jobId, '/')
      })
      #set ($message = $services.localization.render('extension.history.currentJobInfo.replay',
        ["<a href='$jobStatusURL'>", '</a>']))
    #else
      #set ($jobType = $currentJobStatus.jobType)
      #set ($message = $services.localization.render('extension.history.currentJobInfo',
        ["<strong>$jobType</strong>", "<strong>$jobId</strong>"]))
    #end
    <div class="box infomessage">$services.icon.renderHTML('info') $message</div>
  #end
#end

#macro (displayExtensionHistorySourcesForm)
  #set ($sourceLabel = $request.source)
  #if (!$sourceLabel)
    #set ($sourceLabel = $services.localization.render('extension.history.sources.localHistory'))
  #end
  <div class="extension-history-sources-selector opened">
    <div class="extension-history-sources-header">
      <span class="icon-closed">$services.icon.renderHTML('caret-right')</span>
      <span class="icon-opened">$services.icon.renderHTML('caret-down')</span>
      $services.localization.render('extension.history.records.source', ["<em>$escapetool.xml($sourceLabel)</em>"])
    </div>
    <div class="extension-history-sources-body">
      #displayExtensionHistorySources
      <div class="extension-history-source">
        <div>
          $services.icon.renderHTML('add')
          <span class="extension-history-source-name">
            $services.localization.render('extension.history.sources.importHistoryFile')
          </span>
        </div>
        #set ($discard = $xwiki.jsfx.use('uicomponents/widgets/upload.js', {
          'forceSkinAction': true,
          'language': $xcontext.locale
        }))
        #set ($discard = $xwiki.ssfx.use('uicomponents/widgets/upload.css', true))
        <form action="$uploadDoc.getURL('upload')" enctype="multipart/form-data" method="post"
            class="extension-history-source-upload">
          <div class="hidden">
            <input type="hidden" name="form_token" value="$!services.csrf.token" />
            #getExtensionHistoryURL($xredirect 'get' {'data': 'sources'})
            <input type="hidden" name="xredirect" value="$xredirect" />
          </div>
          <input type="file" name="filepath" />
          <input type="submit" value="$services.localization.render('extension.history.sources.import')" class="btn btn-default" />
        </form>
      </div>
    </div>
  </div>
#end

#macro (displayExtensionHistorySources)
  <ul class="extension-history-sources">
    #displayExtensionHistorySourcesList
  </ul>
#end

#macro (displayExtensionHistorySourcesList)
  #getExtensionHistoryURL($recordsURL 'get' {})
  <li class="extension-history-source#if (!$request.source) selected#end" data-recordsURL="$recordsURL">
    $services.icon.renderHTML('database')
    #getExtensionHistoryURL($sourceURL 'view' {})
    <a href="$sourceURL" class="extension-history-source-name">
      $services.localization.render('extension.history.sources.localHistory')
    </a>
  </li>
  #displayExtensionHistoryFileSources
#end

#macro (displayExtensionHistoryFileSources)
  #set ($uploadDoc = $xwiki.getDocument('XWiki.ExtensionHistoryUploads'))
  #foreach ($attachment in $uploadDoc.attachmentList)
    #if ($attachment.mimeType == 'application/xml')
      #displayExtensionHistoryFileSource($attachment)
    #end
  #end
#end

#macro (displayExtensionHistoryFileSource $attachment)
  #getExtensionHistoryURL($recordsURL 'get' {'source': $attachment.filename})
  <li class="extension-history-source#if ($request.source == $attachment.filename) selected#end"
      data-recordsURL="$recordsURL" data-fileName="$escapetool.xml($attachment.filename)">
    <div>
      $services.icon.renderHTML('attach')
      #getExtensionHistoryURL($sourceURL 'view' {'source': $attachment.filename})
      <a href="$sourceURL" class="extension-history-source-name">
        $escapetool.xml($attachment.filename)</a>
      <span class="extension-history-source-version">$attachment.version</span>
      #if ($services.security.authorization.hasAccess('edit', $uploadDoc.documentReference))
        #getExtensionHistoryURL($xredirect 'view' {})
        #set ($deleteURL = $uploadDoc.getAttachmentURL($attachment.filename, 'delattachment', $escapetool.url({
          'form_token': $services.csrf.token,
          'xredirect': $xredirect
        })))
        #set ($deleteHint = $services.localization.render('extension.history.source.deleteHint'))
        #set ($deleteConfirmation = $services.localization.render('extension.history.source.deleteConfirmation'))
        <a class="deleteLink" href="$deleteURL" title="$escapetool.xml($deleteHint)"
            data-confirmation="$escapetool.xml($deleteConfirmation)">
          $services.icon.renderHTML('cross')
        </a>
      #end
    </div>
    <div class="extension-history-source-author">
      $services.localization.render('extension.history.source.authorDateAndSize', [
        $xwiki.getUserName($attachment.author),
        $xwiki.formatDate($attachment.date),
        "#dynamicsize($attachment.longSize)"
      ])
    </div>
  </li>
#end

#macro (maybeDisplayExtensionHistoryRecordsForm)
  #getExtensionHistoryRecords
  #if ($records && $records.size() > 0)
    #displayExtensionHistoryRecordsForm($records)
  #else
    <div class="extension-history-records-form">
      <ul class="extension-history-records">
        <li class="extension-history-record">
          <span class="box infomessage">
            $services.icon.renderHTML('info')
            $services.localization.render('extension.history.noRecords')
          </span>
        </li>
      </ul>
    </div>
  #end
  #if ($hasProgramming && !$isAjaxRequest)
    #displayExtensionHistoryReplayOptions()
  #end
#end

#macro (displayExtensionHistoryRecordsForm $records)
  #getExtensionHistoryURL($recordsFormActionURL 'get' {})
  <form method="post" action="$recordsFormActionURL" class="extension-history-records-form">
    <div class="hidden">
      <input type="hidden" name="source" value="$!escapetool.xml($request.source)" />
      <input type="hidden" name="form_token" value="$services.csrf.token" />
    </div>
    #displayExtensionHistoryRecords($records)
    <div class="extension-history-actions">
      <button class="btn btn-default" name="action" value="export" type="submit">
        $services.icon.renderHTML('download')
        $services.localization.render('extension.history.records.export')
      </button>
      #if ($hasGlobalAdmin)
        <button class="btn btn-default" name="data" value="replayPlan" type="submit">
          $services.icon.renderHTML('repeat')
          $services.localization.render('extension.history.records.replay')
        </button>
      #end
    </div>
  </form>
#end

#macro (getExtensionHistoryRecords)
  #if ("$!request.source" != '')
    ## History File
    #set ($sourceFile = $xwiki.getDocument('XWiki.ExtensionHistoryUploads').getAttachment($request.source))
    #set ($records = [])
    #set ($limit = $NULL)
    #if ($sourceFile.mimeType == 'application/xml')
      #set ($records = $services.extension.history.read($sourceFile.contentInputStream))
      ## Display the most recent records first.
      #set ($discard = $collectionstool.reverse($records))
    #end
  #else
    ## Local History
    ## Show by default only the jobs that affect the wiki.
    #set ($jobTypes = ['install', 'uninstall', 'repairxar'])
    #set ($limit = 10)
    #set ($recordsFilter = $services.extension.history.records)
    #set ($records = $recordsFilter.fromThisWiki().ofType($jobTypes).list($request.offsetRecordId, $limit))
  #end
#end

#macro (getSelectedExtensionHistoryRecords)
  #set ($selectedRecordIds = $request.getParameterValues('extensionHistoryRecord'))
  #if ($selectedRecordIds && $selectedRecordIds.size() > 0)
    #set ($selectedRecordIdsSet = $collectionstool.set)
    #set ($discard = $selectedRecordIdsSet.addAll($selectedRecordIds.subList(0, $selectedRecordIds.size())))
    #getExtensionHistoryRecords
    #set ($selectedRecords = [])
    #foreach ($record in $records)
      #if ($selectedRecordIdsSet.contains($record.id))
        #set ($discard = $selectedRecords.add($record))
      #end
    #end
  #end
#end

#macro (displayExtensionHistoryRecords $records)
  <ul class="extension-history-records">
    #foreach ($record in $records)
      <li class="extension-history-record $!escapetool.xml($record.jobType)">
        #displayExtensionHistoryRecord($record)
      </li>
    #end
    #if ($limit && $records.size() >= $limit)
      #getExtensionHistoryURL($moreURL 'get' {
        'data': 'records',
        'offsetRecordId': $records.get($mathtool.sub($records.size(), 1)).id
      })
      <li class="extension-history-record">
        <a href="$moreURL" class="more">$services.localization.render('extension.history.records.more')</a>
      </li>
    #end
  </ul>
#end

#macro (displayExtensionHistoryRecord $record $selector $hideDate)
  <div>
    ##
    ## Selector
    ##
    #if ($selector)
      $selector
    #else
      <input type="checkbox" name="extensionHistoryRecord" value="$escapetool.xml($record.id)" />
    #end
    ##
    ## Icon
    ##
    #set ($iconByJobType = {
      'install': 'add',
      'uninstall': 'delete',
      'repairxar': 'wrench'
    })
    #set ($icon = $iconByJobType.get($record.jobType))
    <span class="extension-history-record-icon">
      #if ($icon)
        $services.icon.renderHTML($icon)
      #end
    </span>
    ##
    ## Extensions
    ##
    #set ($extensions = [])
    #foreach ($extensionId in $record.request.extensions)
      #set ($discard = $extensions.add("#displayExtensionHistoryRecord_extension($extensionId)"))
    #end
    <span>$stringtool.join($extensions, ', ')</span>
    ##
    ## Namespaces
    ##
    #set ($namespaces = [])
    #if (!$record.request.hasNamespaces())
      #set ($discard = $namespaces.add($services.localization.render('global namespace')))
    #elseif ($record.request.namespaces.size() > 1 || $record.request.namespaces.get(0) != "wiki:$xcontext.database")
      #foreach ($namespace in $record.request.namespaces)
        #set ($discard = $namespaces.add("#displayExtensionNamespace($namespace)"))
      #end
    #end
    #if ($namespaces.size() > 0)
      <span class="extension-history-record-namespaces">(in $stringtool.join($namespaces, ', '))</span>
    #end
  </div>
  ##
  ## User & Date
  ##
  #set ($userReference = $record.request.getProperty('user.reference'))
  #set ($label = "extension.history.record.${record.jobType}User#if (!$hideDate)AndDate#end")
  <div class="extension-history-record-user">
    $services.localization.render($label, [$xwiki.getUserName("$!userReference"), $xwiki.formatDate($record.endDate)])
  </div>
#end

#macro (displayExtensionHistoryRecord_extension $extensionId)
  #set ($extension = $services.extension.resolve($extensionId.id, $extensionId.version))
  #if ($extension)
    #set ($extensionURL = "#getExtensionURL($extensionId.id, $extensionId.version)")
    <a href="$extensionURL" class="extension-link">#displayExtensionName($extension)</a>
  #else
    $extensionId.id
  #end
  <span class="extension-history-record-version">$!extensionId.version</span>
#end

#macro (displayExtensionHistoryReplayOptions)
  #getExtensionHistoryURL($replayOptionsSubmitURL 'get' {})
  <form method="post" action="$replayOptionsSubmitURL" class="hidden extension-history-replay-options xform">
    <h2>$services.localization.render('extension.history.replayOptions.title')</h2>
    <dl>
      <dt>
        <label>
          <input type="checkbox" name="preserveUsers" value="true"/>
          $services.localization.render('extension.history.replayOptions.preserveUsers.label')
        </label>
        <span class="xHint">$services.localization.render('extension.history.replayOptions.preserveUsers.hint')</span>
      </dt>
      <dt>
        <label for="namespaces">
          $services.localization.render('extension.history.replayOptions.namespaces.label')
        </label>
        <span class="xHint">$services.localization.render('extension.history.replayOptions.namespaces.hint')</span>
      </dt>
      <dd><input type="text" id="namespaces" name="namespaces" value="$xcontext.database" /></dd>
    </dl>
    <div>
      <button class="btn btn-primary" name="data" value="replayPlan" type="submit">
        $services.localization.render('extension.history.replayOptions.continue')
      </button>
      <a href="#" class="btn btn-default">$services.localization.render('extension.history.replayOptions.cancel')</a>
    </div>
  </form>
#end

#macro (createExtensionHistoryReplayPlan)
  #getSelectedExtensionHistoryRecords
  ## The replay plan should include the oldest history records first (because the oldest records are replayed first).
  #set ($discard = $collectionstool.reverse($selectedRecords))
  ## Modify the records based on the replay options.
  #set ($preserveUsers = $request.preserveUsers == 'true')
  #set ($namespaces = [])
  #foreach ($namespace in $request.namespaces.split('\s+'))
    #if ($namespace.indexOf(':') < 0)
      #set ($discard = $namespaces.add("wiki:$namespace"))
    #end
  #end
  ## Backup the ids of the selected records because we modify them when creating the replay plan.
  #set ($selectedRecordsIds = [])
  #foreach ($selectedRecord in $selectedRecords)
    #set ($discard = $selectedRecordsIds.add($selectedRecord.id))
  #end
  #set ($records = $services.extension.history.createReplayPlan($selectedRecords, $preserveUsers, $namespaces))
#end

#macro (displayExtensionHistoryReplayPlan)
  #createExtensionHistoryReplayPlan
  #getExtensionHistoryURL($replayPlanSubmitURL 'get' {})
  <form method="post" action="$replayPlanSubmitURL" class="extension-history-replay-plan xform">
    <h2>$services.localization.render('extension.history.replayPlan.title')</h2>
    #if ($records && $records.size() > 0)
      <div class="hidden">
        ## Forward the replay plan parameters.
        #foreach ($paramName in ['source', 'preserveUsers', 'namespaces'])
          <input type="hidden" name="$paramName" value="$!escapetool.xml($request.getParameter($paramName))" />
        #end
        <input type="hidden" name="form_token" value="$services.csrf.token" />
      </div>
      <div class="xHint">$services.localization.render('extension.history.replayPlan.hint')</div>
      <ul class="extension-history-records">
        #foreach ($record in $records)
          <li class="extension-history-record $!escapetool.xml($record.jobType)">
            #set ($selector = "<input type='hidden' name='extensionHistoryRecord'
              value='$escapetool.xml($selectedRecordsIds.get($foreach.index))' />")
            #displayExtensionHistoryRecord($record $selector true)
          </li>
        #end
      </ul>
    #else
      <div class="box infomessage">
        $services.icon.renderHTML('info')
        $services.localization.render('extension.history.replayPlan.empty')
      </div>
    #end
    <div class="extension-history-actions">
      #if ($hasGlobalAdmin && $records && $records.size() > 0)
        <button class="btn btn-primary" name="action" value="replay" type="submit">
          $services.localization.render('extension.history.replayPlan.start')
        </button>
      #end
      <a href="#" class="btn btn-default">
        $services.localization.render('extension.history.replayPlan.cancel')
      </a>
    </div>
  </form>
#end

#macro (maybeDisplayExtensionHistoryReplayStatus $replayJobId)
  #set ($replayJobStatus = $services.extension.history.getReplayJobStatus($replayJobId))
  #if ($replayJobStatus)
    #set ($discard = $xwiki.ssfx.use('uicomponents/extension/history.css', true))
    #set ($discard = $xwiki.jsfx.use('uicomponents/extension/history.js'))
    #displayExtensionHistoryReplayStatus($replayJobStatus)
  #else
    <h2>$services.localization.render('extension.history.replayStatus.title')</h2>
    <div class="box infomessage">
      $services.icon.renderHTML('info')
      $services.localization.render('extension.history.replayStatus.notFound', [$replayJobId])
    </div>
  #end
#end

#macro (displayExtensionHistoryReplayStatus $replayJobStatus)
  #set ($currentRecordNumber = $replayJobStatus.currentRecordNumber)
  #set ($replayJobState = $replayJobStatus.state)
  #set ($finished = $replayJobState == 'FINISHED')
  #set ($waiting = $replayJobState == 'WAITING')
  ## TODO: Find a better way to detect if the replay job has failed. Checking if there are errors in the log is not
  ## reliable because there can be error logs like "Collision found on object [...]" that don't prevent the replay job
  ## from finishing successfully. The last log message cannot be used either because it is always an info log like this
  ## "Finished job of type [...] with identifier [...]".
  #set ($success = $finished && $replayJobStatus.log.getLogs('ERROR').isEmpty())
  #set ($userReference = $replayJobStatus.request.getProperty('user.reference'))
  #getExtensionHistoryURL($extensionHistoryURL 'get' {})
  <div class="extension-history-replay-status" data-jobId="$replayJobId" data-jobState="$replayJobState"
      data-extensionHistoryURL="$extensionHistoryURL">
    <h2 class="wikigeneratedheader">
      $services.localization.render('extension.history.replayStatus.title')
    </h2>
    <div class="xHint">
      $services.localization.render('extension.history.replayStatus.hint',
        [$xwiki.getUserName($userReference), $xwiki.formatDate($replayJobStatus.startDate)])
    </div>
    <ul class="extension-history-records">
      #foreach ($record in $replayJobStatus.request.records)
        #set ($classNames = ['extension-history-record', $escapetool.xml($record.jobType)])
        #if (!$finished && $foreach.index == $currentRecordNumber)
          #set ($discard = $classNames.add('loading'))
        #end
        <li class="$stringtool.join($classNames, ' ')">
          #set ($selector = '')
          #if ($foreach.index < $replayJobStatus.currentRecordNumber)
            #set ($selector = 'check')
          #elseif ($foreach.index == $currentRecordNumber && $finished)
            #if ($success)
              #set ($selector = 'check')
            #else
              #set ($selector = 'error')
            #end
          #end
          #if ($selector != '')
            #set ($selector = "<span class='extension-history-record-status
              $selector'>$services.icon.renderHTML($selector)</span>")
          #end
          #displayExtensionHistoryRecord($record $selector true)
        </li>
      #end
    </ul>
    #if (!$finished)
      #displayJobProgressBar($replayJobStatus)
    #end
    <div class="extension-history-replay-log">
      <div class="collapse-toggle xHint" data-target-xpath="following-sibling::*">
        <span class="icon-closed">$services.icon.renderHTML('caret-right')</span>
        <span class="icon-opened">$services.icon.renderHTML('caret-down')</span>
        $services.localization.render('extension.history.replayStatus.replayLog')
      </div>
      #printStatusLog($replayJobStatus)
    </div>
    #if ($waiting)
      <form class="extension-question xform" action="$extensionHistoryURL" method="post">
        <div class="hidden">
          <input type="hidden" name="form_token" value="$services.csrf.token" />
          <input type="hidden" name="jobId" value="$escapetool.xml($replayJobId)" />
        </div>
        #displayExtensionDetails_progressQuestion($NULL $replayJobStatus)
        #if ($hasGlobalAdmin)
          <div class="extension-history-actions">
            <button class="btn btn-primary" name="action" value="continue" type="submit">
              $services.localization.render('extension.history.replayStatus.continue')
            </button>
          </div>
        #end
      </form>
    #end
  </div>
#end

#macro (getExtensionHistoryURL $return $action $params)
  #set ($extensionHistoryDocRef = $services.model.createDocumentReference($NULL, 'XWiki', 'ExtensionHistory'))
  #set ($parameters = {})
  #set ($discard = $parameters.putAll($params))
  #if (!$xwiki.exists($extensionHistoryDocRef))
    #if ($action == 'get')
      #set ($discard = $parameters.put('xpage', 'extensionHistory'))
    #else
      #set ($discard = $parameters.put('xpage', 'view'))
      #set ($discard = $parameters.put('viewer', 'extensionHistory'))
    #end
  #end
  #set ($_url = $xwiki.getURL($extensionHistoryDocRef, $action, $escapetool.url($parameters)))
  #set ($return = $NULL)
  #setVariable("$return" $_url)
#end

#if ($request.xpage == 'extensionHistory' || $request.viewer == 'extensionHistory')
  #if ($request.viewer == 'extensionHistory')
    <div id="document-title">
      <h1>$services.localization.render('extension.history')</h1>
    </div>
  #else
    #template('xwikivars.vm')
  #end
  #if ($request.extensionId && ($request.extensionVersion || $request.extensionVersionConstraint))
    #handleExtensionRequest
  #else
    #handleExtensionHistoryRequest
  #end
#end

Zerion Mini Shell 1.0