SmartIT_Extensions/BMC/smart-it-full-helix/views/knowledge-article/knowledge-article-metadata....

398 lines
22 KiB
HTML

<div loading-spinner if="state.dataIsLoading" centered="true" overlay="true"></div>
<div ux-id="ka-metadata" class="ka-metadata__main-section_view clearfix" role="region" ng-if="!editMode">
<div ux-id="visibility-details" class="ka-metadata__section" ng-if="article.articleVisibilityGroup.length">
<div ux-id="field-label" class="label__text">
{{ 'create.knowledge.visibility' | i18n }}
</div>
<div>
<span ux-id="field-value_{{$index}}" ng-repeat="visibility in article.articleVisibilityGroup">{{visibility | parseVisibilityGroups}}
{{$last ? '' : ', '}}
</span>
</div>
</div>
<div ux-id="publish-details" class="ka-metadata__section clearfix">
<div ux-id="field-label" class="label__text">
{{ 'create.knowledge.visibility.internalUse' | i18n }}
</div>
<div ux-id="field-value">
{{article.internalUse ? 'common.labels.no' : 'common.labels.yes' | i18n}}
</div>
</div>
<div class="ka-metadata__section clearfix">
<div class="ka-metadata__ca-section-item" ng-if="article.author">
<div class="app__person-avatar pull-left">
<img alt="{{article.author.fullName}}" class="app__person-avatar_small" imgplaceholder="user"
user-availability="article.author" thumbnail-img="{{article.author.thumbnail}}" />
</div>
<div class="ka__author-name">
<div class="ka-metadata__label-small">{{'create.knowledge.author' | i18n}}</div>
<span ng-if="article.author.loginId" class="ticket__field-value">
<a ux-id="ka-metadata-author" aria-label="{{'create.knowledge.author' | i18n}} {{article.author.fullName}}"
href="#/person/{{article.author.loginId | escape}}">{{article.author.fullName}}</a>
</span>
</div>
</div>
<div class="ka-metadata__ca-section-item" ng-if="article.language">
<div class="ka-metadata__label-small">{{'common.labels.language' | i18n}}</div>
<span>{{ article.language | localizeLabel: 'language':'knowledge' }}</span>
</div>
</div>
<div class="clearfix ka-metadata__section" ng-if="article.assignee">
<div class="app__person-avatar pull-left">
<img class="app__person-avatar_small" ng-if="article.assignee.loginId" alt="{{article.assignee.fullName}}" user-availability="article.assignee" imgplaceholder="user"
thumbnail-img="{{'data:' + article.assignee.thumbnailMime + ';base64,' + article.assignee.thumbnail}}" />
<span ng-if="!article.assignee.loginId" class="ka-metadata-assignment__none icon-question_circle"></span>
</div>
<div class="ka__author-name">
<div class="ka-metadata__label-small">{{'common.labels.assignedTo' | i18n}}</div>
<span ng-if="!article.assignee.loginId" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
<span ng-if="article.assignee.loginId" class="ticket__field-value">
<a ux-id="ka-metadata-assignee-link" aria-label="{{'common.labels.assignee' | i18n}} {{article.assignee.fullName}}"
href="#/person/{{article.assignee.loginId | escape}}">{{article.assignee.fullName}}</a>
</span>
</div>
</div>
<div class="ka-metadata__section clearfix" ng-if="article.accessMappings.detailsEditAllowed !== undefined && article.nextReviewDate && article.status.value === 'Published'">
<div class="label__text">
{{ 'create.knowledge.nextReviewDate' | i18n }}
</div>
<div>
{{article.nextReviewDate ? (article.nextReviewDate | datePreConfigTimezone:'mediumDate') : ''}}
</div>
</div>
<div ux-id="company-details" class="ka-metadata__section">
<span ux-id="field-label" class="label__text">
{{'create.knowledge.company' | i18n}}
</span>
<div ux-id="company-values" class="relative-position">
{{article.company.name === 'All' ? 'ka.company.all' : article.company.name | i18n}} ({{'ka.company.primary' | i18n}})
<span ux-id="field-value_{{$index}}" ng-repeat="company in article.additionalCategoriesCompanies">, {{company.name}}</span>
</div>
</div>
<div ux-id="keywords-details" class="ka-metadata__section" ng-if="article.tags && article.tags.length">
<div ux-id="field-label" class="label__text">
{{'create.knowledge.keywords' | i18n}}
</div>
<div>
<span ux-id="field-value_{{$index}}" class="ka-metadata-tag-panel__keyword" ng-repeat="tag in article.tags track by $index">
{{tag}}{{$last ? '' : ', '}}
</span>
</div>
</div>
<div ux-id="site-details" class="ka-metadata__section" ng-if="article.allSites.length">
<span ux-id="field-label" class="label__text">
{{'common.label.site' | i18n}}
</span>
<div class="relative-position">
<span ux-id="field-value_{{$index}}" ng-repeat="site in article.allSites">{{site.name ? site.name : site.siteGroup ? site.siteGroup : site.region}} {{site.primary ? '(' + ('common.labels.primary' | i18n) + ')' : ''}}{{$last ? '' : ', '}}</span>
</div>
</div>
<div ux-id="organization-department-details" class="ka-metadata__section" ng-if="article.allOrganizations.length">
<span ux-id="field-label" class="label__text">
{{'create.knowledge.organization.department' | i18n}}
</span>
<div class="relative-position">
<span ux-id="field-value_{{$index}}" ng-repeat="organization in article.allOrganizations">{{organization.department ? organization.department : organization.organization}} {{organization.primary ? '(' + ('common.labels.primary' | i18n) + ')' : ''}}{{$last ? '' : ', '}}</span>
</div>
</div>
<div ux-id="business-service-details" class="ka-metadata__section" ng-if="article.allServices.length">
<span ux-id="field-label" class="label__text">
{{'create.knowledge.business.service' | i18n}}
</span>
<div class="relative-position">
<span ux-id="field-value_{{$index}}" ng-repeat="service in article.allServices">{{service.name}} {{service.primary ? '(' + ('common.labels.primary' | i18n) + ')' : ''}}{{$last ? '' : ', '}}</span>
</div>
</div>
<div class="ka-metadata__categories">
<div ux-id="field_{{::category.name}}" class="categories-section__subcategory" ng-repeat="category in article.categoriesControls">
<span ux-id="category-label" class="label__text" ng-if="(article.categoriesSet | filter: {name: category.name}).length">{{category.label}}</span>
<div ux-id="ka-metadata-category_{{$index}}">
<div ux-id="category-value_{{$index}}" ng-repeat="categoryTag in (article.categoriesSet | filter: {name: category.name})">
{{(categoryTag | serializeCategory) || ('categorization.noneSet' | i18n)}}{{categoryTag.primary ? ' (' + ('common.labels.primary' | i18n) + ')' : ''}}{{$last ? '' : ','}}
</div>
</div>
</div>
</div>
</div>
<form class="ka-metadata__main-section clearfix" role="region" ng-if="editMode">
<ka-visibility-directive article="article" company="userCompany"></ka-visibility-directive>
<!-- author and language -->
<div class="ka-metadata__ca-section clearfix">
<div ux-id="ka-author" class="ka-metadata__ca-section-item">
<label class="label_control-wrap">
<span class="label__text">
{{'create.knowledge.author' | i18n}}
</span>
<div class="relative-position">
<input type="text"
title="{{'create.knowledge.author' | i18n}}"
class="text-input full-width"
ng-model="article.author.fullName"
required
ng-disabled="true"
placeholder="{{ 'create.knowledge.author.placeholder' | i18n }}">
</div>
</label>
</div>
<div ux-id="ka-language" class="ka-metadata__ca-section-item">
<label class="label_control-wrap">
<span class="label__text">
{{'common.labels.language' | i18n}}
</span>
<div class="relative-position">
<selection selection-items="languages"
selected-item="state.selectedLanguage"
disabled-selection="!article.accessMappings.detailsEditAllowed"
title-text="{{'common.labels.language' | i18n}}"
label="label"
value="name"
selection-callback="selectLanguage(item)"
update-selected-item=true
show-clear=true>
</selection>
</div>
</label>
</div>
</div>
<!-- assignee -->
<div ux-id="field_assignee" class="ka-metadata__section col-xs-12">
<span ux-id="assignee-label" class="label__text">{{ 'create.ticket.assignee' | i18n }}</span>
<div>
<div ux-id="auto-assign-text" class="auto-assign__text" ng-if="article.autoAssign">
{{ 'create.ticket.auto.assign' | i18n }}
</div>
<div class="ka-metadata__assignment" ng-if="!article.autoAssign">
<img ux-id="avatar" ng-if="article.assignee.loginId" alt="{{article.assignee.fullName}}" class="ticket-assignee__thumbnail" imgplaceholder="user"
thumbnail-img="{{'data:' + article.assignee.thumbnailMime + ';base64,' + article.assignee.thumbnail}}" />
<span ng-if="!article.assignee.loginId" class="ticket-assignee__none icon-question_circle"></span>
<div class="ticket-assignee__info" tabindex="0">
<div ux-id="assigneeLabel" class="ticket__label-small">{{'common.labels.assignedTo' | i18n }}:</div>
<span ux-id="assignee-name" ng-if="!article.assignee.loginId" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
<span ux-id="assignee-name" ng-if="article.assignee.loginId" class="ticket__field-value">{{article.assignee.fullName}}</span>
</div>
<div class="ticket-assignee__support-group" tabindex="0">
<div ux-id="support-group-label" class="ticket__label-small">{{'common.labels.supportGroup' | i18n}}:</div>
<span ux-id="support-group-name" class="ticket__field-value">{{ article.assigneeGroup.name || ('common.label.noneYet' | i18n ) }}</span>
</div>
</div>
<div ux-id="assign-me-btn" class="ticket-incident-assignee__action" ng-if="article.accessMappings.assigneeEditAllowed && article.assignee.loginId !== loggedInUserId"
ng-click="assignToMe($event, 'ticketassignee')" ng-enter="assignToMe($event, 'ticketassignee')">
<i class="icon-user_plus"></i>
<a aria-label="{{'common.labels.assignToMe' | i18n}}" tabindex="0">
{{'common.labels.assignToMe' | i18n }}
</a>
</div>
<button ux-id="change-assign-btn" type="button" class="ka-metadata__change_assignment-btn ka-metadata__assignment-btn" ng-click="assign($event)" ng-if="article.accessMappings.assigneeEditAllowed"
aria-label="{{'common.button.change' | i18n}} {{'common.labels.assignee' | i18n}}">
{{'common.button.change' | i18n}}
</button>
</div>
</div>
<!-- Next Review Date -->
<div class="col-xs-12 ka-metadata__section" ng-if="article.accessMappings.detailsEditAllowed !== undefined && article.status.value === 'Published'">
<label class="label_control-wrap">
<span class="label__text">
{{'create.knowledge.nextReviewDate' | i18n}}
</span>
<div class="custom-field__date ka-metadata__reviewdate">
<input ux-id="ka-metadata-open-next-review-date" type="text"
class="form-control"
datepicker-options="{'showWeeks': false}"
datepicker-popup="mediumDate"
aria-required="true"
aria-labelledby="nextReviewDateLabel"
ng-model="article.nextReviewDate"
is-open="reviewDate.opened"
show-button-bar="false"
min-date="currentDate"
ng-click="openNextReviewDate($event)"
ng-disabled="!article.accessMappings.detailsEditAllowed"/>
<i class="icon-calendar custom-field__date-icon"></i>
</div>
</label>
</div>
<!-- keywords -->
<div ux-id="ka-keyword" class="col-xs-12 ka-metadata__section" ng-if="article.accessMappings.detailsEditAllowed || article.tags.length">
<label class="label_control-wrap">
<span class="label__text">
{{'create.knowledge.keywords' | i18n}}
</span>
<div ng-class="{'tag-section': true, 'tag-section_disabled': !article.accessMappings.detailsEditAllowed}" ng-if="article.tags.length">
<div class="tag_removable" ng-repeat="tag in article.tags track by $index">
{{tag}}
<i ux-id="ka-metadata-remove-tag_{{$index}}" ng-show="article.accessMappings.keywordsEditAllowed" class="icon-cross tag__remove" ng-click="removeTag(tag, article.tags)" ng-enter="removeTag(tag, article.tags)"
title="{{'common.button.remove' | i18n}} {{'common.labels.keyword'| i18n}} {{tag}}" role="link" tabindex="0"></i> &nbsp;
</div>
</div>
<input ng-show="article.accessMappings.keywordsEditAllowed" type="text"
ng-if="article.accessMappings.detailsEditAllowed"
title="{{'create.knowledge.keywords' | i18n}}: {{ 'create.knowledge.keywords.placeholder' | i18n }}"
class="text-input full-width"
ng-model="state.tag"
role="textbox"
ng-enter="addKeyword();"
placeholder="">
<div ng-show="article.accessMappings.keywordsEditAllowed" class="ka-metadata__input-description">{{ 'create.knowledge.keywords.placeholder' | i18n }}</div>
</label>
</div>
<!-- company -->
<div ux-id="ka-company" class="ka-metadata__section col-xs-12" ng-if="article.accessMappings.companyEditAllowed || article.allCompanies.length">
<label class="label_control-wrap" for="ka-metadata__company" aria-label="{{'create.knowledge.company' | i18n}}">
<span class="label__text">
{{'create.knowledge.company' | i18n}}
</span>
</label>
<div ng-class="{'tag-section': true, 'tag-section_disabled': !article.accessMappings.companyEditAllowed}" ng-if="article.allCompanies.length">
<div ux-id="ka-metadata-company_{{$index}}" ng-class="{tag: true, tag_removable: !company.primary, 'tag__potential-primary': article.accessMappings.companyEditAllowed}"
ng-repeat="company in article.allCompanies" ng-click="article.accessMappings.companyEditAllowed && setPrimaryCompany(company)"
ng-enter="article.accessMappings.companyEditAllowed && setPrimaryCompany(company)" tabindex="0">
<span ux-id="company-name" class="tag__name" aria-label="{{'create.knowledge.company' | i18n}} {{company.name == 'All' ? ('ka.company.all' | i18n) : company.name }}">{{company.name == 'All' ? ('ka.company.all' | i18n) : company.name }}</span>
<span ux-id="primary-company" class="tag__primary" ng-if="company.primary">{{"ka.company.primary" | i18n}}</span>
<i ux-id="ka-metadata-remove-primarycompany" class="icon-cross tag__remove" ng-click="removeCompany(company, $event)" ng-enter="removeCompany(company, $event)" ng-if="!company.primary"
title="{{'common.button.remove' | i18n}} {{'common.label.company'| i18n}} {{company.name}}" role="link" tabindex="0"></i>
</div>
</div>
<div class="relative-position" ng-if="article.accessMappings.companyEditAllowed">
<selection input-id="ka-metadata__company"
selection-items="availiableCompanies"
selected-item=""
selection-callback="addCompany(item)"
title-text="{{'create.knowledge.company.placeholder' | i18n}}"
label="name"
value="name"
update-selected-item=false,
disabled-selection="!availiableCompanies.length && !state.tooManyCompanies"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchCompany"
show-chunking-tooltip="true"
typeahead-mode="state.tooManyCompanies"
typeahead-details="company as company.name for company in getList($viewValue)"
typeahead-get-list="getCompaniesByName(name)"
show-clear=true>
</selection>
</div>
</div>
<!-- sites -->
<div ux-id="ka-site" class="col-xs-12 ka-metadata__section" ng-if="article.accessMappings.detailsEditAllowed || article.allSites.length">
<label class="label_control-wrap" for="foundation-selector__site">
<span class="label__text">
{{'common.label.site' | i18n}}
</span>
</label>
<div ng-class="{'tag-section': true, 'tag-section_disabled': !article.accessMappings.detailsEditAllowed}" ng-if="article.allSites.length">
<div ux-id="ka-metadata-set-primarytag_{{$index}}" ng-repeat="site in article.allSites" ng-click="article.accessMappings.detailsEditAllowed && setPrimaryTag(site, article.allSites)"
ng-enter="article.accessMappings.detailsEditAllowed && setPrimaryTag(site, article.allSites)" tabindex="0"
ng-class="{tag_removable: true, 'tag__potential-primary': site.companyName === state.primaryCompany.name}">
<span class="tag__name">{{buildSiteTag(site)}}</span>
<span class="tag__primary" ng-if="site.primary">{{("common.labels.primary" | i18n).toUpperCase()}}</span>
<i ux-id="ka-metadata-remove-primarytag" class="icon-cross tag__remove" ng-click="removeTag(site, article.allSites)" ng-enter="removeTag(site, article.allSites)"
title="{{'common.button.remove' | i18n}} {{'common.label.site'| i18n}} {{buildSiteTag(site)}}" role="link" tabindex="0"></i>
</div>
</div>
<foundation-selector ng-if="article.accessMappings.detailsEditAllowed" type="site" multiple="true" use-chunking="false"
typeahead-mode="true" options="foundationOptions.site" selected-foundations="article.allSites" inline="true" is-full-width="true"></foundation-selector>
</div>
<!-- organisation/department -->
<div ux-id="organization-department" class="col-xs-12 ka-metadata__section" ng-if="article.accessMappings.detailsEditAllowed || article.allOrganizations.length">
<label class="label_control-wrap" for="foundation-selector__organization">
<span class="label__text">
{{'create.knowledge.organization.department' | i18n}}
</span>
</label>
<div ng-class="{'tag-section': true, 'tag-section_disabled': !article.accessMappings.detailsEditAllowed}" ng-if="article.allOrganizations.length">
<div ux-id="ka-metadata-all-organization_{{$index}}" ng-repeat="organization in article.allOrganizations" ng-click="article.accessMappings.detailsEditAllowed && setPrimaryTag(organization, article.allOrganizations)"
ng-enter="article.accessMappings.detailsEditAllowed && setPrimaryTag(organization, article.allOrganizations)" tabindex="0"
ng-class="{tag_removable: true, 'tag__potential-primary': organization.companyName === state.primaryCompany.name}">
<span class="tag__name">{{buildOrganizationTag(organization)}}</span>
<span class="tag__primary" ng-if="organization.primary">{{("common.labels.primary" | i18n).toUpperCase()}}</span>
<i ux-id="ka-metadata-remove-organization" class="icon-cross tag__remove" ng-click="removeTag(organization, article.allOrganizations)" ng-enter="removeTag(organization, article.allOrganizations)"
title="{{'common.button.remove' | i18n}} {{'common.label.organization'| i18n}} {{buildOrganizationTag(organization)}}" role="link" tabindex="0"></i>
</div>
</div>
<foundation-selector ng-if="article.accessMappings.detailsEditAllowed" type="organization" multiple="true" use-chunking="false" typeahead-mode="true"
options="foundationOptions.organization" selected-foundations="article.allOrganizations" inline="true" is-full-width="true"></foundation-selector>
</div>
<!-- business service -->
<div ux-id="field_impactedService" class="col-xs-12 ka-metadata__section" ng-if="article.accessMappings.detailsEditAllowed || article.allServices.length">
<label class="label_control-wrap" for="ka-metadata__business-service">
<span class="label__text">
{{'create.knowledge.business.service' | i18n}}
</span>
</label>
<div ng-class="{'tag-section': true, 'tag-section_disabled': !article.accessMappings.detailsEditAllowed}" ng-if="article.allServices.length">
<div ux-id="ka-metadata-all-services_{{$index}}" class="tag_removable tag__potential-primary" ng-repeat="service in article.allServices"
ng-click="article.accessMappings.detailsEditAllowed && ((service.company.name === 'All') || service.company.name === state.primaryCompany.name) && setPrimaryBusinessService(service, article.allServices);"
ng-enter="article.accessMappings.detailsEditAllowed && ((service.company.name === 'All') || service.company.name === state.primaryCompany.name) && setPrimaryBusinessService(service);" tabindex="0">
<span class="tag__name">{{service.name}}</span>
<span class="tag__primary" ng-if="service.primary">{{("common.labels.primary" | i18n).toUpperCase()}}</span>
<i ux-id="ka-metadata-remove-service" class="icon-cross tag__remove" ng-click="removeTag(service, article.allServices)" ng-enter="removeTag(service, article.allServices)"
title="{{'common.button.remove' | i18n}} {{'common.labels.service'| i18n}} {{service.name}}" role="link" tabindex="0"></i>
</div>
</div>
<div class="ka-metadata__business-service" ng-if="article.accessMappings.detailsEditAllowed">
<input ux-id="ka-metadata-service-state" type="text"
title="{{'create.knowledge.business.service' | i18n}}"
class="text-input full-width"
id="ka-metadata__business-service"
ng-model="state.service"
role="combobox"
autocomplete="off"
placeholder="{{ 'create.knowledge.business.service.placeholder' | i18n }}"
typeahead-min-length="3"
typeahead-template-url="views/create/custom-add-asset-dropdown.html"
typeahead="service as service.name for service in getServicesByText($viewValue, '%')"
typeahead-on-select="addTag($item, article.allServices, state.service); state.service = ''"
typeahead-loading="state.loadService"
typeahead-wait-ms="500"
ng-blur="onServiceFocusBlur()"
uib-tooltip="{{'search.category.exceedsChunkSize' | i18n}}"
tooltip-is-open="state.isTooltipOpenService"
tooltip-enable="state.exceedsChunkSizeService"
tooltip-trigger="'none'"
tooltip-placement="auto">
<div class="select-custom-dropdown__spinner-container">
<loading-spinner if="state.loadService" inline="true"></loading-spinner>
</div>
<i ux-id="ka-metadata-clear-service" class="icon-cross item-input__delete-btn" tabindex=0 role="link"
title="{{'common.button.clear' | i18n}} {{'common.labels.service' | i18n }}" ng-if="state.service && !state.loadService"
focus-input-on-clear ng-click="state.service = ''" ng-enter="state.service = ''">
</i>
</div>
</div>
<!-- operationa/product categories -->
<div class="ka-metadata__categories col-xs-12" ng-show="article.categoriesControls">
<categories-editor edit-disabled="!article.accessMappings.categorizationEditAllowed"
entity="article"
categories="article.categoriesControls"
update-is-handled-by-parent="false"
class="editable-content-section-block category-editor__center"
multiple="true"
categories-set="article.categoriesSet"
company="state.primaryCompany">
</categories-editor>
</div>
</form>