diff --git a/themes/finc/templates/RecordDriver/SolrDefault/list-entry.phtml b/themes/finc/templates/RecordDriver/SolrDefault/list-entry.phtml new file mode 100644 index 0000000000000000000000000000000000000000..4a038c833273d1ea0d82f8312ec3240dd81774fb --- /dev/null +++ b/themes/finc/templates/RecordDriver/SolrDefault/list-entry.phtml @@ -0,0 +1,203 @@ +<? + // Set up some convenience variables: + $id = $this->driver->getUniqueId(); + $source = $this->driver->getSourceIdentifier(); + if (isset($this->list) && is_object($this->list)) { + $list_id = $this->list->id; + $user_id = $this->list->user_id; + } else { + $list_id = null; + $user_id = $this->user ? $this->user->id : null; + } + $isEditable = $this->user && $this->user->id === $user_id; + // Thumbnail + $coverDetails = $this->record($this->driver)->getCoverDetails('list-entry', 'medium', $this->recordLink()->getUrl($this->driver)); + $cover = $coverDetails['html']; + $thumbnail = false; + $thumbnailAlignment = $this->record($this->driver)->getThumbnailAlignment('list'); + if ($cover): + ob_start(); ?> + <div class="media-<?=$thumbnailAlignment ?> <?=$this->escapeHtmlAttr($coverDetails['size'])?>"> + <?=$cover ?> + </div> + <? $thumbnail = ob_get_contents(); ?> + <? ob_end_clean(); ?> +<? endif; ?> +<div class="result<? if($this->driver->supportsAjaxStatus()): ?> ajaxItem<? endif ?>"> + <input type="hidden" value="<?=$this->escapeHtmlAttr($id) ?>" class="hiddenId"/> + <input type="hidden" value="<?=$this->escapeHtmlAttr($source) ?>" class="hiddenSource"/> + <div class="checkbox hidden-print"> + <label><?=$this->record($this->driver)->getCheckbox()?></label> + </div> + <div class="media"> + <? if ($thumbnail && $thumbnailAlignment == 'left'): ?> + <?=$thumbnail ?> + <? endif; ?> + <div class="media-body"> + <div class="row short-view"> + <div class="col-sm-8"> + <div class="resultItemLine1"> + <? $missing = $this->driver instanceof \VuFind\RecordDriver\Missing; ?> + <? if (!$missing): ?><a href="<?=$this->recordLink()->getUrl($this->driver)?>" class="getFull" data-view="<?=$this->params->getOptions()->getListViewOption() ?>"><? endif; ?> + <span class="title"><?=$this->record($this->driver)->getTitleHtml()?></span> + <? if (!$missing): ?></a><? endif; ?> + </div> + + <div class="resultItemLine2"> + <? if($this->driver->isCollection()): ?> + <?=implode('<br>', array_map(array($this, 'escapeHtml'), $this->driver->getSummary())); ?> + <? else: ?> + <? $summAuthors = $this->driver->getPrimaryAuthors(); if (!empty($summAuthors)): ?> + <?=$this->transEsc('by')?> + <? $authorCount = count($summAuthors); foreach ($summAuthors as $i => $summAuthor): ?> + <a href="<?=$this->record($this->driver)->getLink('author', $summAuthor)?>"><?=$this->escapeHtml($summAuthor)?></a><?=($i + 1 < $authorCount ? ';' : '') ?> + <? endforeach; ?> + <? endif; ?> + + <? $journalTitle = $this->driver->getContainerTitle(); $summDate = $this->driver->getPublicationDates(); ?> + <? if (!empty($journalTitle)): ?> + <?=!empty($summAuthor) ? '<br/>' : ''?> + <?=/* TODO: handle highlighting more elegantly here */ $this->transEsc('Published in') . ' <a href="' . $this->record($this->driver)->getLink('journaltitle', str_replace(array('{{{{START_HILITE}}}}', '{{{{END_HILITE}}}}'), '', $journalTitle)) . '">' . $this->highlight($journalTitle) . '</a>';?> + <?=!empty($summDate) ? ' (' . $this->escapeHtml($summDate[0]) . ')' : ''?> + <? elseif (!empty($summDate)): ?> + <?=!empty($summAuthor) ? '<br/>' : ''?> + <?=$this->transEsc('Published') . ' ' . $this->escapeHtml($summDate[0])?> + <? endif; ?> + <? $summInCollection = $this->driver->getContainingCollections(); if (false && !empty($summInCollection)): ?> + <? foreach ($summInCollection as $collId => $collText): ?> + <div> + <b><?=$this->transEsc("in_collection_label")?></b> + <a class="collectionLinkText" href="<?=$this->url('collection', array('id' => $collId))?>?recordID=<?=urlencode($this->driver->getUniqueID())?>"> + <?=$this->escapeHtml($collText)?> + </a> + </div> + <? endforeach; ?> + <? endif; ?> + <? endif; ?> + </div> + + <div class="last"> + <? if(!$this->driver->isCollection()) { + if ($snippet = $this->driver->getHighlightedSnippet()) { + if (!empty($snippet['caption'])) { + echo '<strong>' . $this->transEsc($snippet['caption']) . ':</strong> '; + } + if (!empty($snippet['snippet'])) { + echo '<span class="quotestart">“</span>...' . $this->highlight($snippet['snippet']) . '...<span class="quoteend">”</span><br/>'; + } + } + } ?> + + <? $listTags = ($this->usertags()->getMode() !== 'disabled') ? $this->driver->getTags( + null === $list_id ? true : $list_id, // get tags for all lists if no single list is selected + $user_id, 'tag' + ) : array(); + ?> + <? if (count($listTags) > 0): ?> + <strong><?=$this->transEsc('Your Tags')?>:</strong> + <? foreach ($listTags as $tag): ?> + <a href="<?=$this->currentPath() . $results->getUrlQuery()->addFacet('tags', $tag->tag)?>"><?=$this->escapeHtml($tag->tag)?></a> + <? endforeach; ?> + <br/> + <? endif; ?> + <? $listNotes = $this->driver->getListNotes($list_id, $user_id); ?> + <? if (count($listNotes) > 0): ?> + <strong><?=$this->transEsc('Notes')?>:</strong> + <? if (count($listNotes) > 1): ?><br/><? endif; ?> + <? foreach ($listNotes as $note): ?> + <?=$this->escapeHtml($note)?><br/> + <? endforeach; ?> + <? endif; ?> + + <? if (count($this->lists) > 0): ?> + <strong><?=$this->transEsc('Saved in')?>:</strong> + <? $i=0;foreach($this->lists as $current): ?> + <a href="<?=$this->url('userList', array('id' => $current->id))?>"><?=$this->escapeHtml($current->title)?></a><? if($i++ < count($this->lists)-1): ?>,<? endif; ?> + <? endforeach; ?> + <br/> + <? endif; ?> + + <div class="callnumAndLocation ajax-availability hidden"> + <? if ($this->driver->supportsAjaxStatus()): ?> + <strong class="hideIfDetailed"><?=$this->transEsc('Call Number')?>:</strong> + <span class="callnumber ajax-availability hidden"> + <?=$this->transEsc('Loading')?>...<br/> + </span> + <strong><?=$this->transEsc('Located')?>:</strong> + <span class="location ajax-availability hidden"> + <?=$this->transEsc('Loading')?>... + </span> + <div class="locationDetails"></div> + <? else: ?> + <? $summCallNo = $this->driver->getCallNumber(); if (!empty($summCallNo)): ?> + <strong><?=$this->transEsc('Call Number')?>:</strong> <?=$this->escapeHtml($summCallNo)?> + <? endif; ?> + <? endif; ?> + </div> + + <? /* We need to find out if we're supposed to display an OpenURL link ($openUrlActive), + but even if we don't plan to display the link, we still want to get the $openUrl + value for use in generating a COinS (Z3988) tag -- see bottom of file. + */ + $openUrl = $this->openUrl($this->driver, 'results'); + $openUrlActive = $openUrl->isActive(); + // Account for replace_other_urls setting + $urls = $this->record($this->driver)->getLinkDetails($openUrlActive); + + if ($openUrlActive || !empty($urls)): + ?> + <? if ($openUrlActive): ?> + <br/> + <?=$openUrl->renderTemplate()?> + <? endif;?> + + <? if (!is_array($urls)) { $urls = array(); } + if(!$this->driver->isCollection()): + foreach ($urls as $current): ?> + <a href="<?=$this->escapeHtmlAttr($this->proxyUrl($current['url']))?>" class="fulltext" target="new"><i class="fa fa-external-link" aria-hidden="true"></i> <?=($current['url'] == $current['desc']) ? $this->transEsc('Get full text') : $this->escapeHtml($current['desc'])?></a> + <? endforeach; ?> + <? endif; ?> + <? endif; ?> + <br/> + + <?=$this->record($this->driver)->getFormatList() ?> + + <? if (!$openUrlActive && empty($urls) && $this->driver->supportsAjaxStatus()): ?> + <span class="status ajax-availability hidden"><?=$this->transEsc('Loading')?>...</span> + <br/><br/> + <? endif; ?> + <?=$this->record($this->driver)->getPreviews()?> + </div> + </div> + + <div class="col-sm-4 right"> + <? if ($isEditable): ?> + <i class="fa fa-fw fa-edit" aria-hidden="true"></i> <a href="<?=$this->url('myresearch-edit')?>?id=<?=urlencode($id)?>&source=<?=urlencode($source)?><? if (!is_null($list_id)):?>&list_id=<?=urlencode($list_id)?><? endif; ?>" class="edit tool"><?=$this->transEsc('Edit')?></a><br/> + <? /* Use a different delete URL if we're removing from a specific list or the overall favorites: */ + $deleteUrl = null === $list_id + ? $this->url('myresearch-favorites') + : $this->url('userList', array('id' => $list_id)); + $deleteUrlGet = $deleteUrl . '?delete=' . urlencode($id) . '&source=' . urlencode($source); + + $dLabel = 'delete-label-' . preg_replace('[\W]','-',$id); + ?> + <div class="dropdown"> + <i class="fa fa-fw fa-trash-o" aria-hidden="true"></i> <a class="dropdown-toggle" id="<?=$dLabel ?>" role="button" data-toggle="dropdown" data-target="#" href="<?=$deleteUrlGet ?>"> + <?=$this->transEsc('Delete') ?> + </a> + <ul class="dropdown-menu" role="menu" aria-labelledby="<?=$dLabel ?>"> + <li><a onClick="$.post('<?=$deleteUrl?>', {'delete':'<?=$this->escapeJs($id) ?>','source':'<?=$this->escapeJs($source) ?>','confirm':true},function(){location.reload(true)})" title="<?=$this->transEsc('confirm_delete_brief')?>"><?=$this->transEsc('confirm_dialog_yes')?></a></li> + <li><a><?=$this->transEsc('confirm_dialog_no')?></a></li> + </ul> + </div> + + <?=$this->driver->supportsCoinsOpenUrl()?'<span class="Z3988" title="'.$this->escapeHtmlAttr($this->driver->getCoinsOpenUrl()).'"></span>':''?> + <? endif; ?> + </div> + </div> + </div> + <? if ($thumbnail && $thumbnailAlignment == 'right'): ?> + <?=$thumbnail ?> + <? endif; ?> + </div> +</div> diff --git a/themes/finc/templates/myresearch/mylist.phtml b/themes/finc/templates/myresearch/mylist.phtml new file mode 100644 index 0000000000000000000000000000000000000000..82eca59191604a7797ab0662f147709303767a87 --- /dev/null +++ b/themes/finc/templates/myresearch/mylist.phtml @@ -0,0 +1,85 @@ +<? + // Grab list object from search results (if applicable): + $list = $this->results->getListObject(); + + // Set up page title: + $this->headTitle(isset($list) ? $list->title : $this->translate('Favorites')); + + // Set up breadcrumbs: + $currPage = isset($list) ? 'List' : 'Favorites'; + $this->layout()->breadcrumbs = '<li><a href="' . $this->url('myresearch-home') . '">' . $this->transEsc('Your Account') . '</a></li> <li class="active">' . $this->transEsc($currPage) . '</li>'; + + // Load Javascript dependencies into header: + $this->headScript()->appendFile("check_item_statuses.js"); + + // Load Javascript only if list view parameter is NOT full: + if ($this->params->getOptions()->getListViewOption()!="full") { + $this->headScript()->appendFile("record.js"); + $this->headScript()->appendFile("embedded_record.js"); + } + + $recordTotal = $this->results->getResultTotal(); + + // Convenience variable: + $account = $this->auth()->getManager(); + $user = $this->auth()->isLoggedIn(); +?> + +<?=$this->flashmessages()?> + +<div class="row"> + <div class="<?=$this->layoutClass('mainbody')?>"> + <div class="clearfix hidden-print"> + <h2 class="pull-left flip"><?=$list ? $this->escapeHtml($list->title) : $this->transEsc("Your Favorites")?></h2> + <div class="pull-right flip"> + <? if (isset($list)): ?> + <? if ($list->editAllowed($account->isLoggedIn())): ?> + <a href="<?=$this->url('editList', array('id' => $list->id)) ?>" class="btn btn-link"><i class="fa fa-edit" aria-hidden="true"></i> <?=$this->transEsc("edit_list")?></a> + <div class="btn-group"> + <a class="btn btn-link dropdown-toggle" data-toggle="dropdown" href="<?=$this->url('myresearch-deletelist') ?>?listID=<?=urlencode($list->id)?>"> + <i class="fa fa-trash-o" aria-hidden="true"></i> <?=$this->transEsc("delete_list")?> + </a> + <ul class="dropdown-menu"> + <li><a href="<?=$this->url('myresearch-deletelist') ?>?listID=<?=urlencode($list->id)?>&confirm=1"><?=$this->transEsc('confirm_dialog_yes') ?></a></li> + <li><a href="#"><?=$this->transEsc('confirm_dialog_no')?></a></li> + </ul> + </div> + <? endif; ?> + <? elseif ($recordTotal > 0): ?> + <?=$this->transEsc("Showing")?> + <strong><?=$this->localizedNumber($this->results->getStartRecord())?></strong> - <strong><?=$this->localizedNumber($this->results->getEndRecord())?></strong> + <?=$this->transEsc('of')?> <strong><?=$this->localizedNumber($recordTotal)?></strong> + <? endif; ?> + </div> + </div> + <? if ($list && !empty($list->description)): ?> + <p><?=$this->escapeHtml($list->description)?></p> + <? endif; ?> + <? if ($recordTotal > 0): ?> + <div class="resulthead"> + <div class="pull-right flip"> + <?=$this->render('search/controls/limit.phtml')?> + <?=$this->render('search/controls/sort.phtml')?> + </div> + </div> + <form class="form-inline" method="post" name="bulkActionForm" action="<?=$this->url('cart-myresearchbulk')?>" data-lightbox data-lightbox-onsubmit="bulkFormHandler"> + <?=$this->context($this)->renderInContext('myresearch/bulk-action-buttons.phtml', array('idPrefix' => '', 'list' => isset($list) ? $list : null, 'account' => $this->account))?> + <? foreach ($this->results->getResults() as $i=>$current): ?> + <?=$this->record($current)->getListEntry($list, $user)?> + <? endforeach; ?> + </form> + <?=$this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', array('results' => $this->results))?> + <? else: ?> + <p><?=$this->transEsc('You do not have any saved resources')?></p> + <? endif; ?> + </div> + + <div class="<?=$this->layoutClass('sidebar')?>"> + <? if ($user): ?> + <?=$this->context($this)->renderInContext("myresearch/menu.phtml", array('active' => isset($list) ? 'list' . $list['id'] : 'favorites'))?> + <? endif; ?> + <? foreach ($this->results->getRecommendations('side') as $current): ?> + <?=$this->recommend($current)?> + <? endforeach; ?> + </div> +</div>