First commit
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
{footer_script}
|
||||
jQuery.fn.lightAccordion = function(options) {
|
||||
var settings = $.extend({
|
||||
header: 'dt',
|
||||
content: 'dd',
|
||||
active: 0
|
||||
}, options);
|
||||
|
||||
return this.each(function() {
|
||||
var self = jQuery(this);
|
||||
|
||||
var contents = self.find(settings.content),
|
||||
headers = self.find(settings.header);
|
||||
|
||||
contents.not(contents[settings.active]).hide();
|
||||
|
||||
self.on('click', settings.header, function() {
|
||||
var content = jQuery(this).next(settings.content);
|
||||
content.slideDown();
|
||||
contents.not(content).slideUp();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$('#menubar').lightAccordion({
|
||||
active: {$ACTIVE_MENU}
|
||||
});
|
||||
|
||||
/* in case we have several infos/errors/warnings display bullets */
|
||||
jQuery(document).ready(function() {
|
||||
var eiw = ["infos","erros","warnings", "messages"];
|
||||
|
||||
for (var i = 0; i < eiw.length; i++) {
|
||||
var boxType = eiw[i];
|
||||
|
||||
if (jQuery("."+boxType+" ul li").length > 1) {
|
||||
jQuery("."+boxType+" ul li").css("list-style-type", "square");
|
||||
jQuery("."+boxType+" .eiw-icon").css("margin-right", "20px");
|
||||
}
|
||||
}
|
||||
|
||||
if (jQuery('h2').length > 0) {
|
||||
jQuery('h1').html(jQuery('h2').html());
|
||||
}
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<div id="menubar">
|
||||
<div id="adminHome"><a href="{$U_ADMIN}" class="admin-main"><i class="icon-television"></i> {'Dashboard'|@translate}</a></div>
|
||||
|
||||
<dl>
|
||||
<dt><i class="icon-picture"> </i><span>{'Photos'|@translate} </span><i class="icon-down-open open-menu"></i></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a href="{$U_ADD_PHOTOS}"><i class="icon-plus-circled"></i>{'Add'|@translate}</a></li>
|
||||
{if $SHOW_RATING}
|
||||
<li><a href="{$U_RATING}"><i class="icon-star"></i>{'Rating'|@translate}</a></li>
|
||||
{/if}
|
||||
<li><a href="{$U_TAGS}"><i class="icon-tags"></i>{'Tags'|@translate}</a></li>
|
||||
<li><a href="{$U_RECENT_SET}"><i class="icon-clock"></i>{'Recent photos'|@translate}</a></li>
|
||||
<li><a href="{$U_BATCH}"><i class="icon-th"></i>{'Batch Manager'|@translate}</a></li>
|
||||
{if $NB_PHOTOS_IN_CADDIE > 0}
|
||||
<li><a href="{$U_CADDIE}"><i class="icon-flag"></i>{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li>
|
||||
{/if}
|
||||
{if $NB_ORPHANS > 0}
|
||||
<li><a href="{$U_ORPHANS}"><i class="icon-heart-broken"></i>{'Orphans'|@translate}<span class="adminMenubarCounter">{$NB_ORPHANS}</span></a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-sitemap"> </i><span>{'Albums'|@translate} </span><i class="icon-down-open open-menu"></i></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a href="{$U_ALBUMS}"><i class="icon-folder-open"></i>{'Manage'|@translate}</a></li>
|
||||
<li><a href="{$U_CAT_OPTIONS}"><i class="icon-pencil"></i>{'Properties'|@translate}</a></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-users"> </i><span>{'Users'|@translate} </span><i class="icon-down-open open-menu"></i></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a href="{$U_USERS}"><i class="icon-user-add"></i>{'Manage'|@translate}</a></li>
|
||||
<li><a href="{$U_GROUPS}"><i class="icon-group"></i>{'Groups'|@translate}</a></li>
|
||||
<li><a href="{$U_NOTIFICATION_BY_MAIL}"><i class="icon-mail-1"></i>{'Notification'|@translate}</a></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><a href="{$U_PLUGINS}" class="admin-main"><i class="icon-puzzle"> </i><span>{'Plugins'|@translate} </span></a></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-wrench"> </i><span>{'Tools'|@translate} </span><i class="icon-down-open open-menu"></i></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
{if $ENABLE_SYNCHRONIZATION}
|
||||
<li><a href="{$U_CAT_UPDATE}"><i class="icon-exchange"></i>{'Synchronize'|@translate}</a></li>
|
||||
{/if}
|
||||
<li><a href="{$U_HISTORY_STAT}"><i class="icon-signal"></i>{'History'|@translate}</a></li>
|
||||
<li><a href="{$U_MAINTENANCE}"><i class="icon-tools"></i>{'Maintenance'|@translate}</a></li>
|
||||
{if isset($U_COMMENTS)}
|
||||
<li><a href="{$U_COMMENTS}"><i class="icon-chat"></i>{'Comments'|@translate}
|
||||
{if isset($NB_PENDING_COMMENTS) and $NB_PENDING_COMMENTS > 0}
|
||||
<span class="adminMenubarCounter" title="{'%d waiting for validation'|translate:$NB_PENDING_COMMENTS}">{$NB_PENDING_COMMENTS}</span>
|
||||
{/if}</a></li>
|
||||
{/if}
|
||||
{if isset($U_UPDATES)}
|
||||
<li><a href="{$U_UPDATES}"><i class="icon-arrows-cw"></i>{'Updates'|@translate}</a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-cog"> </i><span>{'Configuration'|@translate} </span><i class="icon-down-open open-menu"></i></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a href="{$U_CONFIG_GENERAL}"><i class="icon-cog-alt"></i>{'Options'|@translate}</a></li>
|
||||
<li><a href="{$U_CONFIG_MENUBAR}"><i class="icon-menu"></i>{'Menu Management'|@translate}</a></li>
|
||||
{if {$U_SHOW_TEMPLATE_TAB}}
|
||||
<li><a href="{$U_CONFIG_EXTENTS}"><i class="icon-code"></i>{'Templates'|@translate}</a></li>
|
||||
{/if}
|
||||
<li><a href="{$U_CONFIG_LANGUAGES}"><i class="icon-language"></i>{'Languages'|@translate}</a></li>
|
||||
<li><a href="{$U_CONFIG_THEMES}"><i class="icon-brush"></i>{'Themes'|@translate}</a></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</div> <!-- menubar -->
|
||||
|
||||
<div id="content" class="content">
|
||||
|
||||
<h1>{$ADMIN_PAGE_TITLE}<span class="admin-object-id">{$ADMIN_PAGE_OBJECT_ID}</span></h1>
|
||||
|
||||
{if isset($TABSHEET)}
|
||||
{$TABSHEET}
|
||||
{/if}
|
||||
{if isset($U_HELP)}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{footer_script}
|
||||
jQuery('.help-popin').colorbox({ width:"500px" });
|
||||
{/footer_script}
|
||||
<ul class="HelpActions">
|
||||
<li><a href="{$U_HELP}&output=content_only" title="{'Help'|@translate}" class="help-popin"><span class="icon-help-circled"></span></a></li>
|
||||
</ul>
|
||||
{/if}
|
||||
|
||||
<div class="eiw">
|
||||
{if isset($errors)}
|
||||
<div class="errors">
|
||||
<i class="eiw-icon icon-cancel"></i>
|
||||
<ul>
|
||||
{foreach from=$errors item=error}
|
||||
<li>{$error}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($infos)}
|
||||
<div class="infos">
|
||||
<i class="eiw-icon icon-ok"></i>
|
||||
<ul>
|
||||
{foreach from=$infos item=info}
|
||||
<li>{$info}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($warnings)}
|
||||
<div class="warnings">
|
||||
<i class="eiw-icon icon-attention"></i>
|
||||
<ul>
|
||||
{foreach from=$warnings item=warning}
|
||||
<li>{$warning}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($messages)}
|
||||
<div class="messages">
|
||||
<i class="eiw-icon icon-info-circled-1"></i>
|
||||
<ul>
|
||||
{foreach from=$messages item=message}
|
||||
<li>{$message}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</div> {* .eiw *}
|
||||
|
||||
{$ADMIN_CONTENT}
|
||||
</div>
|
||||
@@ -0,0 +1,142 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{footer_script}
|
||||
|
||||
const cat_nav = '{$CATEGORIES_NAV|escape:javascript}';
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
|
||||
|
||||
jQuery("input[name=who]").change(function () {
|
||||
checkWhoOptions();
|
||||
});
|
||||
|
||||
checkWhoOptions();
|
||||
|
||||
function checkWhoOptions() {
|
||||
var option = jQuery("input[name=who]:checked").val();
|
||||
jQuery(".who_option").hide();
|
||||
jQuery(".who_" + option).show();
|
||||
}
|
||||
|
||||
jQuery(".who_option select").selectize({
|
||||
plugins: ['remove_button']
|
||||
});
|
||||
|
||||
jQuery("form#categoryNotify").submit(function(e) {
|
||||
var who_selected = false;
|
||||
var who_option = jQuery("input[name=who]:checked").val();
|
||||
|
||||
if (jQuery(".who_" + who_option + " select").length > 0) {
|
||||
if (jQuery(".who_" + who_option + " select option:selected").length > 0) {
|
||||
who_selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!who_selected) {
|
||||
jQuery(".actionButtons .errors").show();
|
||||
e.preventDefault();
|
||||
}
|
||||
else {
|
||||
jQuery(".actionButtons .errors").hide();
|
||||
console.log("form can be submited");
|
||||
}
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{html_style}
|
||||
.who_option {
|
||||
margin-top:5px;
|
||||
}
|
||||
|
||||
span.errors {
|
||||
background-image:none;
|
||||
padding:2px 5px;
|
||||
margin:0;
|
||||
border-radius:5px;
|
||||
}
|
||||
{/html_style}
|
||||
|
||||
<form action="{$F_ACTION}" method="post" id="categoryNotify">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
|
||||
<fieldset id="emailCatInfo">
|
||||
<legend><span class="icon-mail-1 icon-green"></span>{'Send mail to users'|@translate}</legend>
|
||||
|
||||
<p>
|
||||
<strong>{'Recipients'|@translate}</strong>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="who" value="group" checked="checked">
|
||||
{'Group'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="who" value="users">
|
||||
{'Users'|translate}
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<p class="who_option who_group">
|
||||
{if isset($group_mail_options)}
|
||||
<select name="group" placeholder="{'Type in a search term'|translate}" style="width:524px;">
|
||||
{html_options options=$group_mail_options}
|
||||
</select>
|
||||
{elseif isset($no_group_in_gallery) and $no_group_in_gallery}
|
||||
{'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a>
|
||||
{else}
|
||||
{'No group is permitted to see this private album'|@translate}.
|
||||
<a href="{$permission_url}" class="externalLink">{'Permission management'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<p class="who_option who_users">
|
||||
{if isset($user_options)}
|
||||
<select name="users[]" multiple placeholder="{'Type in a search term'|translate}" style="width:524px;">
|
||||
{html_options options=$user_options}
|
||||
</select>
|
||||
{else}
|
||||
{'No user is permitted to see this private album'|@translate}.
|
||||
<a href="{$permission_url}" class="externalLink">{'Permission management'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Complementary mail content'|@translate}</strong>
|
||||
<br>
|
||||
<textarea cols="50" rows="5" name="mail_content" id="mail_content" class="description">{if isset($MAIL_CONTENT)}{$MAIL_CONTENT}{/if}</textarea>
|
||||
</p>
|
||||
|
||||
{if isset($auth_key_duration)}
|
||||
<p>
|
||||
{'Each email sent will contain its own automatic authentication key on links, valid for %s.'|translate:$auth_key_duration}
|
||||
<br>{'For security reason, authentication keys do not work for administrators.'|translate}
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submitEmail"><i class="icon-mail"></i> {'Send'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,652 @@
|
||||
{footer_script}
|
||||
var data = {json_encode($album_data)};
|
||||
var pwg_token = "{$PWG_TOKEN}";
|
||||
var str_show_sub = "{'Show sub-albums'|@translate|escape:javascript}";
|
||||
var str_hide_sub = "{'Hide sub-albums'|@translate|escape:javascript}";
|
||||
var str_manage_sub_album = "{'Manage sub-albums'|@translate|escape:javascript}";
|
||||
var str_apply_order_raw = "{'apply automatic sort order'|translate|escape:javascript}";
|
||||
var str_apply_order = str_apply_order_raw.charAt(0).toUpperCase() + str_apply_order_raw.slice(1);
|
||||
var str_edit = "{'Edit album'|@translate|escape:javascript}";
|
||||
var str_are_you_sure = "{'The status of the album \'%s\' and its sub-albums will change to private. Are you sure?'|@translate|escape:javascript}";
|
||||
var str_yes_change_parent = "{'Yes change parent anyway'|@translate|escape:javascript}";
|
||||
var str_no_change_parent = "{'No, don\'t move this album here'|@translate|escape:javascript}";
|
||||
var str_root = "{'Root'|@translate|escape:javascript}";
|
||||
var openCat = {$open_cat};
|
||||
var nb_albums = {$nb_albums};
|
||||
var light_album_manager = {$light_album_manager};
|
||||
|
||||
var x_nb_subcats = "{'%d sub-albums'|@translate|escape:javascript}";
|
||||
var x_nb_images = "{'%d photos'|@translate|escape:javascript}";
|
||||
var x_nb_sub_photos = "{'%d pictures in sub-albums'|@translate|escape:javascript}";
|
||||
|
||||
var str_albums_found = '{"<b>%d</b> albums found"|translate|escape:javascript}';
|
||||
var str_album_found = '{"<b>1</b> album found"|translate|escape:javascript}';
|
||||
var str_result_limit = '{"<b>%d+</b> albums found, try to refine the search"|translate|escape:javascript}';
|
||||
const str_albs_drag_drop = '{"Drag and drop to reorder albums"|translate|escape:javascript}';
|
||||
|
||||
var delay_autoOpen = {$delay_before_autoOpen}
|
||||
|
||||
const categoriesforSearch = Object.values(data);
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_css path="themes/default/js/plugins/jqtree.css"}
|
||||
{combine_script id='jtree' load='footer' path='themes/default/js/plugins/tree.jquery.js'}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
|
||||
{footer_script}
|
||||
const delete_album_with_name = '{'Delete album "%s".'|@translate|escape:javascript}';
|
||||
const delete_album_with_subs = '{'Delete album "%s" and its %d sub-albums.'|@translate|escape:javascript}'
|
||||
const has_images_associated_outside = '{"delete album and all %d photos, even the %d associated to other albums"|@translate|escape:javascript}';
|
||||
const has_images_becomming_orphans = '{'delete album and the %d orphan photos'|@translate|escape:javascript}';
|
||||
const has_images_recursives = '{'delete only album, not photos'|@translate|escape:javascript}';
|
||||
const rename_item = '{'Rename "%s"'|@translate|escape:javascript}';
|
||||
|
||||
const str_add_album = '{'Add Album'|@translate|escape:javascript}';
|
||||
const str_edit_album = '{'Edit album'|@translate|escape:javascript}';
|
||||
const str_add_photo = '{'Add Photos'|@translate|escape:javascript}';
|
||||
const str_visit_gallery = '{'Visit Gallery'|@translate|escape:javascript}';
|
||||
const str_sort_order = '{'Automatic sort order'|@translate|escape:javascript}';
|
||||
const str_delete_album = '{'Delete album'|@translate|escape:javascript}';
|
||||
const str_root_order = '{'Apply to root albums'|@translate|escape:javascript}';
|
||||
str_sub_album_order = '{'Apply to direct sub-albums'|@translate|escape:javascript}';
|
||||
str_album_name_empty = '{'Album name must not be empty'|@translate|escape:javascript}'
|
||||
|
||||
const add_album_root_title = '{'Create a new album at root'|@translate|escape:javascript}';
|
||||
const add_sub_album_of = '{'Create a sub-album of "%s"'|@translate|escape:javascript}';
|
||||
const tiptip_locked_album = "{'Locked album'|translate|escape:javascript}";
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='jquery.tipTip' load='footer' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
|
||||
{combine_script id='cat_search' load='footer' path='admin/themes/default/js/cat_search.js'}
|
||||
{combine_script id='albums' load='footer' path='admin/themes/default/js/albums.js'}
|
||||
|
||||
<div class="cat-move-order-popin">
|
||||
<div class="order-popin-container">
|
||||
<a class="close-popin icon-cancel" onClick="$('.cat-move-order-popin').fadeOut()"> </a>
|
||||
<div class="popin-title"><span class="icon-sort-name-up icon-purple"></span><span class="popin-title-text">{'apply automatic sort order'|translate}</span></div>
|
||||
<div class="album-name icon-sitemap"></div>
|
||||
<form action="{$F_ACTION}" method="post">
|
||||
<input type="hidden" name="id" value="-1">
|
||||
<div class="choice-container">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="name ASC" name="order" checked>
|
||||
{'Album name, A → Z'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="name DESC" name="order">
|
||||
{'Album name, Z → A'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="natural_order ASC" name="order">
|
||||
{'Album name, 1 → 5 → 10 → 100'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="natural_order DESC" name="order">
|
||||
{'Album name, 100 → 10 → 5 → 1'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="date_creation DESC" name="order">
|
||||
{'Date created, new → old'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="date_creation ASC" name="order">
|
||||
{'Date created, old → new'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="date_available DESC" name="order">
|
||||
{'Date posted, new → old'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"> </span>
|
||||
<input type="radio" value="date_available ASC" name="order">
|
||||
{'Date posted, old → new'|@translate}
|
||||
</label>
|
||||
</div>
|
||||
<input type="submit" name="simpleAutoOrder" value="{'Apply to direct sub-albums'|@translate}"/>
|
||||
<input type="submit" name="recursiveAutoOrder" value="{'Apply to the whole hierarchy'|@translate}"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cat-move-header">
|
||||
<div class="add-album-button">
|
||||
<label class="head-button-2 icon-add-album">
|
||||
<p>{'Add Album'|@translate}</p>
|
||||
</label>
|
||||
</div>
|
||||
<div class="order-root-button">
|
||||
<label class="order-root head-button-2 icon-sort-name-up">
|
||||
<p>{'Automatic sort order'|@translate}</p>
|
||||
</label>
|
||||
</div>
|
||||
{* <div class="cat-move-info icon-help-circled"> {'Drag and drop to reorder albums'|@translate}</div> *}
|
||||
<div class="cat-move-info search-album">
|
||||
<div class="search-album-cont">
|
||||
{* <div class="search-album-label">{'Search albums'|@translate}</div> *}
|
||||
<span class="search-album-num-result"></span>
|
||||
<div class="search-album-input-container" style="position:relative">
|
||||
<span class="icon-search search-icon"></span>
|
||||
<span class="icon-cancel search-cancel"></span>
|
||||
<input id="cat_search_input" class='search-input' type="text" placeholder="{"Search"|@translate}">
|
||||
</div>
|
||||
<span class="search-album-help icon-help-circled" title="{'Enter a term to search for album'|@translate}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="AddAlbum" class="AddAlbumPopIn">
|
||||
<div class="AddAlbumPopInContainer">
|
||||
<a class="icon-cancel CloseAddAlbum"></a>
|
||||
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue icon-add-album"></span>
|
||||
</div>
|
||||
<div class="AddIconTitle">
|
||||
<span></span>
|
||||
</div>
|
||||
|
||||
<div class="AddAlbumInputContainer">
|
||||
<label class="user-property-label AddAlbumLabelUsername">{'Album name'|@translate}
|
||||
<input class="user-property-input" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="AddAlbumInputContainer">
|
||||
<label class="user-property-label AddAlbumLabelUsername">{'Position'|@translate}
|
||||
|
||||
<div class="AddAlbumPositionSelect">
|
||||
<div class="AddAlbumRadioInput">
|
||||
<input type="radio" id="place-start"
|
||||
name="position" value="first" {if "first" == {$POS_PREF}} checked {/if}>
|
||||
<label for="place-start">{'Place first'|translate}</label>
|
||||
</div>
|
||||
<div class="AddAlbumRadioInput">
|
||||
<input type="radio" id="place-end"
|
||||
name="position" value="last" {if "last" == {$POS_PREF}} checked {/if}>
|
||||
<label for="place-end">{'Place last'|translate}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="AddAlbumErrors icon-cancel">
|
||||
</div>
|
||||
|
||||
<div class="AddAlbumFormValidation">
|
||||
<div class="AddAlbumSubmit">
|
||||
<span>{'Add'|@translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="AddAlbumCancel">
|
||||
<span>{'Cancel'|@translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="RenameAlbum" class="RenameAlbumPopIn">
|
||||
<div class="RenameAlbumPopInContainer">
|
||||
<a class="icon-cancel CloseRenameAlbum"></a>
|
||||
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue icon-pencil"></span>
|
||||
</div>
|
||||
<div class="RenameAlbumTitle">
|
||||
<span></span>
|
||||
</div>
|
||||
|
||||
<div class="RenameAlbumInputContainer">
|
||||
<label class="user-property-label RenameAlbumLabelUsername">{'Rename album'|@translate}
|
||||
<input class="user-property-input" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="RenameAlbumErrors icon-cancel">
|
||||
</div>
|
||||
|
||||
<div class="RenameAlbumFormValidation">
|
||||
<div class="RenameAlbumSubmit">
|
||||
<span>{'Yes, rename'|@translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="RenameAlbumCancel">
|
||||
<span>{'Cancel'|@translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="DeleteAlbum" class="DeleteAlbumPopIn">
|
||||
<div class="DeleteAlbumPopInContainer">
|
||||
<div class="DeleteIconTitle">
|
||||
<span>{'Supprimer l\'album : tatatatattata'|translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="DeleteAlbumInputContainer">
|
||||
<ul class="deleteAlbumOptions">
|
||||
<li id="IMAGES_ASSOCIATED_OUTSIDE"><label class=""><input type="radio" name="photo_deletion_mode" value="force_delete"><span class="innerText"></span></label></li>
|
||||
<li id="IMAGES_BECOMING_ORPHAN"><label class=""><input type="radio" name="photo_deletion_mode" value="delete_orphans"><span class="innerText"></span></label></li>
|
||||
<li id="IMAGES_RECURSIVE"><label class=""><input type="radio" name="photo_deletion_mode" value="no_delete" checked="checked">{'delete only album, not photos'|translate}</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="DeleteAlbumErrors icon-cancel">
|
||||
</div>
|
||||
|
||||
<div class="DeleteAlbumFormValidation">
|
||||
<div class="DeleteAlbumSubmit">
|
||||
<span>{'Confirm deletion'|translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="DeleteAlbumCancel">
|
||||
<span>{'Cancel'|translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='tree'> </div>
|
||||
|
||||
<div class="album-search-result-container" style="display: none;">
|
||||
<div class="search-album-result"></div>
|
||||
<div class="search-album-elem limit-album-reached" style="display: none;"></div>
|
||||
|
||||
<div class="search-album-noresult">
|
||||
{'No albums found'|translate}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-album-elem-template" style="display:none">
|
||||
<div class="search-album-elem" style="display:none">
|
||||
<span class='search-album-icon'></span>
|
||||
<p class='search-album-name'></p>
|
||||
<div class="search-album-action-cont">
|
||||
<div class="search-album-action">
|
||||
<a class="icon-pencil search-album-edit">{'Edit album'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
|
||||
.animateFocus {
|
||||
position: relative;
|
||||
border-left: 4px solid #ff7700;
|
||||
}
|
||||
|
||||
.animateFocus .icon-grip-vertical-solid {
|
||||
color: #ff7700;
|
||||
}
|
||||
|
||||
.animateFocus:before {
|
||||
content: '';
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position:absolute;
|
||||
top:50%;
|
||||
left:50%;
|
||||
transform: translate(-50%,-50%);
|
||||
animation: ripples .8s ease-out 0.3s ;
|
||||
opacity: 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.jqtree_element {
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
@keyframes ripples {
|
||||
0% {
|
||||
border: 0px solid #ff7700;
|
||||
opacity: 0.7;
|
||||
}
|
||||
100% {
|
||||
border: 20px solid #ff7700;
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.add-album-button label::before {
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
#AddAlbum, #DeleteAlbum, #RenameAlbum {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.AddAlbumPopIn, .DeleteAlbumPopIn, .RenameAlbumPopIn{
|
||||
position: fixed;
|
||||
z-index: 100;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
background-color: rgba(0,0,0,0.7);
|
||||
}
|
||||
|
||||
.AddAlbumPopInContainer, .DeleteAlbumPopInContainer, .RenameAlbumPopInContainer{
|
||||
display:flex;
|
||||
position:absolute;
|
||||
left:50%;
|
||||
top: 50%;
|
||||
transform:translate(-50%, -48%);
|
||||
text-align:left;
|
||||
padding:20px;
|
||||
flex-direction:column;
|
||||
border-radius:15px;
|
||||
align-items:center;
|
||||
width: 270px;
|
||||
}
|
||||
.DeleteAlbumPopInContainer {
|
||||
width: 40%;
|
||||
border-radius: 4px;
|
||||
border-top: solid 7px #e74c3c;
|
||||
}
|
||||
.RenameAlbumPopInContainer {
|
||||
width: auto;
|
||||
min-width: 270px;
|
||||
max-width: 700px;
|
||||
}
|
||||
|
||||
.AddIconContainer, .DeleteIconContainer, .AddIconContainer {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.AddIcon {
|
||||
border-radius:50%;
|
||||
padding:10px;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.AddIconTitle, .RenameAlbumTitle {
|
||||
font-size:1.4em;
|
||||
font-weight:bold;
|
||||
margin-bottom:20px;
|
||||
margin-top:15px;
|
||||
text-align: center;
|
||||
}
|
||||
.DeleteIconTitle {
|
||||
font-size:1.7em;
|
||||
font-weight:bold;
|
||||
margin-bottom:10px;
|
||||
margin-top:15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.AddAlbumSubmit,
|
||||
.DeleteAlbumSubmit,
|
||||
.RenameAlbumSubmit {
|
||||
cursor:pointer;
|
||||
font-weight:bold;
|
||||
padding: 10px;
|
||||
margin: 20px;
|
||||
font-size:1em;
|
||||
margin-bottom:0;
|
||||
}
|
||||
|
||||
.DeleteAlbumSubmit {
|
||||
border-radius: 4px;
|
||||
transition: .1s;
|
||||
}
|
||||
|
||||
.AddAlbumCancel, .RenameAlbumCancel {
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
font-size:1em;
|
||||
}
|
||||
|
||||
.CloseAddAlbum, .CloseRenameAlbum {
|
||||
position:absolute;
|
||||
right:-40px;
|
||||
top:-40px;
|
||||
font-size:30px;
|
||||
}
|
||||
|
||||
.AddAlbumPositionSelect {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.AddAlbumInputContainer {
|
||||
width: 100%;
|
||||
margin: 15px 0;
|
||||
}
|
||||
.DeleteAlbumInputContainer {
|
||||
width: 70%;
|
||||
margin: 15px auto;
|
||||
}
|
||||
input[name="position"] {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.AddAlbumRadioInput {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.AddAlbumRadioInput label {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.deleteAlbumOptions label {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
.AddAlbumFormValidation,
|
||||
.DeleteAlbumFormValidation,
|
||||
.RenameAlbumFormValidation {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: baseline;
|
||||
}
|
||||
.AddAlbumCancel,
|
||||
.DeleteAlbumCancel,
|
||||
.RenameAlbumCancel {
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
padding: 10px 20px;
|
||||
margin: 20px;
|
||||
margin-bottom: 20px;
|
||||
margin-left: 10px;
|
||||
font-size: 1em;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.DeleteAlbumCancel {
|
||||
background-color: #ecf0f1;
|
||||
color: #000;
|
||||
border-radius: 4px;
|
||||
transition: .1s;
|
||||
}
|
||||
.DeleteAlbumCancel:hover {
|
||||
background: #bdc3c7;
|
||||
}
|
||||
.AddAlbumSubmit,
|
||||
.DeleteAlbumSubmit,
|
||||
.RenameAlbumSubmit {
|
||||
margin-right: 10px;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
.DeleteAlbumSubmit:hover {
|
||||
background: #c0392b;
|
||||
}
|
||||
|
||||
.deleteAlbumOptions {
|
||||
list-style-type: none;
|
||||
}
|
||||
.deleteAlbumOptions input{
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.album-add-button-label, .order-root-button-label {
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
height: 18px;
|
||||
}
|
||||
.album-add-button-label p,
|
||||
.order-root-button-label p {
|
||||
white-space: nowrap;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.badge-container {
|
||||
position: absolute;
|
||||
right: 275px;
|
||||
}
|
||||
|
||||
.badge-container i {
|
||||
padding: 2px 6px 2px 4px!important;
|
||||
border-radius: 10px !important;
|
||||
font-size: 0.85em !important;
|
||||
margin: 0 2px !important;
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.notClickable {
|
||||
pointer-events: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.notClickable:hover {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.move-cat-container, .move-cat-container .badge-container i {
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.jqtree-moving .move-cat-container {
|
||||
background-color: #ffd7ad;
|
||||
}
|
||||
|
||||
.jqtree-moving .move-cat-container .badge-container i,
|
||||
.jqtree-moving .move-cat-container .node-icon {
|
||||
color: #ffd7ad;
|
||||
background-color: #f98100;
|
||||
}
|
||||
|
||||
.dragging .move-cat-container {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.dragging .move-cat-container .move-cat-toogler,
|
||||
.dragging .move-cat-container .move-cat-action-cont a,
|
||||
.dragging .move-cat-container .move-cat-title-container{
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
|
||||
.last-update {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.badge-container:hover .badge-dropdown {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.badge-dropdown {
|
||||
position: absolute;
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
right: 50%;
|
||||
top: 30px;
|
||||
width: max-content;
|
||||
border-radius: 10px;
|
||||
z-index: 10;
|
||||
transform: translateX(48%);
|
||||
box-shadow: 0px 3px 3px 1px rgba(0,0,0,0.2);
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.badge-dropdown:after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
left: 50%;
|
||||
transform: rotate(0);
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.badge-dropdown span {
|
||||
background: transparent;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
margin: 5px 0;
|
||||
}
|
||||
.badge-dropdown span::before {
|
||||
margin: 0 8px 0 0;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 1415px) {
|
||||
.badge-container .last-update {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.badge-container .nb-sub-photos {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1300px) {
|
||||
.badge-container {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1230px) {
|
||||
.badge-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul.jqtree-tree ul.jqtree_common {
|
||||
margin-left: 20px !important;
|
||||
}
|
||||
|
||||
.move-cat-title-container {
|
||||
max-width: 60%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1100px) {
|
||||
.move-cat-title-container {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 850px) {
|
||||
.move-cat-title-container {
|
||||
max-width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,610 @@
|
||||
{include file='include/datepicker.inc.tpl' load_mode='async'}
|
||||
{include file='include/colorbox.inc.tpl' load_mode='footer'}
|
||||
{include file='include/add_album.inc.tpl' load_mode='async'}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{combine_script id='jquery.progressBar' load='async' path='themes/default/js/plugins/jquery.progressbar.min.js'}
|
||||
{combine_script id='jquery.ajaxmanager' load='async' path='themes/default/js/plugins/jquery.ajaxmanager.js'}
|
||||
|
||||
{combine_script id='batchManagerGlobal' load='async' require='jquery,datepicker,jquery.colorbox,addAlbum,doubleSlider' path='admin/themes/default/js/batchManagerGlobal.js'}
|
||||
|
||||
{footer_script}
|
||||
var lang = {
|
||||
Cancel: '{'Cancel'|translate|escape:'javascript'}',
|
||||
deleteProgressMessage: "{'Deletion in progress'|translate|escape:'javascript'}",
|
||||
syncProgressMessage: "{'Synchronization in progress'|translate|escape:'javascript'}",
|
||||
AreYouSure: "{'Are you sure?'|translate|escape:'javascript'}",
|
||||
generateMsg: "{'Generate multiple size images'|@translate}"
|
||||
};
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
|
||||
{* <!-- TAGS --> *}
|
||||
var tagsCache = new TagsCache({
|
||||
serverKey: '{$CACHE_KEYS.tags}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
tagsCache.selectize(jQuery('[data-selectize=tags]'), { lang: {
|
||||
'Add': '{'Create'|translate}'
|
||||
}});
|
||||
|
||||
{* <!-- CATEGORIES --> *}
|
||||
window.categoriesCache = new CategoriesCache({
|
||||
serverKey: '{$CACHE_KEYS.categories}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
var associated_categories = {$associated_categories|@json_encode};
|
||||
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
|
||||
filter: function(categories, options) {
|
||||
if (this.name == 'dissociate') {
|
||||
var filtered = jQuery.grep(categories, function(cat) {
|
||||
return !!associated_categories[cat.id];
|
||||
});
|
||||
|
||||
if (filtered.length > 0) {
|
||||
options.default = filtered[0].id;
|
||||
}
|
||||
|
||||
return filtered;
|
||||
}
|
||||
else {
|
||||
return categories;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var nb_thumbs_page = {$nb_thumbs_page};
|
||||
var nb_thumbs_set = {$nb_thumbs_set};
|
||||
var applyOnDetails_pattern = "{'on the %d selected photos'|@translate}";
|
||||
var all_elements = [{if !empty($all_elements)}{$all_elements|join:","}{/if}];
|
||||
|
||||
var selectedMessage_pattern = "{'%d of %d photos selected'|@translate}";
|
||||
var selectedMessage_none = "{'No photo selected, %d photos in current set'|@translate}";
|
||||
var selectedMessage_all = "{'All %d photos are selected'|@translate}";
|
||||
const str_add_alb_associate = "{"Add Album"|@translate}";
|
||||
const str_select_alb_associate = "{"Select an album"|@translate}";
|
||||
|
||||
$(document).ready(function() {
|
||||
function checkPermitAction() {
|
||||
var nbSelected = 0;
|
||||
if ($("input[name=setSelected]").is(':checked')) {
|
||||
nbSelected = nb_thumbs_set;
|
||||
}
|
||||
else {
|
||||
nbSelected = $(".thumbnails input[type=checkbox]").filter(':checked').length;
|
||||
}
|
||||
|
||||
if (nbSelected == 0) {
|
||||
$("#permitAction").hide();
|
||||
$("#forbidAction").show();
|
||||
}
|
||||
else {
|
||||
$("#permitAction").show();
|
||||
$("#forbidAction").hide();
|
||||
}
|
||||
|
||||
$("#applyOnDetails").text(
|
||||
sprintf(
|
||||
applyOnDetails_pattern,
|
||||
nbSelected
|
||||
)
|
||||
);
|
||||
|
||||
// display the number of currently selected photos in the "Selection" fieldset
|
||||
if (nbSelected == 0) {
|
||||
$("#selectedMessage").text(
|
||||
sprintf(
|
||||
selectedMessage_none,
|
||||
nb_thumbs_set
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (nbSelected == nb_thumbs_set) {
|
||||
$("#selectedMessage").text(
|
||||
sprintf(
|
||||
selectedMessage_all,
|
||||
nb_thumbs_set
|
||||
)
|
||||
);
|
||||
}
|
||||
else {
|
||||
$("#selectedMessage").text(
|
||||
sprintf(
|
||||
selectedMessage_pattern,
|
||||
nbSelected,
|
||||
nb_thumbs_set
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$("[id^=action_]").hide();
|
||||
|
||||
$("select[name=selectAction]").change(function () {
|
||||
$("[id^=action_]").hide();
|
||||
|
||||
var action = $(this).prop("value");
|
||||
{* if (action == 'move') {
|
||||
action = 'associate';
|
||||
} *}
|
||||
|
||||
$("#action_"+action).show();
|
||||
|
||||
if ($(this).val() != -1) {
|
||||
$("#applyActionBlock").show();
|
||||
}
|
||||
else {
|
||||
$("#applyActionBlock").hide();
|
||||
}
|
||||
if ($(this).val() == "delete" || $(this).val() == "delete_derivatives") {
|
||||
$("#confirmDel").css("visibility", "visible");
|
||||
} else {
|
||||
$("#confirmDel").css("visibility", "hidden");
|
||||
}
|
||||
});
|
||||
|
||||
$(".wrap1 label").click(function (event) {
|
||||
$("input[name=setSelected]").prop('checked', false).trigger('change');
|
||||
|
||||
var li = $(this).closest("li");
|
||||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
checkbox.triggerHandler("shclick",event);
|
||||
|
||||
if ($(checkbox).is(':checked')) {
|
||||
$(li).addClass("thumbSelected");
|
||||
}
|
||||
else {
|
||||
$(li).removeClass('thumbSelected');
|
||||
}
|
||||
|
||||
checkPermitAction();
|
||||
});
|
||||
|
||||
$("#selectAll").click(function () {
|
||||
$("input[name=setSelected]").prop('checked', false).trigger('change');
|
||||
selectPageThumbnails();
|
||||
checkPermitAction();
|
||||
return false;
|
||||
});
|
||||
|
||||
function selectPageThumbnails() {
|
||||
$(".thumbnails label").each(function() {
|
||||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
$(checkbox).prop('checked', true).trigger("change");
|
||||
$(this).closest("li").addClass("thumbSelected");
|
||||
});
|
||||
}
|
||||
|
||||
$("#selectNone").click(function () {
|
||||
$("input[name=setSelected]").prop('checked', false).trigger('change');
|
||||
|
||||
$(".thumbnails label").each(function() {
|
||||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
if (jQuery(checkbox).is(':checked')) {
|
||||
$(checkbox).prop('checked', false).trigger("change");
|
||||
}
|
||||
|
||||
$(this).closest("li").removeClass("thumbSelected");
|
||||
});
|
||||
checkPermitAction();
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#selectInvert").click(function () {
|
||||
$("input[name=setSelected]").prop('checked', false).trigger('change');
|
||||
|
||||
$(".thumbnails label").each(function() {
|
||||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
$(checkbox).prop('checked', !$(checkbox).is(':checked')).trigger("change");
|
||||
|
||||
if ($(checkbox).is(':checked')) {
|
||||
$(this).closest("li").addClass("thumbSelected");
|
||||
}
|
||||
else {
|
||||
$(this).closest("li").removeClass('thumbSelected');
|
||||
}
|
||||
});
|
||||
checkPermitAction();
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#selectSet").click(function () {
|
||||
selectPageThumbnails();
|
||||
$("input[name=setSelected]").prop('checked', true).trigger('change');
|
||||
checkPermitAction();
|
||||
return false;
|
||||
});
|
||||
|
||||
$("input[name=setSelected]").change(function() {
|
||||
$('input[name=whole_set]').val(this.checked ? all_elements.join(',') : '');
|
||||
});
|
||||
|
||||
{*
|
||||
if the whole set is selected on page load (after a first action has been applied),
|
||||
trigger a change to make sure input[name=whole_set] is updated
|
||||
*}
|
||||
if ($('input[name="setSelected"]').is(':checked')) {
|
||||
$("input[name=setSelected]").trigger('change');
|
||||
}
|
||||
|
||||
jQuery("input[name=confirm_deletion]").change(function() {
|
||||
jQuery("#confirmDel span.errors").css("visibility", "hidden");
|
||||
});
|
||||
|
||||
jQuery('#applyAction').click(function() {
|
||||
var action = jQuery('[name="selectAction"]').val();
|
||||
if (action == 'delete_derivatives') {
|
||||
let d_count = $('#confirmDel input[type=checkbox]').filter(':checked').length
|
||||
let e_count = $('input[name="setSelected"]').is(':checked') ? nb_thumbs_set : $('.thumbnails input[type=checkbox]').filter(':checked').length;
|
||||
if (!jQuery("#confirmDel input[name=confirm_deletion]").is(':checked')) {
|
||||
jQuery("#confirmDel span.errors").css("visibility", "visible");
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (action != 'generate_derivatives'
|
||||
|| derivatives.finished() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
jQuery('.bulkAction').hide();
|
||||
|
||||
var queuedManager = jQuery.manageAjax.create('queued', {
|
||||
queue: true,
|
||||
cacheResponse: false,
|
||||
maxRequests: 1
|
||||
});
|
||||
|
||||
derivatives.elements = [];
|
||||
if (jQuery('input[name="setSelected"]').is(':checked'))
|
||||
derivatives.elements = all_elements;
|
||||
else
|
||||
jQuery('.thumbnails input[type=checkbox]').each(function() {
|
||||
if (jQuery(this).is(':checked')) {
|
||||
derivatives.elements.push(jQuery(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('#applyActionBlock').hide();
|
||||
jQuery('select[name="selectAction"]').hide();
|
||||
jQuery('.permitActionListButton div').addClass('hidden');
|
||||
jQuery('#regenerationMsg').show();
|
||||
|
||||
progress_start();
|
||||
progress();
|
||||
getDerivativeUrls();
|
||||
return false;
|
||||
});
|
||||
|
||||
checkPermitAction();
|
||||
|
||||
jQuery("select[name=filter_prefilter]").change(function() {
|
||||
jQuery("#empty_caddie").toggle(jQuery(this).val() == "caddie");
|
||||
jQuery("#duplicates_options").toggle(jQuery(this).val() == "duplicates");
|
||||
jQuery("#delete_orphans").toggle(jQuery(this).val() == "no_album");
|
||||
jQuery("#sync_md5sum").toggle(jQuery(this).val() == "no_sync_md5sum");
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
|
||||
<div id="batchManagerGlobal">
|
||||
<form action="{$F_ACTION}" method="post">
|
||||
<input type="hidden" name="start" value="{$START}">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
{include file='include/batch_manager_filter.inc.tpl'
|
||||
title={'Batch Manager Filter'|@translate}
|
||||
searchPlaceholder={'Filters'|@translate}
|
||||
}
|
||||
<fieldset>
|
||||
|
||||
<legend><span class='icon-check icon-blue '></span>{'Selection'|@translate}</legend>
|
||||
|
||||
{if !empty($thumbnails)}
|
||||
<p id="checkActions">
|
||||
{if $nb_thumbs_set > $nb_thumbs_page}
|
||||
<a href="#" id="selectAll">{'The whole page'|@translate}</a>
|
||||
<a href="#" id="selectSet">{'The whole set'|@translate}</a>
|
||||
{else}
|
||||
<a href="#" id="selectAll">{'All'|@translate}</a>
|
||||
{/if}
|
||||
<a href="#" id="selectNone">{'None'|@translate}</a>
|
||||
<a href="#" id="selectInvert">{'Invert'|@translate}</a>
|
||||
|
||||
<span id="selectedMessage"></span>
|
||||
|
||||
<input type="checkbox" name="setSelected" style="display:none" {if count($selection) == $nb_thumbs_set}checked="checked"{/if}>
|
||||
<input type="hidden" name="whole_set" value="">
|
||||
</p>
|
||||
|
||||
<ul class="thumbnails">
|
||||
{html_style}
|
||||
UL.thumbnails SPAN.wrap2{ldelim}
|
||||
width: {$thumb_params->max_width()+2}px;
|
||||
}
|
||||
UL.thumbnails SPAN.wrap2 {ldelim}
|
||||
height: {$thumb_params->max_height()+25}px;
|
||||
}
|
||||
{/html_style}
|
||||
{foreach from=$thumbnails item=thumbnail}
|
||||
{assign var='isSelected' value=$thumbnail.id|@in_array:$selection}
|
||||
<li{if $isSelected} class="thumbSelected"{/if}>
|
||||
<span class="wrap1">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span><input type="checkbox" name="selection[]" value="{$thumbnail.id}" {if $isSelected}checked="checked"{/if}>
|
||||
<span class="wrap2">
|
||||
<div class="actions">
|
||||
<a href="{$thumbnail.U_EDIT}" target="_blank" class="icon-pencil" title="{'Edit photo'|@translate}"></a>
|
||||
<a href="{$thumbnail.FILE_SRC}" class="preview-box icon-zoom-square" title="{'Zoom'|@translate}"></a>
|
||||
</div>
|
||||
{if $thumbnail.level > 0}
|
||||
<em class="levelIndicatorF" title="{'Who can see these photos?'|@translate} : ">{'Level %d'|@sprintf:$thumbnail.level|@translate}</em>
|
||||
{/if}
|
||||
<img src="{$thumbnail.thumb->get_url()}" alt="{$thumbnail.file}" title="{$thumbnail.TITLE|@escape:'html'}" {$thumbnail.thumb->get_size_htm()}>
|
||||
</span>
|
||||
</label>
|
||||
</span>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
{if !empty($navbar) }
|
||||
<div class="batchManager-pagination">
|
||||
<div class="pagination-per-page">
|
||||
<span>{'display'|@translate}</span>
|
||||
<a href="{$U_DISPLAY}&display=20">20</a>
|
||||
<a href="{$U_DISPLAY}&display=50">50</a>
|
||||
<a href="{$U_DISPLAY}&display=100">100</a>
|
||||
<a href="{$U_DISPLAY}&display=all">{'all'|@translate}</a>
|
||||
</div>
|
||||
|
||||
{include file='navigation_bar.tpl'|@get_extent:'navbar'}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{else}
|
||||
<div class="selectionEmptyBlock">{'No photo in the current set.'|@translate}</div>
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="action">
|
||||
|
||||
<legend><span class='icon-cog icon-red'></span>{'Action'|@translate}</legend>
|
||||
<div id="forbidAction"{if count($selection) != 0} style="display:none"{/if}>{'No photos selected, no actions possible.'|@translate}</div>
|
||||
<div id="permitAction"{if count($selection) == 0} style="display:none"{/if}>
|
||||
|
||||
<div class="permitActionListButton">
|
||||
<div>
|
||||
<select name="selectAction">
|
||||
<option value="-1">{'Choose an action'|@translate}</option>
|
||||
<option disabled="disabled">------------------</option>
|
||||
<option value="delete" class="icon-trash">{'Delete selected photos'|@translate}</option>
|
||||
<option value="associate">{'Associate to album'|@translate}</option>
|
||||
<option value="move">{'Move to album'|@translate}</option>
|
||||
{if !empty($associated_categories)}
|
||||
<option value="dissociate">{'Dissociate from album'|@translate}</option>
|
||||
{/if}
|
||||
<option value="add_tags">{'Add tags'|@translate}</option>
|
||||
{if !empty($associated_tags)}
|
||||
<option value="del_tags">{'remove tags'|@translate}</option>
|
||||
{/if}
|
||||
<option value="author">{'Set author'|@translate}</option>
|
||||
<option value="title">{'Set title'|@translate}</option>
|
||||
<option value="date_creation">{'Set creation date'|@translate}</option>
|
||||
<option value="level" class="icon-lock">{'Who can see these photos?'|@translate} ({'Privacy level'|translate})</option>
|
||||
<option value="metadata">{'Synchronize metadata'|@translate}</option>
|
||||
{if ($IN_CADDIE)}
|
||||
<option value="remove_from_caddie">{'Remove from caddie'|@translate}</option>
|
||||
{else}
|
||||
<option value="add_to_caddie">{'Add to caddie'|@translate}</option>
|
||||
{/if}
|
||||
<option value="delete_derivatives">{'Delete multiple size images'|@translate}</option>
|
||||
<option value="generate_derivatives">{'Generate multiple size images'|@translate}</option>
|
||||
{if !empty($element_set_global_plugins_actions)}
|
||||
{foreach from=$element_set_global_plugins_actions item=action}
|
||||
<option value="{$action.ID}">{$action.NAME}</option>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</select>
|
||||
</div>
|
||||
<p id="confirmDel" style="visibility:hidden">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="confirm_deletion" value="1"> {'Are you sure?'|@translate}</input>
|
||||
</label><br/><br/>
|
||||
<span class="errors" style="visibility:hidden;margin:0;">{"You need to confirm deletion"|translate}</span>
|
||||
</p>
|
||||
<p id="applyActionBlock" style="display:none;margin:1em 0 0 0;" class="actionButtons">
|
||||
<button id="applyAction" name="submit" type="submit" class="buttonLike">
|
||||
<i class="icon-cog-alt"></i> {'Apply action'|translate}
|
||||
</button>
|
||||
|
||||
<span id="applyOnDetails"></span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="permitActionItem">
|
||||
<!-- delete -->
|
||||
<div id="action_delete" class="bulkAction">
|
||||
</div>
|
||||
|
||||
<!-- associate -->
|
||||
<div id="action_associate" class="bulkAction">
|
||||
<div class="head-button-2 icon-plus-circled" id="associate_as">
|
||||
<p>{"Select an album"|translate}</p>
|
||||
</div>
|
||||
<div class="selected-associate-action">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- move -->
|
||||
<div id="action_move" class="bulkAction">
|
||||
<select data-selectize="categories" data-default="" name="move" style="width:600px" placeholder="{'Select an album... or type it!'|@translate}"></select>
|
||||
<a href="#" data-add-album="move" title="{'create a new album'|@translate}" class="icon-plus"></a>
|
||||
</div>
|
||||
|
||||
<!-- dissociate -->
|
||||
<div id="action_dissociate" class="bulkAction">
|
||||
<select data-selectize="categories" placeholder="{'Type in a search term'|translate}"
|
||||
name="dissociate" style="width:600px"></select>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- add_tags -->
|
||||
<div id="action_add_tags" class="bulkAction">
|
||||
<select data-selectize="tags" data-create="true" placeholder="{'Type in a search term'|translate}"
|
||||
name="add_tags[]" multiple style="width:400px;"></select>
|
||||
</div>
|
||||
|
||||
<!-- del_tags -->
|
||||
<div id="action_del_tags" class="bulkAction">
|
||||
{if !empty($associated_tags)}
|
||||
<select data-selectize="tags" name="del_tags[]" multiple style="width:400px;"
|
||||
placeholder="{'Type in a search term'|translate}">
|
||||
{foreach from=$associated_tags item=tag}
|
||||
<option value="{$tag.id}">{$tag.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- author -->
|
||||
<div id="action_author" class="bulkAction">
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="remove_author"> {'remove author'|@translate}</label>
|
||||
<input type="text" class="large" name="author" placeholder="{'Type here the author name'|@translate}">
|
||||
</div>
|
||||
|
||||
<!-- title -->
|
||||
<div id="action_title" class="bulkAction">
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="remove_title"> {'remove title'|@translate}</label>
|
||||
<input type="text" class="large" name="title" placeholder="{'Type here the title'|@translate}">
|
||||
</div>
|
||||
|
||||
<!-- date_creation -->
|
||||
<div id="action_date_creation" class="bulkAction">
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="remove_date_creation"> {'remove creation date'|@translate}</label><br>
|
||||
<div id="set_date_creation">
|
||||
<input type="hidden" name="date_creation" value="{$DATE_CREATION}">
|
||||
<label>
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="date_creation" readonly>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- level -->
|
||||
<div id="action_level" class="bulkAction">
|
||||
<select name="level" size="1">
|
||||
{html_options options=$level_options selected=$level_options_selected}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- metadata -->
|
||||
<div id="action_metadata" class="bulkAction">
|
||||
</div>
|
||||
|
||||
<!-- generate derivatives -->
|
||||
<div id="action_generate_derivatives" class="bulkAction">
|
||||
<div class="deleteDerivButtons">
|
||||
<a href="javascript:selectGenerateDerivAll()">{'All'|@translate}</a>
|
||||
<a href="javascript:selectGenerateDerivNone()">{'None'|@translate}</a>
|
||||
</div>
|
||||
<br>
|
||||
{foreach from=$generate_derivatives_types key=type item=disp}
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="generate_derivatives_type[]" value="{$type}"> {$disp}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<!-- delete derivatives -->
|
||||
<div id="action_delete_derivatives" class="bulkAction">
|
||||
<div class="deleteDerivButtons">
|
||||
<a href="javascript:selectDelDerivAll()">{'All'|@translate}</a>
|
||||
<a href="javascript:selectDelDerivNone()">{'None'|@translate}</a>
|
||||
</div>
|
||||
<br>
|
||||
{foreach from=$del_derivatives_types key=type item=disp}
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="del_derivatives_type[]" value="{$type}"> {$disp}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<!-- plugins -->
|
||||
{if !empty($element_set_global_plugins_actions)}
|
||||
{foreach from=$element_set_global_plugins_actions item=action}
|
||||
<div id="action_{$action.ID}" class="bulkAction">
|
||||
{if !empty($action.CONTENT)}{$action.CONTENT}{/if}
|
||||
</div>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</div>
|
||||
</div> <!-- #permitAction -->
|
||||
<div id="regenerationMsg" class="bulkAction" style="display:none;margin-left:0;">
|
||||
<div id="regenerationStatus" style="margin-bottom:10px;">
|
||||
<span id="regenerationText">{'Generate multiple size images'|@translate}</span>
|
||||
<span class="badge-number" style="font-size:12.8px"></span>
|
||||
</div>
|
||||
<input type="hidden" name="regenerateSuccess" value="0">
|
||||
<input type="hidden" name="regenerateError" value="0">
|
||||
</div>
|
||||
<!-- progress bar -->
|
||||
<div id="uploadingActions" style="display:none">
|
||||
<div class="big-progressbar" style="max-width:100%;margin-bottom: 10px;">
|
||||
<div class="progressbar" style="width:0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
|
||||
</div> <!-- #batchManagerGlobal -->
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
|
||||
<style>
|
||||
#action_move .selectize-input {
|
||||
min-width: 500px;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
#action_add_tags .item,
|
||||
#action_add_tags .item.active {
|
||||
background-image:none;
|
||||
background-color: #ffa646;
|
||||
border-color: transparent;
|
||||
color: black;
|
||||
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
#action_add_tags .item .remove,
|
||||
#action_add_tags .item .remove {
|
||||
background-color: transparent;
|
||||
border-top-right-radius: 20px;
|
||||
border-bottom-right-radius: 20px;
|
||||
color: black;
|
||||
|
||||
border-left: 1px solid transparent;
|
||||
|
||||
}
|
||||
#action_add_tags .item .remove:hover,
|
||||
#action_add_tags .item .remove:hover {
|
||||
background-color: #ff7700;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,375 @@
|
||||
{include file='include/autosize.inc.tpl'}
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_script id='jquery.sort' load='footer' path='themes/default/js/plugins/jquery.sort.js'}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10}
|
||||
{assign var='all_selected_album' value=[]}
|
||||
{footer_script}
|
||||
{* <!-- PLUGINS --> *}
|
||||
var activePlugins = {$ACTIVE_PLUGINS|json_encode};
|
||||
{if isset($CACHE_KEYS)}
|
||||
{* <!-- TAGS --> *}
|
||||
var tagsCache = new TagsCache({
|
||||
serverKey: '{$CACHE_KEYS.tags}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
tagsCache.selectize(jQuery('[data-selectize=tags]'), { lang: {
|
||||
'Add': '{'Create'|translate}'
|
||||
}});
|
||||
|
||||
{* <!-- CATEGORIES --> *}
|
||||
window.categoriesCache = new CategoriesCache({
|
||||
serverKey: '{$CACHE_KEYS.categories}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
var associated_categories = {$associated_categories|@json_encode};
|
||||
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
|
||||
filter: function(categories, options) {
|
||||
if (this.name == 'dissociate') {
|
||||
var filtered = jQuery.grep(categories, function(cat) {
|
||||
return !!associated_categories[cat.id];
|
||||
});
|
||||
|
||||
if (filtered.length > 0) {
|
||||
options.default = filtered[0].id;
|
||||
}
|
||||
|
||||
return filtered;
|
||||
}
|
||||
else {
|
||||
return categories;
|
||||
}
|
||||
}
|
||||
});
|
||||
{/if}
|
||||
|
||||
|
||||
{* <!-- DATEPICKER --> *}
|
||||
jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
||||
jQuery('[data-datepicker]').pwgDatepicker({
|
||||
showTimepicker: true,
|
||||
cancelButton: '{'Cancel'|translate}'
|
||||
});
|
||||
});
|
||||
|
||||
{* <!-- THUMBNAILS --> *}
|
||||
jQuery("a.preview-box").colorbox( {
|
||||
photo: true
|
||||
});
|
||||
|
||||
str_are_you_sure = "{'Are you sure?'|translate|escape:javascript}";
|
||||
str_yes = "{'Yes, delete'|translate|escape:javascript}";
|
||||
str_no = "{'No, I have changed my mind'|translate|@escape:'javascript'}";
|
||||
str_orphan = "{'This photo is an orphan'|@translate|escape:javascript}";
|
||||
str_meta_warning = "{'Warning ! Unsaved changes will be lost'|translate|escape:javascript}";
|
||||
str_meta_yes = "{'I want to continue'|translate|escape:javascript}";
|
||||
const str_title_ab = "{'Associate to album'|@translate}";
|
||||
|
||||
let b_current_picture_id;
|
||||
{* Check Skeleton extension for more details about extensibility *}
|
||||
pluginValues = [];
|
||||
{/footer_script}
|
||||
|
||||
|
||||
{combine_script id='batchManagerUnit' load='footer' require='jquery.ui.effect-blind,jquery.sort' path='admin/themes/default/js/batchManagerUnit.js'}
|
||||
<div id="batchManagerGlobal" style="margin-bottom: 80px;">
|
||||
<div style="clear:both"></div>
|
||||
{if isset($ELEMENT_IDS)}
|
||||
<div>
|
||||
<input type="hidden" name="element_ids" value="{$ELEMENT_IDS}">
|
||||
</div>
|
||||
{/if}
|
||||
{*Filters*}
|
||||
<form method="post" action="{$F_ACTION}">
|
||||
{include file='include/batch_manager_filter.inc.tpl' title={'Batch Manager Filter'|@translate} searchPlaceholder={'Filters'|@translate}}
|
||||
</form>
|
||||
<legend style="padding: 1em;">
|
||||
<span class='icon-menu icon-blue'></span>
|
||||
{'List'|@translate}
|
||||
<span class="count-badge"> {count($all_elements)}</span>
|
||||
</legend>
|
||||
{if !empty($elements) }
|
||||
<div style="margin: 10px 0; display: flex; justify-content: space-between; padding: 1em; height: 33px;">
|
||||
<div style="margin-right: 21px;" class="pagination-per-page">
|
||||
<span style="font-weight: bold;color: unset;">{'photos per page'|@translate} :</span>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=5" class="{if $per_page == 5}selected-pagination{/if}">5</a>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=10" class="{if $per_page == 10}selected-pagination{/if}">10</a>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=50" class="{if $per_page == 50}selected-pagination{/if}">50</a>
|
||||
</div>
|
||||
|
||||
<div style="margin-left: 22px;">
|
||||
<div class="pagination-reload">
|
||||
{if !empty($navbar) }
|
||||
<a class="button-reload tiptip" title="{'Pagination has changed and needs to be reloaded !'|@translate}" style="display: none;" href="{$F_ACTION}"><i class="icon-cw"></i></a>
|
||||
{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{foreach from=$elements item=element}
|
||||
{$all_selected_album[$element.ID] = json_decode($element.related_category_ids)}
|
||||
{footer_script}
|
||||
url_delete_{$element.id} = '{$element.U_DELETE}';
|
||||
{/footer_script}
|
||||
<div class="infos deleted-badge" data-image_id="{$element.ID}" style="display: none;">
|
||||
<i class="icon-ok" style="font-size: 20px;"></i>
|
||||
<p>
|
||||
{'Image'|@translate}
|
||||
<p style="font-weight: bold;">
|
||||
#{$element.ID} '{$element.FILE}'
|
||||
</p>
|
||||
{'was succesfully deleted'|@translate}
|
||||
</p>
|
||||
</div>
|
||||
<fieldset class="elementEdit" id="picture-{$element.ID}" data-image_id="{$element.ID}">
|
||||
<div class="metasync-success badge-container" style="display: none;">
|
||||
<div class="badge-succes">
|
||||
<i class="icon-ok"></i>
|
||||
{'Metadata sync complete'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="pictureIdLabel">
|
||||
#{$element.ID}
|
||||
</div>
|
||||
<div class="media-box">
|
||||
<img src="{$element.TN_SRC}" alt="imagename" class="media-box-embed" style="{if $element.FORMAT}width:100%; max-height:100%;{else}max-width:100%; height:100%;{/if}">
|
||||
<div class="media-hover">
|
||||
<div class='picture-preview-actions'>
|
||||
<a class="preview-box icon-zoom-square tiptip" href="{$element.FILE_SRC}" title="{'Zoom'|@translate}"></a>
|
||||
<a class="icon-download tiptip" href="{$element.U_DOWNLOAD}" title="{'Download'|@translate}"></a>
|
||||
<a class="icon-signal tiptip" href="{$element.U_HISTORY}" title="{'Visit history'|@translate}"></a>
|
||||
<a class="icon-pulse tiptip" href="{$element.U_ACTIVITY}" title="{'Activity'|@translate}"></a>
|
||||
<a target="_blank" class="icon-pencil tiptip" href="{$element.U_EDIT}" title="{'Edit photo'|@translate}"></a>
|
||||
{if !url_is_remote($element.PATH)}
|
||||
<a class="icon-arrows-cw tiptip action-sync-metadata" title="{'Synchronize metadata'|@translate}"></a>
|
||||
<a class="icon-trash tiptip action-delete-picture" title="{'delete photo'|@translate}"></a>
|
||||
{/if}
|
||||
</div>
|
||||
{if isset($element.U_JUMPTO)}
|
||||
<a class="see-out" href="{$element.U_JUMPTO}" >
|
||||
<p>
|
||||
<i class="icon-left-open"></i>
|
||||
{'Open in gallery'|@translate}
|
||||
</p>
|
||||
{else}
|
||||
<a class="see-out disabled" href="#" >
|
||||
<p class="" title="{'You don\'t have access to this photo'|translate}" >
|
||||
<i class="icon-left-open"></i>
|
||||
{'Open in gallery'|translate}
|
||||
</p>
|
||||
{/if}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-info-container">
|
||||
<div class="main-info-block">
|
||||
<div class='info-framed-icon' style="margin-right:0px;">
|
||||
<i class='icon-picture'></i>
|
||||
</div>
|
||||
<span class="main-info-title" id="filename">{$element.FILE}</span>
|
||||
<span class="main-info-desc" id="dimensions">{$element.DIMENSIONS}</span>
|
||||
<span class="main-info-desc" id="filesize">{$element.FILESIZE}</span>
|
||||
<span class="main-info-desc">{$element.EXT}</span>
|
||||
</div>
|
||||
<div class="main-info-block">
|
||||
<div class='info-framed-icon' style="margin-right:0px;">
|
||||
<span class='icon-calendar'></span>
|
||||
</div>
|
||||
<span class="main-info-title first-letter-capitalize">{$element.POST_DATE}</span>
|
||||
<span class="main-info-desc">{$element.AGE}</span>
|
||||
<span class="main-info-desc">{$element.ADDED_BY}</span>
|
||||
<span class="main-info-desc">{$element.STATS}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-container">
|
||||
<div class="half-line-info-box">
|
||||
<strong>{'Title'|@translate}</strong>
|
||||
<input type="text" name="name" id="name" value="{$element.NAME}">
|
||||
</div>
|
||||
<div class="calendar-box">
|
||||
<strong>{'Creation date'|@translate}</strong>
|
||||
<input type="hidden" id="date_creation" name="date_creation-{$element.id}" value="{$element.DATE_CREATION}">
|
||||
<label class="calendar-input">
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="date_creation-{$element.id}" data-datepicker-unset="date_creation_unset-{$element.id}" readonly>
|
||||
<a href="#" class="icon-cancel-circled unset datepickerDelete" id="date_creation_unset-{$element.id}"></a>
|
||||
</label>
|
||||
</div>
|
||||
<div class="half-line-info-box">
|
||||
<strong>{'Author'|@translate}</strong>
|
||||
<input type="text" name="author" id="author" value="{$element.AUTHOR}">
|
||||
</div>
|
||||
<div class="half-line-info-box">
|
||||
<div class="privacy-label-container">
|
||||
<strong>{'Who can see ?'|@translate}</strong>
|
||||
<i>{'level of confidentiality'|@translate}</i>
|
||||
</div>
|
||||
<select name="level" id="level" size="1">
|
||||
{html_options options=$level_options selected=$element.level_options_selected}
|
||||
</select>
|
||||
</div>
|
||||
<div class="full-line-tag-box" id="action_add_tags">
|
||||
<strong>{'Tags'|@translate}</strong>
|
||||
<select id="tags" data-selectize="tags" data-value="{$element.TAGS|@json_encode|escape:html}"placeholder="{'Type in a search term'|translate}"data-create="true" name="tags" id="tags-{$element.id}[]" multiple></select>
|
||||
</div>
|
||||
<div class="full-line-box" id="{$element.ID}">
|
||||
<strong>{'Linked albums'|@translate} <span class="linked-albums-badge {if $element.related_categories|@count < 1 } badge-red {/if}"> {$element.related_categories|@count} </span></strong>
|
||||
{if $element.related_categories|@count
|
||||
< 1}
|
||||
<span class="orphan-photo">{'This photo is an orphan'|@translate}</span>
|
||||
{else}
|
||||
<span class="orphan-photo"></span>
|
||||
{/if}
|
||||
<div class="related-categories-container">
|
||||
{foreach from=$element.related_categories item=cat_path key=key}
|
||||
<div class="breadcrumb-item">
|
||||
<span class="link-path">{$cat_path['name']}</span>
|
||||
{if $cat_path['unlinkable']}
|
||||
<span id={$key} class="icon-cancel-circled remove-item"></span>
|
||||
{else}
|
||||
<span id={$key} class="icon-help-circled help-item tiptip" title="{'This picture is physically linked to this album, you can\'t dissociate them'|translate}"></span>
|
||||
{/if}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="breadcrumb-item linked-albums add-item {if $element.related_categories|@count < 1 } highlight {/if}">
|
||||
<span class="icon-plus-circled"></span>
|
||||
{'Add'|translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="full-line-description-box">
|
||||
<strong>{'Description'|@translate}</strong>
|
||||
<textarea cols="50" rows="4" name="description" class="description-box" id="description">{$element.DESCRIPTION}</textarea>
|
||||
</div>
|
||||
{if isset($PLUGINS_BATCH_MANAGER_UNIT_ELEMENT_SUBTEMPLATE)}
|
||||
{foreach from=$PLUGINS_BATCH_MANAGER_UNIT_ELEMENT_SUBTEMPLATE item=PATH}
|
||||
{include file=$PATH}
|
||||
{/foreach}
|
||||
{/if}
|
||||
{* Plugins anchor 1 *}
|
||||
<div class="validation-container">
|
||||
<div class="save-button-container">
|
||||
<div class="buttonLike action-save-picture buttonSubmitLocal">
|
||||
<i class="icon-floppy"></i>
|
||||
{'Save'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="local-unsaved-badge badge-container" style="display: none;">
|
||||
<div class="badge-unsaved">
|
||||
<i class="icon-attention"></i>
|
||||
{'You have unsaved changes'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="local-success-badge badge-container" style="display: none;">
|
||||
<div class="badge-succes">
|
||||
<i class="icon-ok"></i>
|
||||
{'Changes saved'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="local-error-badge badge-container" style="display: none;">
|
||||
<div class="badge-error">
|
||||
<i class="icon-cancel"></i>
|
||||
{'An error has occured'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
{/foreach}
|
||||
<div style="margin: 10px 0; display: flex; justify-content: space-between; padding: 1em; height: 33px;">
|
||||
<div style="margin-right: 21px;" class="pagination-per-page">
|
||||
<span style="font-weight: bold;color: unset;">{'photos per page'|@translate} :</span>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=5" class="{if $per_page == 5}selected-pagination{/if}">5</a>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=10" class="{if $per_page == 10}selected-pagination{/if}">10</a>
|
||||
<a href="{$U_ELEMENTS_PAGE}&display=50" class="{if $per_page == 50}selected-pagination{/if}">50</a>
|
||||
</div>
|
||||
|
||||
<div style="margin-left: 22px;">
|
||||
<div class="pagination-reload">
|
||||
{if !empty($navbar) }
|
||||
<a class="button-reload tiptip" title="{'Pagination has changed and needs to be reloaded !'|@translate}" style="display: none;" href="{$F_ACTION}"><i class="icon-cw"></i></a>
|
||||
{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="bottom-save-bar">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
<div class="badge-container global-unsaved-badge" style="display: none;">
|
||||
<div class="badge-unsaved">
|
||||
<i class="icon-attention"></i>
|
||||
<span id="unsaved-count"></span>
|
||||
{'image(s) contains unsaved changes'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-container global-succes-badge" style="display: none;">
|
||||
<div class="badge-succes">
|
||||
<i class="icon-ok"></i>
|
||||
{'Changes saved'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-container global-error-badge" style="display: none;">
|
||||
<div class="badge-error">
|
||||
<i class="icon-cancel"></i>
|
||||
{'An error has occured'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
<div class="buttonLike action-save-global">
|
||||
<i class="icon-floppy"></i>
|
||||
{'Save all photos'|translate}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
|
||||
{footer_script}
|
||||
var pluginFunctionNames = pluginFunctionMapInit(activePlugins);
|
||||
const all_related_categories_ids = {$all_selected_album|json_encode};
|
||||
{/footer_script}
|
||||
|
||||
<style>
|
||||
#action_add_tags .item,
|
||||
#action_add_tags .item.active {
|
||||
background-image:none;
|
||||
background-color: #ffa646;
|
||||
border-color: transparent;
|
||||
color: black;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
#action_add_tags .item .remove,
|
||||
#action_add_tags .item .remove {
|
||||
background-color: transparent;
|
||||
border-top-right-radius: 20px;
|
||||
border-bottom-right-radius: 20px;
|
||||
color: black;
|
||||
border-left: 1px solid transparent;
|
||||
|
||||
}
|
||||
#action_add_tags .item .remove:hover,
|
||||
#action_add_tags .item .remove:hover {
|
||||
background-color: #ff7700;
|
||||
}
|
||||
|
||||
/* .selectize-input.items.not-full.has-options,
|
||||
.selectize-input.items.not-full.has-options.focus.input-active.dropdown-active,
|
||||
.selectize-input.items.not-full,
|
||||
.selectize-input.items.full{
|
||||
border: 1px solid #D3D3D3 !important;
|
||||
} */
|
||||
|
||||
.breadcrumb-item{
|
||||
margin: 5px 0 5px 0 !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,229 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{combine_script id='alternativeView' load='footer' path='admin/themes/default/js/cat_list.js'}
|
||||
{combine_script id='jquery.cookie' path='themes/default/js/jquery.cookie.js' load='footer'}
|
||||
|
||||
{footer_script require='jquery.ui.sortable'}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
$(".addAlbumHead").click(function () {
|
||||
$(".addAlbum input[name=virtual_name]").focus();
|
||||
})
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
<div class="selectedAlbum cat-list-album-path">
|
||||
<span class="icon-sitemap selectedAlbum-first">{$CATEGORIES_NAV}</span>
|
||||
<div class="AlbumViewSelector">
|
||||
<input type="radio" name="layout" class="switchLayout" id="displayCompact" {if $smarty.cookies.pwg_album_manager_view == 'compact'}checked{/if}/><label for="displayCompact"><span class="icon-th-large firstIcon tiptip" title="{'Compact View'|translate}"></span></label><input type="radio" name="layout" class="switchLayout tiptip" id="displayLine" {if $smarty.cookies.pwg_album_manager_view == 'line'}checked{/if}/><label for="displayLine"><span class="icon-th-list tiptip" title="{'Line View'|translate}"></span></label><input type="radio" name="layout" class="switchLayout" id="displayTile" {if $smarty.cookies.pwg_album_manager_view == 'tile' || !$smarty.cookies.pwg_album_manager_view}checked{/if}/><label for="displayTile"><span class="icon-pause lastIcon tiptip" title="{'Tile View'|translate}"></span></label>
|
||||
</div>
|
||||
</div>
|
||||
{assign var='color_tab' value=["icon-red", "icon-blue", "icon-yellow", "icon-purple", "icon-green"]}
|
||||
<div class="categoryContainer">
|
||||
<div class="addAlbum">
|
||||
<div class="addAlbumHead">
|
||||
<span class="icon-plus-circled icon-blue icon-blue-full"></span>
|
||||
<p>{"Add Album"|@translate}
|
||||
</div>
|
||||
<form action="{$F_ACTION}" method="post">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
<label for="virtual_name">{"Album name"|@translate}</label>
|
||||
<input type="text" name="virtual_name" placeholder="{"Album name"|@translate}">
|
||||
<button name="submitAdd" type="submit" class="buttonLike">
|
||||
<i class="icon-plus"></i> {"Create"|@translate}
|
||||
</button>
|
||||
<a class="cancelAddAlbum">{"Cancel"|@translate}</a>
|
||||
</form>
|
||||
</div>
|
||||
{if count($categories)}
|
||||
{foreach from=$categories item=category}
|
||||
<div class="categoryBox{if $category.IS_VIRTUAL} virtual_cat{/if}" id="cat_{$category.ID}">
|
||||
|
||||
<div class="albumTop">
|
||||
<div class="albumIcon">
|
||||
<span class="
|
||||
{if $category.NB_SUB_ALBUMS == 0}icon-folder-open{else}icon-sitemap{/if}
|
||||
{$color_tab[$category.ID % 5]}
|
||||
"> </span>
|
||||
</div>
|
||||
|
||||
<div class="albumTitle">
|
||||
{$category.NAME}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="albumInfos"><p>{$category.NB_PHOTOS|translate_dec:'%d photo':'%d photos'}</p> <p>{$category.NB_SUB_PHOTOS|translate_dec:'%d photo':'%d photos'} {$category.NB_SUB_ALBUMS|translate_dec:'in %d sub-album':'in %d sub-albums'}</p></span>
|
||||
|
||||
<div class="albumActions">
|
||||
<a href="{$category.U_EDIT}" class="actionEdit" {*title="{'Edit'|@translate}"*}><span class="icon-pencil tiptip" title="{'Edit'|@translate}"></span><span class="iconLegend">{'Edit'|@translate}</span></a>
|
||||
<a href="{$category.U_CHILDREN}" class="actionTitle" {*title="{'sub-albums'|@translate}"*}><span class="icon-sitemap tiptip" title="{'sub-albums'|@translate}"></span><span class="iconLegend">{'sub-albums'|@translate}</span></a>
|
||||
<a href="{$category.U_MOVE}" class="actionMove"><span class="icon-move tiptip" title="{'Move'|@translate}"></span><span class="iconLegend">{'Move'|@translate}</span></a>
|
||||
{if $CAT_ADMIN_ACCESS}
|
||||
<a href="{$category.U_JUMPTO}" class="actionGalery" {*title="{'Visit Gallery'|@translate}"*}><span class="icon-eye tiptip" title="{'Visit Gallery'|@translate}"></span><span class="iconLegend">{'Visit Gallery'|@translate}</span></a>
|
||||
{else}
|
||||
<span href="{$category.U_JUMPTO}" class="actionGalery" {*title="{'This album is private'|@translate}"*}><span class="icon-eye tiptip" title="{'This album is private'|@translate}"></span><span class="iconLegend">{'Visit Gallery'|@translate}</span></span>
|
||||
{/if}
|
||||
<a href="{$category.U_ADD_PHOTOS_ALBUM}" class="actionAdd" {*title="{'Add Photos'|@translate}"*}><span class="icon-plus tiptip" title="{'Add Photos'|@translate}"></span><span class="iconLegend">{'Add Photos'|@translate}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
|
||||
/*
|
||||
* Switch btn between views
|
||||
*/
|
||||
|
||||
#tabsheet , .selectedAlbum{
|
||||
margin: 0 0 10px 0 !important;
|
||||
}
|
||||
|
||||
.selectedAlbum {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
||||
padding: 0 34px 0 22px;
|
||||
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.selectedAlbum-first {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.AlbumViewSelector {
|
||||
padding: 7px 0px;
|
||||
margin-right: 0px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.AlbumViewSelector span {
|
||||
border-radius: 0;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
.addAlbum button {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Should be done with :first-child and :last-child but doesn't work */
|
||||
|
||||
.AlbumViewSelector label span.firstIcon{
|
||||
border-radius: 7px 0 0 7px;
|
||||
}
|
||||
|
||||
.AlbumViewSelector label span.lastIcon{
|
||||
border-radius: 0 7px 7px 0;
|
||||
}
|
||||
|
||||
.icon-th-large, .icon-th-list, .icon-pause {
|
||||
padding: 10px;
|
||||
font-size: 19px;
|
||||
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.switchLayout {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.albumActions a span.iconLegend {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.categoryContainer {
|
||||
padding: 0 20px 0 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tiles display
|
||||
*/
|
||||
|
||||
.tile_add.addAlbum form input::placeholder {
|
||||
color: transparent !important;
|
||||
}
|
||||
|
||||
.albumTop {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
padding: 0px 20px;
|
||||
height: 75px;
|
||||
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.categoryBox, .addAlbum{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.albumIcon span{
|
||||
font-size: 19px;
|
||||
width: 27px;
|
||||
padding: 10px;
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
.albumInfos {
|
||||
color: #a9a9a9;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.albumInfos p {
|
||||
margin: 0 20px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.albumActions {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
||||
margin-top: auto;
|
||||
|
||||
width: 100%;
|
||||
margin-bottom: auto;
|
||||
}
|
||||
|
||||
.albumActions a:first-child{
|
||||
margin-left: 35px;
|
||||
}
|
||||
|
||||
.albumActions a:last-child {
|
||||
margin-right: 35px;
|
||||
}
|
||||
|
||||
.addAlbum form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.addAlbum form input {
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
|
||||
margin: 0px 10px;
|
||||
|
||||
max-width: 200px;
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.addAlbum form button {
|
||||
margin-bottom: 0;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.addAlbumHead {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,282 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='cat_modify' load='footer' path='admin/themes/default/js/cat_modify.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{combine_script id='jquery.tipTip' load='footer' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
|
||||
{footer_script}
|
||||
const has_images_associated_outside = '{"delete album and all %d photos, even the %d associated to other albums"|@translate|escape:javascript}';
|
||||
const has_images_becomming_orphans = '{'delete album and the %d orphan photos'|@translate|escape:javascript}';
|
||||
const has_images_recursives = '{'delete only album, not photos'|@translate|escape:javascript}';
|
||||
const cat_nav = '{$CATEGORIES_NAV|escape:javascript}';
|
||||
const album_id = {$CAT_ID}
|
||||
var parent_album = {$PARENT_CAT_ID}
|
||||
var default_parent_album = {$PARENT_CAT_ID}
|
||||
const album_name = "{$CAT_NAME}"
|
||||
const nb_sub_albums = {$NB_SUBCATS}
|
||||
const pwg_token = '{$PWG_TOKEN}'
|
||||
const u_delete = '{$U_DELETE}'
|
||||
var is_visible = '{$IS_VISIBLE}'
|
||||
let related_categories_ids = ["{$CAT_ID}", "{$PARENT_CAT_ID}"];
|
||||
|
||||
const str_cancel = '{'No, I have changed my mind'|@translate|@escape}'
|
||||
const str_delete_album = '{'Delete album'|@translate|escape:javascript}'
|
||||
const str_delete_album_and_his_x_subalbums = '{'Delete album "%s" and its %d sub-albums.'|@translate|escape:javascript}'
|
||||
const str_just_now = '{'Just now'|@translate|escape:javascript}'
|
||||
|
||||
const str_dont_delete_photos = '{'delete only album, not photos'|@translate|escape:javascript}';
|
||||
const str_delete_orphans = '{'delete album and the %d orphan photos'|@translate|escape:javascript}';
|
||||
const str_delete_all_photos = '{'delete album and all %d photos, even the %d associated to other albums'|@translate|escape:javascript}';
|
||||
|
||||
str_orphan = '{'This photo is an orphan'|@translate|escape:javascript}';
|
||||
str_album_comment_allow = '{'Comments allowed for sub-albums'|@translate|escape:javascript}';
|
||||
str_album_comment_disallow = '{'Comments disallowed for sub-albums'|@translate|escape:javascript}';
|
||||
const str_modal_ab = '{'New parent album'|@translate}';
|
||||
{/footer_script}
|
||||
|
||||
<div class="cat-modify" id="cat-modify">
|
||||
|
||||
<div class="cat-modify-header">
|
||||
<div class="cat-modify-ariane">
|
||||
<span class="icon-home"> /</span>
|
||||
{$CATEGORIES_NAV}
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-actions">
|
||||
|
||||
<a class="icon-pulse tiptip" href="{$U_ACTIVITY}" title="{'Activity'|@translate}"></a>
|
||||
|
||||
{if isset($U_MANAGE_ELEMENTS) }
|
||||
<a class="icon-th tiptip" href="{$U_MANAGE_ELEMENTS}" title="{'Manage album photos'|@translate}"></a>
|
||||
{/if}
|
||||
|
||||
<a class="icon-plus-circled tiptip" href="{$U_ADD_PHOTOS_ALBUM}" title="{'Add Photos'|translate}"></a>
|
||||
|
||||
<a class="icon-sitemap tiptip" href="{$U_MOVE}" title="{'Manage sub-albums'|@translate}"></a>
|
||||
|
||||
{if isset($U_SYNC) }
|
||||
<a class="icon-exchange tiptip" href="{$U_SYNC}" title="{'Synchronize'|@translate}"></a>
|
||||
{/if}
|
||||
|
||||
{if isset($U_DELETE) }
|
||||
<a class="icon-trash deleteAlbum tiptip" href="#" title="{'Delete album'|@translate}"></a>
|
||||
{/if}
|
||||
|
||||
{* <a class="icon-ellipsis-vert tiptip" href="#" title="{'Comments'|@translate}"></a> *}
|
||||
|
||||
<span class="icon-ellipsis-vert toggle-comment-option">
|
||||
<div class="comment-option">
|
||||
<span class="allow-comments icon-ok"> {'Allow comments for sub-albums'|translate} </span>
|
||||
<span class="disallow-comments icon-cancel" target="_blank">{'Disallow comments for sub-albums'|@translate}</span>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
{* Comment for extensions to add their custom actions *}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-content">
|
||||
|
||||
<div class="cat-modify-infos">
|
||||
<div class="cat-modify-info-card cat-creation">
|
||||
<span class="cat-modify-info-title">{'Created'|@translate}</span>
|
||||
<span class="cat-modify-info-content">{if isset($INFO_CREATION_SINCE)}{$INFO_CREATION_SINCE}{else}{'unknown'|translate}{/if}</span>
|
||||
<span class="cat-modify-info-subcontent">{if isset($INFO_CREATION)}{$INFO_CREATION}{else}{'Unknown time period'|translate}{/if}</span>
|
||||
</div>
|
||||
<div class="cat-modify-info-card cat-modification">
|
||||
<span class="cat-modify-info-title">{'Modified'|@translate}</span>
|
||||
<span class="cat-modify-info-content">{$INFO_LAST_MODIFIED_SINCE}</span>
|
||||
<span class="cat-modify-info-subcontent">{$INFO_LAST_MODIFIED}</span>
|
||||
</div>
|
||||
<div title="{$INFO_TITLE}" class="cat-modify-info-card cat-photos">
|
||||
<span class="cat-modify-info-title">{'Photos'|@translate}</span>
|
||||
<span class="cat-modify-info-content">{$INFO_PHOTO}</span>
|
||||
<span class="cat-modify-info-subcontent">{$INFO_IMAGES_RECURSIVE}</span>
|
||||
</div>
|
||||
<div class="cat-modify-info-card cat-albums">
|
||||
<span class="cat-modify-info-title">{'sub-albums'|@translate}</span>
|
||||
<span class="cat-modify-info-content">{$INFO_DIRECT_SUB}</span>
|
||||
<span class="cat-modify-info-subcontent">{$INFO_SUBCATS}</span>
|
||||
</div>
|
||||
{if isset($U_SYNC) }
|
||||
<div class="cat-modify-info-card">
|
||||
<span class="cat-modify-info-title">{'Directory'}</span>
|
||||
<span class="cat-modify-info-content directory" title="{$CAT_DIR_NAME}">{$CAT_DIR_NAME}</span>
|
||||
<span class="cat-modify-info-subcontent directory" title="{$CAT_FULL_DIR}">{$CAT_MIN_DIR}</span>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="cat-modify-representative {if !isset($representant)}icon-file-image{elseif !isset($representant.picture)}icon-dice-solid{/if}"
|
||||
{if !isset($representant)}title="{'No photos in the current album, no thumbnail available'|@translate}"{/if}
|
||||
{if isset($representant) && isset($representant.picture)}style="background-image:url('{$representant.picture.src}')"{/if}
|
||||
>
|
||||
{if isset($representant) and ($representant.ALLOW_SET_RANDOM || $representant.ALLOW_SET_RANDOM)}
|
||||
<div class="cat-modify-representative-actions">
|
||||
{if $representant.ALLOW_SET_RANDOM }
|
||||
<a class="refreshRepresentative buttonLike" id="refreshRepresentative" title="{'Find a new representant by random'|@translate}">
|
||||
<i class="icon-ccw"></i>
|
||||
{'Refresh thumbnail'|@translate}
|
||||
</a>
|
||||
{/if}
|
||||
{if isset($representant.ALLOW_DELETE)}
|
||||
<a class="deleteRepresentative buttonLike" id="deleteRepresentative" title="{'Delete Representant'|@translate}" style="{if !isset($representant.picture)}display:none{/if}">
|
||||
<i class="icon-cancel"></i>
|
||||
{'Remove thumbnail'|translate}
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-form">
|
||||
<div class="cat-modify-input-container">
|
||||
<label for="cat-name">{'Name'|@translate}</label>
|
||||
<input type="text" id="cat-name" value="{$CAT_NAME}" maxlength="255">
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-input-container">
|
||||
<label for="cat-comment">{'Description'|@translate} <span id="desc-zoom-square" class="icon-resize-full tiptip" title="{'Expand'|@translate}"></span></label>
|
||||
<textarea class="sync-textarea" resize="false" rows="5" name="comment" id="cat-comment">{$CAT_COMMENT}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-input-container">
|
||||
<label for="cat-parent">{'Parent album'|@translate}</label>
|
||||
<div class="icon-pencil" id="cat-parent">{$CATEGORIES_PARENT_NAV}</div>
|
||||
</div>
|
||||
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
|
||||
{if isset($CAT_COMMENTABLE)}
|
||||
<div class="cat-modify-switch-container">
|
||||
<div class="switch-input">
|
||||
<label class="switch">
|
||||
<input type="checkbox" name="commentable" id="cat-commentable" value="true" {if $CAT_COMMENTABLE == "true"}checked{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</div>
|
||||
<label class="switch-label" for="cat-commentable"><span>{'Authorize comments'|@translate}</span> <i class="icon-help-circled tiptip" title="{'A photo can receive comments from your visitors if it belongs to an album with comments activated.'|@translate}" style="cursor:help"></i></label>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="cat-modify-switch-container">
|
||||
<div class="switch-input">
|
||||
<label class="switch">
|
||||
<input type="checkbox" name="locked" id="cat-locked" value="true" {if $IS_VISIBLE == 'false'}checked{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<label class="switch-label" for="cat-locked"><span>{'Locked album'|@translate}</span> <i class="icon-help-circled tiptip" title="{'Locked albums are disabled for maintenance. Only administrators can view them in the gallery. Lock this album will also lock his Sub-albums'|@translate}" style="cursor:help"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cat-modify-footer">
|
||||
<div class="cat-modify-footer-start">
|
||||
{if $CAT_ADMIN_ACCESS}
|
||||
<a class="cat-modify-footer-see-out" href="{$U_JUMPTO}"><i class="icon-left-open"></i>{'Open in gallery'|translate}</a>
|
||||
{else}
|
||||
<a class="tiptip cat-modify-footer-see-out disabled" title="{'ACCESS_5'|translate}" href="#"><i class="icon-left-open"></i>{'Open in gallery'|translate}</a>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="cat-modify-footer-end">
|
||||
<div class="info-message icon-ok">{'Album updated'|@translate}</div>
|
||||
<div class="info-error icon-cancel">{'An error has occured while saving album settings'|@translate}</div>
|
||||
<span class="buttonLike" id="cat-properties-save"><i class="icon-floppy"></i> {'Save Settings'|@translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="desc-modal" id="desc-modal">
|
||||
<div class="desc-modal-content">
|
||||
<div class="desc-modal-header">
|
||||
<p>{'Description'|@translate}</p>
|
||||
</div>
|
||||
<div class="desc-modal-body">
|
||||
<textarea class="sync-textarea" name="comment-modal" id="cat-comment-modal">{$CAT_COMMENT}</textarea>
|
||||
</div>
|
||||
<div class="desc-modal-footer">
|
||||
<p id="desc-modal-close" class="cat-modify-footer-see-out"><span class="icon-resize-small"></span>{'Shrink'|translate}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
.toggle-comment-option {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toggle-comment-option::before{
|
||||
transform: scale(1.3);
|
||||
}
|
||||
|
||||
.comment-option {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: linear-gradient(130deg, #ff7700 0%, #ffa744 100%);
|
||||
right: -10px;
|
||||
top: 45px;
|
||||
width: max-content;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.comment-option span, .comment-option a {
|
||||
padding: 5px 10px;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
text-align: initial;
|
||||
}
|
||||
|
||||
.comment-option::after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: 21px;
|
||||
transform: rotate(0deg);
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #ff7700 transparent;
|
||||
}
|
||||
|
||||
.comment-option span:first-child::before {
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.comment-option span:hover:first-child {
|
||||
color: white;
|
||||
background-color: #00000012;
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
|
||||
.comment-option span:hover:last-child {
|
||||
color: white;
|
||||
background-color: #00000012;
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
}
|
||||
|
||||
.cat-modify-footer .spinner {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.warnings {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.directory {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.cat-modify-infos .cat-modify-info-content.directory::first-letter {
|
||||
text-transform: none;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,8 @@
|
||||
<form method="post" action="{$F_ACTION}" id="cat_options">
|
||||
<fieldset>
|
||||
<legend>{$L_SECTION}</legend>
|
||||
{$DOUBLE_SELECT}
|
||||
</fieldset>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</form>
|
||||
|
||||
@@ -0,0 +1,200 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{footer_script}
|
||||
const cat_nav = '{$CATEGORIES_NAV|escape:javascript}';
|
||||
(function(){
|
||||
{* <!-- GROUPS --> *}
|
||||
var groupsCache = new GroupsCache({
|
||||
serverKey: '{$CACHE_KEYS.groups}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
groupsCache.selectize(jQuery('[data-selectize=groups]'));
|
||||
|
||||
{* <!-- USERS --> *}
|
||||
var usersCache = new UsersCache({
|
||||
serverKey: '{$CACHE_KEYS.users}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
usersCache.selectize(jQuery('[data-selectize=users]'));
|
||||
|
||||
{* <!-- TOGGLES --> *}
|
||||
function checkStatusOptions() {
|
||||
if (jQuery("input[name=status]:checked").val() == "private") {
|
||||
jQuery("#privateOptions").show();
|
||||
}
|
||||
else {
|
||||
jQuery("#privateOptions").hide();
|
||||
}
|
||||
}
|
||||
|
||||
checkStatusOptions();
|
||||
jQuery("#selectStatus").change(function() {
|
||||
checkStatusOptions();
|
||||
});
|
||||
|
||||
{if isset($nb_users_granted_indirect) && $nb_users_granted_indirect>0}
|
||||
jQuery(".toggle-indirectPermissions").click(function(e){
|
||||
jQuery(".toggle-indirectPermissions").toggle();
|
||||
jQuery("#indirectPermissionsDetails").toggle();
|
||||
e.preventDefault();
|
||||
});
|
||||
{/if}
|
||||
}());
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<form action="{$F_ACTION}" method="post" id="categoryPermissions">
|
||||
|
||||
<fieldset>
|
||||
<legend><span class="icon-lock icon-yellow"></span>{'Access type'|@translate}</legend>
|
||||
|
||||
<p id="selectStatus">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="status" value="public" {if not $private}checked="checked"{/if}>
|
||||
<strong>{'public'|@translate}</strong> : <em>{'any visitor can see this album'|@translate}</em>
|
||||
</label>
|
||||
<br>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="status" value="private" {if $private}checked="checked"{/if}>
|
||||
<strong>{'private'|@translate}</strong> : <em>{'visitors need to login and have the appropriate permissions to see this album'|@translate}</em>
|
||||
</label>
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="privateOptions">
|
||||
<legend>{'Groups and users'|@translate}</legend>
|
||||
|
||||
<p>
|
||||
{if count($groups) > 0}
|
||||
<strong>{'Permission granted for groups'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="groups" data-value="{$groups_selected|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="groups[]" multiple style="width:600px;"></select>
|
||||
{else}
|
||||
{'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Permission granted for users'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="users" data-value="{$users_selected|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="users[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
{if isset($nb_users_granted_indirect) && $nb_users_granted_indirect>0}
|
||||
<p>
|
||||
{'%u users have automatic permission because they belong to a granted group.'|@translate:$nb_users_granted_indirect}
|
||||
<a href="#" class="toggle-indirectPermissions" style="display:none">{'hide details'|@translate}</a>
|
||||
<a href="#" class="toggle-indirectPermissions">{'show details'|@translate}</a>
|
||||
|
||||
<ul id="indirectPermissionsDetails" style="display:none">
|
||||
{foreach from=$user_granted_indirect_groups item=group_details}
|
||||
<li><strong>{$group_details.group_name}</strong> : {$group_details.group_users}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
{*
|
||||
<h4>{'Groups'|@translate}</h4>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Permission granted'|@translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$group_granted_ids item=id}
|
||||
<li><label><input type="checkbox" name="deny_groups[]" value="{$id}"> {$all_groups[$id]}</label></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<input class="submit" type="submit" name="deny_groups_submit" value="{'Deny selected groups'|@translate}">
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Permission denied'|@translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$group_denied_ids item=id}
|
||||
<li><label><input type="checkbox" name="grant_groups[]" value="{$id}"> {$all_groups[$id]}</label></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<input class="submit" type="submit" name="grant_groups_submit" value="{'Grant selected groups'|@translate}">
|
||||
<label><input type="checkbox" name="apply_on_sub">{'Apply to sub-albums'|@translate}</label>
|
||||
</fieldset>
|
||||
|
||||
<h4>{'Users'|@translate}</h4>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Permission granted'|@translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$user_granted_direct_ids item=id}
|
||||
<li><label><input type="checkbox" name="deny_users[]" value="{$id}"> {$all_users[$id]}</label></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<input class="submit" type="submit" name="deny_users_submit" value="{'Deny selected users'|@translate}">
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Permission granted thanks to a group'|@translate}</legend>
|
||||
{if isset($user_granted_indirects) }
|
||||
<ul>
|
||||
{foreach from=$user_granted_indirects item=user_group}
|
||||
<li>{$user_group.USER} ({$user_group.GROUP})</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Permission denied'|@translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$user_denied_ids item=id}
|
||||
<li><label><input type="checkbox" name="grant_users[]" value="{$id}"> {$all_users[$id]}</label></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<input class="submit" type="submit" name="grant_users_submit" value="{'Grant selected users'|@translate}">
|
||||
<label><input type="checkbox" name="apply_on_sub">{'Apply to sub-albums'|@translate}</label>
|
||||
</fieldset>
|
||||
*}
|
||||
</fieldset>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
<div class="savebar-footer-block">
|
||||
<div class="switch-input">
|
||||
<label class="switch">
|
||||
<input type="checkbox" name="apply_on_sub" id="apply_on_sub" {if $INHERIT}checked="true"{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</div>
|
||||
<label class="switch-label" for="apply_on_sub"><span>{'Apply to sub-albums'|@translate}</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit"><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,109 @@
|
||||
<dl>
|
||||
<dt>{'Check integrity'|@translate}</dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<form method="post" name="c13y" id="c13y" action="">
|
||||
<fieldset>
|
||||
<table class="table2">
|
||||
<tr class="throw">
|
||||
<th></th>
|
||||
<th>{'Anomaly'|@translate}</th>
|
||||
<th>{'Correction'|@translate}</th>
|
||||
</tr>
|
||||
{if isset($c13y_list)}
|
||||
{foreach from=$c13y_list item=c13y name=c13y_loop}
|
||||
<tr class="{if $smarty.foreach.c13y_loop.index is odd}row1{else}row2{/if}">
|
||||
<td>
|
||||
{if $c13y.can_select}
|
||||
<input type="checkbox" name="c13y_selection[]" value="{$c13y.id}" id="c13y_selection-{$c13y.id}"><label for="c13y_selection-{$c13y.id}"></label>
|
||||
{/if}
|
||||
</td>
|
||||
<td><label for="c13y_selection-{$c13y.id}">{$c13y.anomaly}</label></td>
|
||||
<td>
|
||||
<label for="c13y_selection-{$c13y.id}">
|
||||
{if $c13y.show_ignore_msg}
|
||||
{'The anomaly will be ignored until next application version'|@translate}
|
||||
<br>
|
||||
{'Correction the anomaly will cancel the fact that it\'s ignored'|@translate}
|
||||
{/if}
|
||||
{if $c13y.show_correction_fct}
|
||||
{'Automatic correction'|@translate}
|
||||
{/if}
|
||||
{if $c13y.show_correction_bad_fct}
|
||||
{'Impossible automatic correction'|@translate}
|
||||
{/if}
|
||||
{if $c13y.show_correction_success_fct}
|
||||
{'Correction applied with success'|@translate}
|
||||
{/if}
|
||||
{if !empty($c13y.correction_error_fct)}
|
||||
{'Correction applied with error'|@translate}
|
||||
<br>
|
||||
{$c13y.c13y.correction_error_fct}
|
||||
{/if}
|
||||
{if !empty($c13y.correction_msg)}
|
||||
{if $c13y.show_correction_success_fct or !empty($c13y.correction_error_fct) or $c13y.show_correction_fct or $c13y.show_correction_bad_fct }
|
||||
<br>
|
||||
{/if}
|
||||
{$c13y.correction_msg|@nl2br}
|
||||
{/if}
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</table>
|
||||
|
||||
<p>
|
||||
{literal}
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
jQuery("#checkAllLink").click(function () {
|
||||
jQuery("#c13y input[type=checkbox]").attr('checked', true);
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#uncheckAllLink").click(function () {
|
||||
jQuery("#c13y input[type=checkbox]").attr('checked', false);
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
function DeselectAll( formulaire )
|
||||
{
|
||||
var elts = formulaire.elements;
|
||||
for(var i=0; i <elts.length; i++)
|
||||
{
|
||||
if (elts[i].type=='checkbox')
|
||||
elts[i].checked = false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{/literal}
|
||||
{if $c13y_show_submit_ignore}
|
||||
<a href="#" id="checkAllLink">{'Check all'|@translate}</a>
|
||||
/ <a href="#" id="uncheckAllLink">{'Uncheck all'|@translate}</a>
|
||||
{/if}
|
||||
{if isset($c13y_do_check)}
|
||||
/ <a href="#" onclick="DeselectAll(document.getElementById('c13y'));
|
||||
{foreach from=$c13y_do_check item=ID}
|
||||
document.getElementById('c13y_selection-{$ID}').checked = true;
|
||||
{/foreach}
|
||||
return false;">{'Check automatic corrections'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{if $c13y_show_submit_automatic_correction}
|
||||
<input class="submit" type="submit" value="{'Apply selected corrections'|@translate}" name="Apply selected corrections">
|
||||
{/if}
|
||||
{if $c13y_show_submit_ignore}
|
||||
<input class="submit" type="submit" value="{'Ignore selected anomalies'|@translate}" name="Ignore selected anomalies">
|
||||
{/if}
|
||||
<input class="submit" type="submit" value="{'Refresh'|@translate}" name="Refresh">
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
</form>
|
||||
</ul>
|
||||
</dd>
|
||||
@@ -0,0 +1,212 @@
|
||||
{combine_script id="comments" load="footer" path="admin/themes/default/js/comments.js"}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
const str_yes_delete_confirmation = "{'Yes, delete'|@translate|@escape:'javascript'}"
|
||||
const str_no_delete_confirmation = "{"No, I have changed my mind"|@translate|@escape:'javascript'}"
|
||||
const str_delete = "{'Are you sure you want to delete comment #%s?'|@translate|@escape:'javascript'}"
|
||||
const str_deletes = "{'Are you sure you want to delete "%d" comments?'|@translate|@escape:'javascript'}"
|
||||
const str_no_comments_selected = "{'No comments selected, no actions possible.'|@translate|@escape:'javascript'}"
|
||||
const pwg_token = "{$PWG_TOKEN}"
|
||||
const str_an_error_has = "{"An error has occured"|@translate|@escape:'javascript'}"
|
||||
const str_comment_validated = "{"The comment has been validated."|@translate|@escape:'javascript'}"
|
||||
const str_comments_validated = "{"The comments have been validated."|@translate|@escape:'javascript'}"
|
||||
const str_and_others = "{"and %s others"|@translate}"
|
||||
{/footer_script}
|
||||
<style>
|
||||
#tabsheet {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<div class="comments" id="comments">
|
||||
<div class="comments-filters">
|
||||
<div class="comments-tabs-filters">
|
||||
<div class="tab-filters" id="tabFilters">
|
||||
<input type="radio" name="p-filter" class="filter" data-status="all" id="seeAll" checked="">
|
||||
<label for="seeAll">{"All"|translate}<span class="filter-badge" id="commentsAll"></span></label>
|
||||
|
||||
<input type="radio" name="p-filter" class="filter" data-status="validated" id="seeValidated">
|
||||
<label class="filterLabel" for="seeValidated">{"Validated"|translate}<span class="filter-badge"
|
||||
id="commentsValidated"></span></label>
|
||||
|
||||
<input type="radio" name="p-filter" class="filter" data-status="pending" id="seePending">
|
||||
<label class="filterLabel" for="seePending">{"Waiting"|translate}<span class="filter-badge"
|
||||
id="commentsPending"></span></label>
|
||||
</div>
|
||||
|
||||
<div class='comments-selection-controller' id="commentsSelectController">
|
||||
<p>{'Select'|@translate}</p>
|
||||
<p class="comments-selection-btn" id="selectAll">{'All'|@translate}</p>
|
||||
<p class="comments-selection-btn" id="selectNone">{'None'|@translate}</p>
|
||||
<p class="comments-selection-btn" id="selectInvert">{'Invert'|@translate}</p>
|
||||
</div>
|
||||
|
||||
<div class="comments-advanced-filter">
|
||||
<div class="advanced-filter-btn icon-filter" id="commentFilters">
|
||||
<span>{"Filters"|@translate}</span>
|
||||
</div>
|
||||
<div class="comments-search">
|
||||
<span class="icon-search comments-search-icon"> </span>
|
||||
<span class="icon-cancel comments-search-cancel"></span>
|
||||
<input id="commentSearchInput" type="text" placeholder="{"Search"|translate}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-selection-mode" id="headerSelectMode">
|
||||
<div class="comments-selection-switch">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleSelectionMode">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<span>{'Selection mode'|@translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-container" id="commentContainer">
|
||||
<div class="comments-area">
|
||||
<div class="comments-advanced-filters" id="advancedFilters">
|
||||
<div class="comments-filters-container">
|
||||
|
||||
<div class="advanced-filter-author">
|
||||
<label class="advanced-filter-item-label" for="filter_author">{"Author"|translate}</label>
|
||||
<div class="advanced-filter-select-container advanced-filter-item-container">
|
||||
<select class="advanced-filter-select" id="filter_author">
|
||||
<option value="" selected="">--</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-date-start">
|
||||
<label class="advanced-filter-item-label" for="filter_date_start">{'Start-Date'|translate}</label>
|
||||
<div class="">
|
||||
<input id="filter_date_start" type="date" class="advanced-filter-select comments-filters-date" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-date-end">
|
||||
<label class="advanced-filter-item-label" for="filter_date_end">{'End-Date'|translate}</label>
|
||||
<div class="">
|
||||
<input id="filter_date_end" type="date" class="advanced-filter-select comments-filters-date" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="comments-reset-filters">
|
||||
<p class="icon-ccw" id="commentsResetFilters"> {"Clear"|translate}
|
||||
<p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-list" id="commentsList"></div>
|
||||
|
||||
<div class="user-pagination">
|
||||
<div class="pagination-per-page" id="commentsNb">
|
||||
<span class="thumbnailsActionsShow" style="font-weight: bold;">{"Display"|translate}</span>
|
||||
<a id="pagination-per-page-5" class="selected-pagination">5</a>
|
||||
<a id="pagination-per-page-10">10</a>
|
||||
<a id="pagination-per-page-25">25</a>
|
||||
<a id="pagination-per-page-50">50</a>
|
||||
</div>
|
||||
|
||||
<div class="pagination-container">
|
||||
<div class="pagination-arrow left unavailable">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
<div class="pagination-item-container">
|
||||
{* <a data-page="1" class="actual">1</a> *}
|
||||
</div>
|
||||
<div class="user-update-spinner icon-spin6 animate-spin" style="display: none;"></div>
|
||||
<div class="pagination-arrow rigth unavailable">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-selection" id="contentSelectMode">
|
||||
<p class="comments-no-selection" id="commentsNoSelection">{"No comments selected, no actions possible."|translate}
|
||||
</p>
|
||||
<div class="comments-selections" id="commentsSelection">
|
||||
<p>{'Your selection'|@translate}</p>
|
||||
|
||||
<div class="comments-selected" id="commentsSelected">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="comments-and-others" id="commentsSelectedOthers">
|
||||
</div>
|
||||
|
||||
<button id="ValisateSelectionMode" class="icon-ok">{'Validate'|@translate}</button>
|
||||
<button id="DeleteSelectionMode" class="icon-trash-1">{'Delete'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-modal" id="modalViewComment">
|
||||
<div class="modal-content comments-modal">
|
||||
<a class="icon-cancel close-modal" id="closeModalViewComment"></a>
|
||||
<div class="comments-modal-container">
|
||||
|
||||
<div class="comments-modal-header">
|
||||
<div class="comments-modal-infos">
|
||||
<div class="comment-date">
|
||||
<i class="icon-calendar"></i>
|
||||
<p class="comment-datetime"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-modal-img-info">
|
||||
<div class="comments-modal-img-i">
|
||||
|
||||
</div>
|
||||
<img class="comments-modal-img" src="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comments-modal-body">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="comments-modal-footer">
|
||||
<button class="comments-modal-delete buttonLike buttonSecondary" type="button" id="commentsModalDelete"><i class="icon-trash-1"></i> {"Delete"|translate}</button>
|
||||
<button class="comments-modal-validate buttonLike" type="button" id="commentsModalValidate"><i class="icon-ok"></i> {"Validate"|translate}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment-template">
|
||||
<div class="comment-container">
|
||||
<a class="comment-link" href=""><img class="comment-img" src="" /></a>
|
||||
<div class="comment-content">
|
||||
<div>
|
||||
<div class="comment-msgs">
|
||||
<p class="comment-msg"></p>
|
||||
<input type="checkbox" name="comment-selected" value="" class="comment-select-checkbox icon-circle-empty">
|
||||
</div>
|
||||
<div class="comment-author">
|
||||
<i class="comment-author-icon"></i>
|
||||
<p class="comment-author-name"></p>
|
||||
</div>
|
||||
<div class="comment-date">
|
||||
<i class="icon-calendar"></i>
|
||||
<p class="comment-datetime"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment-footer">
|
||||
<p class="comment-hash"></p>
|
||||
<div class="comment-buttons">
|
||||
<button class="comment-validate" type="button"><i class="icon-ok"></i> {"Validate"|translate}</button>
|
||||
<button class="comment-delete" type="button"><i class="icon-trash-1"></i> {"Delete"|translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,171 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{footer_script}
|
||||
(function(){
|
||||
var targets = {
|
||||
'input[name="comments_validation"]' : '#email_admin_on_comment_validation',
|
||||
'input[name="user_can_edit_comment"]' : '#email_admin_on_comment_edition',
|
||||
'input[name="user_can_delete_comment"]' : '#email_admin_on_comment_deletion'
|
||||
};
|
||||
|
||||
for (selector in targets) {
|
||||
var target = targets[selector];
|
||||
|
||||
jQuery(target).toggle(jQuery(selector).is(':checked'));
|
||||
|
||||
(function(target){
|
||||
jQuery(selector).on('change', function() {
|
||||
jQuery(target).toggle($(this).is(':checked'));
|
||||
});
|
||||
})(target);
|
||||
};
|
||||
|
||||
function check_activate_comments() {
|
||||
jQuery("#comments_param_container").toggle(jQuery("input[name=activate_comments]").is(":checked"));
|
||||
}
|
||||
check_activate_comments();
|
||||
jQuery("input[name=activate_comments]").on("change", function() {
|
||||
check_activate_comments();
|
||||
});
|
||||
}());
|
||||
{/footer_script}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset id="commentsConf" class="no-border">
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="activate_comments" id="activate_comments"{if ($comments.activate_comments)} checked="checked"{/if}>
|
||||
{'Activate comments'|translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul id="comments_param_container">
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="comments_forall" {if ($comments.comments_forall)}checked="checked"{/if}>
|
||||
{'Comments for all'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
{'Number of comments per page'|translate}
|
||||
<input type="text" size="3" maxlength="4" name="nb_comment_page" id="nb_comment_page" value="{$comments.NB_COMMENTS_PAGE}">
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
{'Default comments order'|translate}
|
||||
<select name="comments_order">
|
||||
{html_options options=$comments.comments_order_options selected=$comments.comments_order}
|
||||
</select>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="comments_validation" {if ($comments.comments_validation)}checked="checked"{/if}>
|
||||
{'Validation'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="comments_author_mandatory" {if ($comments.comments_author_mandatory)}checked="checked"{/if}>
|
||||
{'Username is mandatory'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="comments_email_mandatory" {if ($comments.comments_email_mandatory)}checked="checked"{/if}>
|
||||
{'Email address is mandatory'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="comments_enable_website" {if ($comments.comments_enable_website)}checked="checked"{/if}>
|
||||
{'Allow users to add a link to their website'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="user_can_edit_comment" {if ($comments.user_can_edit_comment)}checked="checked"{/if}>
|
||||
{'Allow users to edit their own comments'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="user_can_delete_comment" {if ($comments.user_can_delete_comment)}checked="checked"{/if}>
|
||||
{'Allow users to delete their own comments'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li id="notifyAdmin">
|
||||
<strong>{'Notify administrators when a comment is'|translate}</strong>
|
||||
|
||||
<label id="email_admin_on_comment_validation" class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="email_admin_on_comment_validation" {if ($comments.email_admin_on_comment_validation)}checked="checked"{/if}>
|
||||
{'pending validation'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="email_admin_on_comment" {if ($comments.email_admin_on_comment)}checked="checked"{/if}>
|
||||
{'added'|translate}
|
||||
</label>
|
||||
|
||||
<label id="email_admin_on_comment_edition" class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="email_admin_on_comment_edition" {if ($comments.email_admin_on_comment_edition)}checked="checked"{/if}>
|
||||
{'modified'|translate}
|
||||
</label>
|
||||
|
||||
<label id="email_admin_on_comment_deletion" class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="email_admin_on_comment_deletion" {if ($comments.email_admin_on_comment_deletion)}checked="checked"{/if}>
|
||||
{'deleted'|translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,60 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
<form method="post" name="profile" action="{$GUEST_F_ACTION}" id="profile" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
{if $GUEST_USERNAME!='guest'}
|
||||
<fieldset>
|
||||
{'The settings for the guest are from the %s user'|translate:$GUEST_USERNAME}
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Preferences'|translate}</legend>
|
||||
<input type="hidden" name="redirect" value="{$GUEST_REDIRECT}">
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="nb_image_page">{'Number of photos per page'|translate}</label>
|
||||
</span>
|
||||
<input type="text" size="4" maxlength="3" name="nb_image_page" id="nb_image_page" value="{$GUEST_NB_IMAGE_PAGE}">
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="recent_period">{'Recent period'|translate}</label>
|
||||
</span>
|
||||
<input type="text" size="3" maxlength="2" name="recent_period" id="recent_period" value="{$GUEST_RECENT_PERIOD}">
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<span class="property">{'Expand all albums'|translate}</span>
|
||||
{html_radios name='expand' options=$radio_options selected=$GUEST_EXPAND}
|
||||
</li>
|
||||
|
||||
{if $GUEST_ACTIVATE_COMMENTS}
|
||||
<li>
|
||||
<span class="property">{'Show number of comments'|translate}</span>
|
||||
{html_radios name='show_nb_comments' options=$radio_options selected=$GUEST_NB_COMMENTS}
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
<li>
|
||||
<span class="property">{'Show number of hits'|translate}</span>
|
||||
{html_radios name='show_nb_hits' options=$radio_options selected=$GUEST_NB_HITS}
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<p class="bottomButtons">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
<input class="submit" type="submit" name="validate" value="{'Submit'|translate}" {if $isWebmaster != 1}disabled{/if}>
|
||||
<input class="submit" type="reset" name="reset" value="{'Reset'|translate}" {if $isWebmaster != 1}disabled{/if}>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</form>
|
||||
@@ -0,0 +1,340 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{html_style}
|
||||
/*
|
||||
.adminOnlyIcon::before {
|
||||
content:"(";
|
||||
}
|
||||
.adminOnlyIcon::after {
|
||||
content:")";
|
||||
}
|
||||
*/
|
||||
.adminOnlyIcon {
|
||||
background-color:#ddd;
|
||||
padding:2px 5px;
|
||||
border-radius:5px;
|
||||
font-size:90%;
|
||||
}
|
||||
{/html_style}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset id="indexDisplayConf">
|
||||
<legend><span class="icon-television icon-green"></span>{'Main Page'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="menubar_filter_icon" {if ($display.menubar_filter_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('display only recently posted photos'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_new_icon" {if ($display.index_new_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "new" next to albums and pictures'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_search_in_set_button" {if ($display.index_search_in_set_button)}checked="checked"{/if}>
|
||||
{'Activate button "%s"'|translate:('Search in this set'|translate)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_search_in_set_action" {if ($display.index_search_in_set_action)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Search in this set'|translate)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_sort_order_input" {if ($display.index_sort_order_input)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Sort order'|translate)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_flat_icon" {if ($display.index_flat_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('display all photos in all sub-albums'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_posted_date_icon" {if ($display.index_posted_date_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('display a calendar by posted date'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_created_date_icon" {if ($display.index_created_date_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('display a calendar by creation date'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_slideshow_icon" {if ($display.index_slideshow_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('slideshow'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_sizes_icon" {if ($display.index_sizes_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Photo sizes'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_edit_icon" {if ($display.index_edit_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Edit album'|translate|@ucfirst)} <span class="adminOnlyIcon tiptip" title="{'available for administrators only'|translate}"><i class="icon-users"></i> {'administrators'}</span>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="index_caddie_icon" {if ($display.index_caddie_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Add to caddie'|translate|@ucfirst)} <span class="adminOnlyIcon tiptip" title="{'available for administrators only'|translate}"><i class="icon-users"></i> {'administrators'}</span>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="display_fromto" {if ($display.display_fromto)}checked="checked"{/if}>
|
||||
{'Display album date period'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
{'Number of albums per page'|translate}
|
||||
<input type="text" size="3" maxlength="4" name="nb_categories_page" id="nb_categories_page" value="{$display.NB_CATEGORIES_PAGE}">
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="pictureDisplayConf">
|
||||
<legend><span class="icon-picture icon-blue"></span>{'Photo Page'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_slideshow_icon" {if ($display.picture_slideshow_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('slideshow'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_metadata_icon" {if ($display.picture_metadata_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Show file metadata'|translate)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_download_icon" {if ($display.picture_download_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Download this file'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_favorite_icon" {if ($display.picture_favorite_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('add this photo to your favorites'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_sizes_icon" {if ($display.picture_sizes_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Photo sizes'|translate|@ucfirst)}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_edit_icon" {if ($display.picture_edit_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Edit photo'|translate|@ucfirst)} <span class="adminOnlyIcon tiptip" title="{'available for administrators only'|translate}"><i class="icon-users"></i> {'administrators'}</span>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_caddie_icon" {if ($display.picture_caddie_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('Add to caddie'|translate|@ucfirst)} <span class="adminOnlyIcon tiptip" title="{'available for administrators only'|translate}"><i class="icon-users"></i> {'administrators'}</span>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_representative_icon" {if ($display.picture_representative_icon)}checked="checked"{/if}>
|
||||
{'Activate icon "%s"'|translate:('set as album representative'|translate|@ucfirst)} <span class="adminOnlyIcon tiptip" title="{'available for administrators only'|translate}"><i class="icon-users"></i> {'administrators'}</span>
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_navigation_icons" {if ($display.picture_navigation_icons)}checked="checked"{/if}>
|
||||
{'Activate Navigation Bar'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_navigation_thumb" {if ($display.picture_navigation_thumb)}checked="checked"{/if}>
|
||||
{'Activate Navigation Thumbnails'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_menu" {if ($display.picture_menu)}checked="checked"{/if}>
|
||||
{'Show menubar'|translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="pictureInfoConf">
|
||||
<legend><span class="icon-cog icon-red"></span>{'Photo Properties'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[author]" {if ($display.picture_informations.author)}checked="checked"{/if}>
|
||||
{'Author'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[created_on]" {if ($display.picture_informations.created_on)}checked="checked"{/if}>
|
||||
{'Created on'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[posted_on]" {if ($display.picture_informations.posted_on)}checked="checked"{/if}>
|
||||
{'Posted on'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[dimensions]" {if ($display.picture_informations.dimensions)}checked="checked"{/if}>
|
||||
{'Dimensions'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[file]" {if ($display.picture_informations.file)}checked="checked"{/if}>
|
||||
{'File'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[filesize]" {if ($display.picture_informations.filesize)}checked="checked"{/if}>
|
||||
{'Filesize'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[tags]" {if ($display.picture_informations.tags)}checked="checked"{/if}>
|
||||
{'Tags'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[categories]" {if ($display.picture_informations.categories)}checked="checked"{/if}>
|
||||
{'Albums'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[visits]" {if ($display.picture_informations.visits)}checked="checked"{/if}>
|
||||
{'Visits'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="picture_informations[rating_score]" {if ($display.picture_informations.rating_score)}checked="checked"{/if}>
|
||||
{'Rating score'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,300 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{footer_script require='jquery'}
|
||||
(function(){
|
||||
var targets = {
|
||||
'input[name="rate"]' : '#rate_anonymous',
|
||||
'input[name="allow_user_registration"]' : '#email_admin_on_new_user',
|
||||
'input[name="email_admin_on_new_user"]' : '#email_admin_on_new_user_filter'
|
||||
};
|
||||
|
||||
for (selector in targets) {
|
||||
var target = targets[selector];
|
||||
|
||||
jQuery(target).toggle(jQuery(selector).is(':checked'));
|
||||
|
||||
(function(target){
|
||||
jQuery(selector).on('change', function() {
|
||||
jQuery(target).toggle($(this).is(':checked'));
|
||||
});
|
||||
})(target);
|
||||
};
|
||||
|
||||
jQuery('.tiptip-with-img').tipTip({
|
||||
maxWidth: "300px",
|
||||
delay: 0,
|
||||
fadeIn: 200,
|
||||
fadeOut: 200
|
||||
});
|
||||
}());
|
||||
|
||||
{if !isset($ORDER_BY_IS_CUSTOM)}
|
||||
(function(){
|
||||
var max_fields = Math.ceil({$main.order_by_options|@count}/2);
|
||||
|
||||
function updateFilters() {
|
||||
var $selects = jQuery('#order_filters select');
|
||||
|
||||
jQuery('#order_filters .addFilter').toggle($selects.length <= max_fields);
|
||||
jQuery('#order_filters .removeFilter').css('display', '').filter(':first').css('display', 'none');
|
||||
|
||||
$selects.find('option').removeAttr('disabled');
|
||||
$selects.each(function() {
|
||||
$selects.not(this).find('option[value="'+ jQuery(this).val() +'"]').attr('disabled', 'disabled');
|
||||
});
|
||||
}
|
||||
|
||||
jQuery('#order_filters').on('click', '.removeFilter', function() {
|
||||
jQuery(this).parent('span.filter').remove();
|
||||
updateFilters();
|
||||
});
|
||||
|
||||
jQuery('#order_filters').on('change', 'select', updateFilters);
|
||||
|
||||
jQuery('#order_filters .addFilter').click(function() {
|
||||
jQuery(this).prev('span.filter').clone().insertBefore(jQuery(this));
|
||||
jQuery(this).prev('span.filter').children('select').val('');
|
||||
updateFilters();
|
||||
});
|
||||
|
||||
updateFilters();
|
||||
}());
|
||||
{/if}
|
||||
|
||||
jQuery(".themeBoxes a").colorbox();
|
||||
|
||||
jQuery("input[name='mail_theme']").change(function() {
|
||||
jQuery("input[name='mail_theme']").parents(".themeSelect").removeClass("themeDefault");
|
||||
jQuery(this).parents(".themeSelect").addClass("themeDefault");
|
||||
});
|
||||
|
||||
jQuery("input[name='email_admin_on_new_user_filter']").change(function() {
|
||||
var val = jQuery("input[name='email_admin_on_new_user_filter']:checked").val();
|
||||
|
||||
jQuery('#email_admin_on_new_user_filter_group_options').toggle('group' == val);
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset class="mainConf">
|
||||
<legend><span class="icon-cog icon-purple"></span>{'Basic settings'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label for="gallery_title">{'Gallery title'|translate}</label>
|
||||
<br>
|
||||
<input type="text" maxlength="255" size="50" name="gallery_title" id="gallery_title" value="{$main.CONF_GALLERY_TITLE}">
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label for="page_banner">{'Page banner'|translate}</label>
|
||||
<br>
|
||||
<textarea rows="5" cols="50" class="description" name="page_banner" id="page_banner">{$main.CONF_PAGE_BANNER}</textarea>
|
||||
</li>
|
||||
|
||||
<li id="order_filters">
|
||||
<label>{'Default photos order'|translate}</label>
|
||||
|
||||
{foreach from=$main.order_by item=order}
|
||||
<span class="filter {if isset($ORDER_BY_IS_CUSTOM)}transparent{/if}">
|
||||
<select name="order_by[]" {if isset($ORDER_BY_IS_CUSTOM)}disabled{/if}>
|
||||
{html_options options=$main.order_by_options selected=$order}
|
||||
</select>
|
||||
<a class="removeFilter">{'delete'|translate}</a>
|
||||
</span>
|
||||
{/foreach}
|
||||
|
||||
{if !isset($ORDER_BY_IS_CUSTOM)}
|
||||
<a class="addFilter">{'Add a criteria'|translate}</a>
|
||||
{else}
|
||||
<span class="order_by_is_custom">{'You can\'t define a default photo order because you have a custom setting in your local configuration.'|translate}</span>
|
||||
{/if}
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="mainConf">
|
||||
<legend><span class="icon-lock icon-yellow"></span>{'Permissions'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="rate" {if ($main.rate)}checked="checked"{/if}>
|
||||
{'Allow rating'|translate}
|
||||
</label>
|
||||
|
||||
<div id="rate_anonymous" class="sub-setting">
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="rate_anonymous" {if ($main.rate_anonymous)}checked="checked"{/if}>
|
||||
{'Rating by guests'|translate}
|
||||
</label>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="allow_user_registration" {if ($main.allow_user_registration)}checked="checked"{/if}>
|
||||
{'Allow user registration'|translate}
|
||||
</label>
|
||||
|
||||
<div id="email_admin_on_new_user" class="sub-setting">
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="email_admin_on_new_user" {if ($main.email_admin_on_new_user)}checked="checked"{/if}>
|
||||
{'Email admins when a new user registers'|translate}
|
||||
</label>
|
||||
|
||||
<div id="email_admin_on_new_user_filter" class="sub-setting"{if (!$main.email_admin_on_new_user)} style="display:none"{/if}>
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="email_admin_on_new_user_filter" value="all" {if ($main.email_admin_on_new_user_filter eq 'all')}checked{/if}>
|
||||
{'All admins'|translate}
|
||||
</label>
|
||||
<br>
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="email_admin_on_new_user_filter" value="group" {if ($main.email_admin_on_new_user_filter eq 'group')}checked{/if}>
|
||||
{'Only admins in a specific group'|translate}
|
||||
</label>
|
||||
|
||||
<span id="email_admin_on_new_user_filter_group_options"{if ($main.email_admin_on_new_user_filter ne 'group')} style="display:none"{/if}>
|
||||
{if count($group_options) > 0}
|
||||
<select name="email_admin_on_new_user_filter_group">
|
||||
{html_options options=$group_options selected=$main.email_admin_on_new_user_filter_group}
|
||||
</select>
|
||||
{else}
|
||||
{'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a>
|
||||
{/if}
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="allow_user_customization" {if ($main.allow_user_customization)}checked="checked"{/if}>
|
||||
{'Allow user customization'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="obligatory_user_mail_address" {if ($main.obligatory_user_mail_address)}checked="checked"{/if}>
|
||||
{'Mail address is mandatory for registration'|translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="mainConf">
|
||||
<legend><span class="icon-wrench icon-blue"></span>{'Miscellaneous'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>{'Week starts on'|translate}
|
||||
{html_options name="week_starts_on" options=$main.week_starts_on_options selected=$main.week_starts_on_options_selected}</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<strong>{'Save visits in history for'|translate}</strong>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="history_guest" {if ($main.history_guest)}checked="checked"{/if}>
|
||||
{'simple visitors'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="log" {if ($main.log)}checked="checked"{/if}>
|
||||
{'registered users'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="history_admin" {if ($main.history_admin)}checked="checked"{/if}>
|
||||
{'administrators'|translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<strong>{'Promote mobile app on mobile devices'|translate}</strong>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="show_mobile_app_banner_in_gallery" {if ($main.show_mobile_app_banner_in_gallery)}checked="checked"{/if}>
|
||||
{'in gallery'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="show_mobile_app_banner_in_admin" {if ($main.show_mobile_app_banner_in_admin)}checked="checked"{/if}>
|
||||
{'in administration'|translate}
|
||||
</label>
|
||||
|
||||
<span class="icon-help-circled tiptip-with-img show-mobile-app-banner-tooltip" title="{'Displays a banner to install or open the official Piwigo app'|translate}<br><img src='admin/themes/default/images/piwigo_app_banner.jpg' style='width:100%;margin-top:5px;'>" style="cursor:help"></span>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="upload_detect_duplicate" {if ($main.upload_detect_duplicate)}checked="checked"{/if}>
|
||||
{'Detect and avoid duplicates during upload'|translate}
|
||||
</label>
|
||||
|
||||
<span class="icon-help-circled tiptip" title="{'During upload, if Piwigo detects the photo already exists, associate the existing photo to the destination album, without duplicating file'|translate}" style="cursor:help"></span>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>{'Mail theme'|translate}</label>
|
||||
|
||||
<div class="themeBoxes font-checkbox">
|
||||
{foreach from=$main.mail_theme_options item=name key=theme}
|
||||
<div class="themeSelect {if $main.mail_theme==$theme}themeDefault{/if}">
|
||||
<label class="font-checkbox">
|
||||
<div class="themeName">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="mail_theme" value="{$theme}" {if $main.mail_theme==$theme}checked{/if}>
|
||||
{$name}
|
||||
</div>
|
||||
<div class="themeShot">
|
||||
<img src="{$ROOT_URL}themes/default/template/mail/screenshot-{$theme}.png" width="150"/>
|
||||
</div>
|
||||
</label>
|
||||
<a href="{$ROOT_URL}themes/default/template/mail/screenshot-{$theme}.png" class="icon-zoom-in">{'Preview'|translate}</a>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,245 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{footer_script}
|
||||
|
||||
const filters_names = {$search.filters_names|json_encode};
|
||||
|
||||
for(const filter_name of filters_names){
|
||||
if(!$("input#"+filter_name+"Filters").is(':checked')){
|
||||
$("#f"+filter_name+"Select, #"+filter_name+"Arrow").hide();
|
||||
$("#default_"+filter_name).parent().hide();
|
||||
}
|
||||
|
||||
if($("#f"+filter_name+"Select").val()!="admins-only"){
|
||||
$("#"+filter_name+"AdminIcon").hide();
|
||||
}
|
||||
|
||||
if($("#default_"+filter_name).is(':checked')){
|
||||
$("#default_"+filter_name).parent().addClass("selected-filter-container");
|
||||
}
|
||||
|
||||
$("#"+filter_name+"Filters").on("click", function(){
|
||||
if($("input#"+filter_name+"Filters").is(':checked')){
|
||||
$("#f"+filter_name+"Select, #"+filter_name+"Arrow").show();
|
||||
$("#default_"+filter_name).parent().show();
|
||||
if($("#f"+filter_name+"Select").val()=="admins-only"){
|
||||
$("#"+filter_name+"AdminIcon").show();
|
||||
}
|
||||
}
|
||||
else{
|
||||
$("#f"+filter_name+"Select, #"+filter_name+"Arrow, #"+filter_name+"AdminIcon").hide();
|
||||
$("#default_"+filter_name).parent().hide();
|
||||
}
|
||||
})
|
||||
|
||||
$("#f"+filter_name+"Select").on("click", function(){
|
||||
if($("#f"+filter_name+"Select").val()=="admins-only"){
|
||||
$("#"+filter_name+"AdminIcon").show();
|
||||
}
|
||||
else{
|
||||
$("#"+filter_name+"AdminIcon").hide();
|
||||
}
|
||||
})
|
||||
|
||||
$("#default_"+filter_name).on("click", function(){
|
||||
if($("#default_"+filter_name).is(':checked')){
|
||||
$("#default_"+filter_name).parent().addClass("selected-filter-container");
|
||||
}
|
||||
else{
|
||||
$("#default_"+filter_name).parent().removeClass("selected-filter-container");
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
{/footer_script}
|
||||
|
||||
{combine_css path="themes/default/vendor/fontello/css/gallery-icon.css" order=-10}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset class="searchConf">
|
||||
<legend><span class="icon-equalizer icon-blue rotate-element"></span>{'Filters'|translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$search.filters_names item=filter_name}
|
||||
<li class="filters-grid">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" class="filters-icon-check" name="filters_views_box[{$filter_name}]" id="{$filter_name}Filters"
|
||||
{if ($search.filters_views.$filter_name.access != 'nobody' and !($filter_name == 'rating' and !$SHOW_FILTER_RATINGS))}
|
||||
checked="checked"
|
||||
{/if}
|
||||
{if ($filter_name == 'rating' and !$SHOW_FILTER_RATINGS)}
|
||||
disabled
|
||||
{/if}
|
||||
>
|
||||
{if $filter_name == 'words'}
|
||||
{'Search for words'|translate}
|
||||
{else if $filter_name == 'expert'}
|
||||
{'Expert mode'|translate}
|
||||
{else if $filter_name == 'file_size'}
|
||||
{'Filesize'|translate}
|
||||
{else}
|
||||
{ucfirst(str_replace('_', ' ', $filter_name))|translate}
|
||||
{/if}
|
||||
</label>
|
||||
<div class='select-views-arrow icon-down-open' id="{$filter_name}Arrow"> </div>
|
||||
<select name="filters_views[{$filter_name}][access]" id="f{$filter_name}Select" class="select-views">
|
||||
<option value="everybody" {if ($search.filters_views.$filter_name.access == "everybody")}selected{/if}>{'Everybody'|translate}</option>
|
||||
<option value="registered-users" {if ($search.filters_views.$filter_name.access == "registered-users")}selected{/if}>{'registered users'|translate|ucfirst}</option>
|
||||
<option value="admins-only" id="{$filter_name}Admin" {if ($search.filters_views.$filter_name.access == "admins-only")}selected{/if}>{'Admins only'|translate}</option>
|
||||
</select>
|
||||
<div class='icon-users select-views-admin' id="{$filter_name}AdminIcon"> </div>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="searchConf">
|
||||
<legend><span class="icon-equalizer icon-green rotate-element"></span>{'Default filters'|translate}</legend>
|
||||
|
||||
<div class="last-filters">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" class="filters-icon-check" name="filters_views[last_filters_conf]" id="lastFilters" {if ($search.filters_views.last_filters_conf)}checked="checked"{/if}>
|
||||
{'Set last used filters as default for each users'|translate}
|
||||
</label>
|
||||
<span class="icon-help-circled tiptip" title="{'This will be different for each user. Won\'t be applied for unregistered visitors'|translate}" style="cursor:help"></span>
|
||||
</div>
|
||||
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-search">{'Search for words'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[words][default]" id="default_words"
|
||||
{if ($search.filters_views.words.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-tag">{'Tags'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[tags][default]" id="default_tags"
|
||||
{if ($search.filters_views.tags.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-calendar-plus">{'Post date'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[post_date][default]" id="default_post_date"
|
||||
{if ($search.filters_views.post_date.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-calendar">{'Creation date'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[creation_date][default]" id="default_creation_date"
|
||||
{if ($search.filters_views.creation_date.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-album">{'Album'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[album][default]" id="default_album"
|
||||
{if ($search.filters_views.album.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-user-edit">{'Author'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[author][default]" id="default_author"
|
||||
{if ($search.filters_views.author.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options icon-user-1">{'Added by'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[added_by][default]" id="default_added_by"
|
||||
{if ($search.filters_views.added_by.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options icon-file-image">{'File type'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[file_type][default]" id="default_file_type"
|
||||
{if ($search.filters_views.file_type.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options icon-crop">{'Ratio'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[ratio][default]" id="default_ratio"
|
||||
{if ($search.filters_views.ratio.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options icon-star">{'Rating'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[rating][default]" id="default_rating"
|
||||
{if ($search.filters_views.rating.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options icon-hdd">{'Filesize'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[file_size][default]" id="default_file_size"
|
||||
{if ($search.filters_views.file_size.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-height">{'Height'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[height][default]" id="default_height"
|
||||
{if ($search.filters_views.height.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-width">{'Width'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[width][default]" id="default_width"
|
||||
{if ($search.filters_views.width.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
<label class="filter-manager-options-container">
|
||||
<span class="mcs-icon-options gallery-icon-chemistry">{'Expert mode'|translate}</span>
|
||||
<input type="checkbox" class="filter-manager-options-check" name="filters_views[expert][default]" id="default_expert"
|
||||
{if ($search.filters_views.expert.default)}
|
||||
checked="checked"
|
||||
{/if}
|
||||
hidden/>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,242 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
|
||||
|
||||
const title_msg = '{'Are you sure you want to restore to default settings?'|@translate|@escape:javascript}';
|
||||
const confirm_msg = '{'Yes, I am sure'|@translate|@escape}';
|
||||
const cancel_msg = '{'No, I have changed my mind'|@translate|@escape}';
|
||||
|
||||
$(".restore-settings-button").each(function() {
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title_msg,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
|
||||
(function(){
|
||||
var labelMaxWidth = "{'Maximum width'|translate}",
|
||||
labelWidth = "{'Width'|translate}",
|
||||
labelMaxHeight = "{'Maximum height'|translate}",
|
||||
labelHeight = "{'Height'|translate}";
|
||||
|
||||
function toggleResizeFields(size) {
|
||||
var checkbox = jQuery("[name=original_resize]");
|
||||
var needToggle = jQuery("#sizeEdit-original");
|
||||
|
||||
if (jQuery(checkbox).is(':checked')) {
|
||||
needToggle.show();
|
||||
}
|
||||
else {
|
||||
needToggle.hide();
|
||||
}
|
||||
}
|
||||
|
||||
toggleResizeFields("original");
|
||||
jQuery("[name=original_resize]").click(function () {
|
||||
toggleResizeFields("original");
|
||||
});
|
||||
|
||||
jQuery("a[id^='sizeEditOpen-']").click(function(){
|
||||
var sizeName = jQuery(this).attr("id").split("-")[1];
|
||||
jQuery("#sizeEdit-"+sizeName).toggle();
|
||||
jQuery(this).hide();
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery(".cropToggle").click(function() {
|
||||
var labelBoxWidth = jQuery(this).parents('table.sizeEditForm').find('td.sizeEditWidth');
|
||||
var labelBoxHeight = jQuery(this).parents('table.sizeEditForm').find('td.sizeEditHeight');
|
||||
|
||||
if (jQuery(this).is(':checked')) {
|
||||
jQuery(labelBoxWidth).html(labelWidth);
|
||||
jQuery(labelBoxHeight).html(labelHeight);
|
||||
}
|
||||
else {
|
||||
jQuery(labelBoxWidth).html(labelMaxWidth);
|
||||
jQuery(labelBoxHeight).html(labelMaxHeight);
|
||||
}
|
||||
});
|
||||
|
||||
jQuery("#showDetails").click(function() {
|
||||
jQuery(".sizeDetails").show();
|
||||
jQuery(this).css("visibility", "hidden");
|
||||
return false;
|
||||
});
|
||||
})();
|
||||
{/footer_script}
|
||||
|
||||
{html_style}
|
||||
.sizeEnable { width:50px; }
|
||||
.sizeEnable .icon-ok { position:relative; left:2px; }
|
||||
.sizeEditForm { margin:0 0 10px 20px; }
|
||||
.sizeEdit { display:none; }
|
||||
#sizesConf table { margin:0; }
|
||||
.showDetails { padding:0; }
|
||||
.sizeDetails { display:none;margin-left:10px; }
|
||||
.sizeEditOpen { margin-left:10px; }
|
||||
{/html_style}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset id="sizesConf">
|
||||
<legend><span class="icon-picture icon-red"></span>{'Original Size'|translate}</legend>
|
||||
{if (isset($is_gd) and $is_gd)}
|
||||
<div>
|
||||
{'Resize after upload disabled due to the use of GD as graphic library'|translate}
|
||||
<input type="checkbox" name="original_resize"disabled="disabled" style="visibility: hidden">
|
||||
<input type="hidden" name="original_resize_maxwidth" value="{$sizes.original_resize_maxwidth}">
|
||||
<input type="hidden" name="original_resize_maxheight" value="{$sizes.original_resize_maxheight}">
|
||||
<input type="hidden" name="original_resize_quality" value="{$sizes.original_resize_quality}">
|
||||
</div>
|
||||
{else}
|
||||
<div>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="original_resize" {if (isset($sizes.original_resize) and $sizes.original_resize)}checked="checked"{/if}>
|
||||
{'Resize after upload'|translate}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<table id="sizeEdit-original">
|
||||
<tr>
|
||||
<th>{'Maximum width'|translate}</th>
|
||||
<td>
|
||||
<input type="text" name="original_resize_maxwidth" value="{$sizes.original_resize_maxwidth}" size="4" maxlength="4"{if isset($ferrors.original_resize_maxwidth)} class="dError"{/if}> {'pixels'|translate}
|
||||
{if isset($ferrors.original_resize_maxwidth)}<span class="dErrorDesc" title="{$ferrors.original_resize_maxwidth}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{'Maximum height'|translate}</th>
|
||||
<td>
|
||||
<input type="text" name="original_resize_maxheight" value="{$sizes.original_resize_maxheight}" size="4" maxlength="4"{if isset($ferrors.original_resize_maxheight)} class="dError"{/if}> {'pixels'|translate}
|
||||
{if isset($ferrors.original_resize_maxheight)}<span class="dErrorDesc" title="{$ferrors.original_resize_maxheight}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{'Image Quality'|translate}</th>
|
||||
<td>
|
||||
<input type="text" name="original_resize_quality" value="{$sizes.original_resize_quality}" size="3" maxlength="3"{if isset($ferrors.original_resize_quality)} class="dError"{/if}> %
|
||||
{if isset($ferrors.original_resize_quality)}<span class="dErrorDesc" title="{$ferrors.original_resize_quality}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="multiSizesConf">
|
||||
<legend><span class="icon-th icon-purple"></span>{'Multiple Size'|translate}</legend>
|
||||
|
||||
<div class="showDetails">
|
||||
<a href="#" id="showDetails"{if isset($ferrors)} style="display:none"{/if}>{'show details'|translate}</a>
|
||||
</div>
|
||||
|
||||
<table style="margin:0">
|
||||
{foreach from=$derivatives item=d key=type}
|
||||
<tr>
|
||||
<td>
|
||||
<label>
|
||||
{if $d.must_enable}
|
||||
<span class="sizeEnable">
|
||||
<span class="icon-ok"></span>
|
||||
</span>
|
||||
{else}
|
||||
<span class="sizeEnable font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="d[{$type}][enabled]" {if $d.enabled}checked="checked"{/if}>
|
||||
</span>
|
||||
{/if}
|
||||
{$type|translate}
|
||||
</label>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span class="sizeDetails"{if isset($ferrors)} style="display:inline"{/if}>{$d.w} x {$d.h} {'pixels'|translate}{if $d.crop}, {'Crop'|translate|lower}{/if}</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span class="sizeDetails"{if isset($ferrors) and !isset($ferrors.$type)} style="display:inline"{/if}>
|
||||
<a href="#" id="sizeEditOpen-{$type}" class="sizeEditOpen">{'edit'|translate}</a>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr id="sizeEdit-{$type}" class="sizeEdit" {if isset($ferrors.$type)} style="display:block"{/if}>
|
||||
<td colspan="3">
|
||||
<table class="sizeEditForm">
|
||||
{if !$d.must_square}
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" class="cropToggle" name="d[{$type}][crop]" {if $d.crop}checked="checked"{/if}>
|
||||
{'Crop'|translate}
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td class="sizeEditWidth">{if $d.must_square or $d.crop}{'Width'|translate}{else}{'Maximum width'|translate}{/if}</td>
|
||||
<td>
|
||||
<input type="text" name="d[{$type}][w]" maxlength="4" size="4" value="{$d.w}"{if isset($ferrors.$type.w)} class="dError"{/if}> {'pixels'|translate}
|
||||
{if isset($ferrors.$type.w)}<span class="dErrorDesc" title="{$ferrors.$type.w}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{if !$d.must_square}
|
||||
<tr>
|
||||
<td class="sizeEditHeight">{if $d.crop}{'Height'|translate}{else}{'Maximum height'|translate}{/if}</td>
|
||||
<td>
|
||||
<input type="text" name="d[{$type}][h]" maxlength="4" size="4" value="{$d.h}"{if isset($ferrors.$type.h)} class="dError"{/if}> {'pixels'|translate}
|
||||
{if isset($ferrors.$type.h)}<span class="dErrorDesc" title="{$ferrors.$type.h}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td>{'Sharpen'|translate}</td>
|
||||
<td>
|
||||
<input type="text" name="d[{$type}][sharpen]" maxlength="4" size="4" value="{$d.sharpen}"{if isset($ferrors.$type.sharpen)} class="dError"{/if}> %
|
||||
{if isset($ferrors.$type.sharpen)}<span class="dErrorDesc" title="{$ferrors.$type.sharpen}">!</span>{/if}
|
||||
</td>
|
||||
</tr>
|
||||
</table> {* #sizeEdit *}
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
|
||||
<p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails">
|
||||
{'Image Quality'|translate}
|
||||
<input type="text" name="resize_quality" value="{$resize_quality}" size="3" maxlength="3"{if isset($ferrors.resize_quality)} class="dError"{/if}> %
|
||||
{if isset($ferrors.resize_quality)}<span class="dErrorDesc" title="{$ferrors.resize_quality}">!</span>{/if}
|
||||
</p>
|
||||
<p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails">
|
||||
<a href="{$F_ACTION}&action=restore_settings" class="restore-settings-button">{'Reset to default values'|translate}</a>
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,150 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{footer_script}
|
||||
(function(){
|
||||
function onWatermarkChange() {
|
||||
var val = jQuery("#wSelect").val();
|
||||
if (val.length) {
|
||||
jQuery("#wImg").attr('src', '{$ROOT_URL}'+val).show();
|
||||
}
|
||||
else {
|
||||
jQuery("#wImg").hide();
|
||||
}
|
||||
}
|
||||
|
||||
onWatermarkChange();
|
||||
|
||||
jQuery("#wSelect").bind("change", onWatermarkChange);
|
||||
|
||||
if (jQuery("input[name='w[position]']:checked").val() == 'custom') {
|
||||
jQuery("#positionCustomDetails").show();
|
||||
}
|
||||
|
||||
jQuery("input[name='w[position]']").change(function(){
|
||||
if (jQuery(this).val() == 'custom') {
|
||||
jQuery("#positionCustomDetails").show();
|
||||
}
|
||||
else {
|
||||
jQuery("#positionCustomDetails").hide();
|
||||
}
|
||||
});
|
||||
|
||||
jQuery(".addWatermarkOpen").click(function(){
|
||||
jQuery("#addWatermark, #selectWatermark").toggle();
|
||||
return false;
|
||||
});
|
||||
}());
|
||||
{/footer_script}
|
||||
|
||||
<form method="post" action="{$F_ACTION}" class="properties" enctype="multipart/form-data">
|
||||
|
||||
<div id="configContent">
|
||||
|
||||
<fieldset id="watermarkConf" class="no-border">
|
||||
<legend></legend>
|
||||
<ul>
|
||||
<li>
|
||||
<span id="selectWatermark"{if isset($ferrors.watermarkImage)} style="display:none"{/if}><label>{'Select a file'|translate}</label>
|
||||
<select name="w[file]" id="wSelect">
|
||||
{html_options options=$watermark_files selected=$watermark.file}
|
||||
</select>
|
||||
|
||||
{'... or '|translate}<a href="#" class="addWatermarkOpen">{'add a new watermark'|translate}</a>
|
||||
<br>
|
||||
<img id="wImg"></img>
|
||||
</span>
|
||||
|
||||
<span id="addWatermark"{if isset($ferrors.watermarkImage)} style="display:inline"{/if}>
|
||||
{'add a new watermark'|translate} {'... or '|translate}<a href="#" class="addWatermarkOpen">{'Select a file'|translate}</a>
|
||||
|
||||
<br>
|
||||
<input type="file" size="60" id="watermarkImage" name="watermarkImage"{if isset($ferrors.watermarkImage)} class="dError"{/if}> (png)
|
||||
{if isset($ferrors.watermarkImage)}<span class="dErrorDesc" title="{$ferrors.watermarkImage|@htmlspecialchars}">!</span>{/if}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
{'Apply watermark if width is bigger than'|translate}
|
||||
<input size="4" maxlength="4" type="text" name="w[minw]" value="{$watermark.minw}"{if isset($ferrors.watermark.minw)} class="dError"{/if}>
|
||||
</label>
|
||||
{'pixels'|translate}
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
{'Apply watermark if height is bigger than'|translate}
|
||||
<input size="4" maxlength="4" type="text" name="w[minh]" value="{$watermark.minh}"{if isset($ferrors.watermark.minh)} class="dError"{/if}>
|
||||
</label>
|
||||
{'pixels'|translate}
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>{'Position'|translate}</label>
|
||||
<br>
|
||||
<div id="watermarkPositionBox">
|
||||
<label class="right font-checkbox">{'top right corner'|translate} <span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="topright"{if $watermark.position eq 'topright'} checked="checked"{/if}></label>
|
||||
<label class="font-checkbox"><span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="topleft"{if $watermark.position eq 'topleft'} checked="checked"{/if}> {'top left corner'|translate}</label>
|
||||
<label class="middle font-checkbox"><span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="middle"{if $watermark.position eq 'middle'} checked="checked"{/if}> {'middle'|translate}</label>
|
||||
<label class="right font-checkbox">{'bottom right corner'|translate} <span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="bottomright"{if $watermark.position eq 'bottomright'} checked="checked"{/if}></label>
|
||||
<label class="font-checkbox"><span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="bottomleft"{if $watermark.position eq 'bottomleft'} checked="checked"{/if}> {'bottom left corner'|translate}</label>
|
||||
</div>
|
||||
|
||||
<label class="font-checkbox" style="display:block;margin-top:10px;font-weight:normal;"><span class="icon-dot-circled"></span><input name="w[position]" type="radio" value="custom"{if $watermark.position eq 'custom'} checked="checked"{/if}> {'custom'|translate}</label>
|
||||
|
||||
<div id="positionCustomDetails">
|
||||
<label>{'X Position'|translate}
|
||||
<input size="3" maxlength="3" type="text" name="w[xpos]" value="{$watermark.xpos}"{if isset($ferrors.watermark.xpos)} class="dError"{/if}>%
|
||||
{if isset($ferrors.watermark.xpos)}<span class="dErrorDesc" title="{$ferrors.watermark.xpos}">!</span>{/if}
|
||||
</label>
|
||||
|
||||
<br>
|
||||
<label>{'Y Position'|translate}
|
||||
<input size="3" maxlength="3" type="text" name="w[ypos]" value="{$watermark.ypos}"{if isset($ferrors.watermark.ypos)} class="dError"{/if}>%
|
||||
{if isset($ferrors.watermark.ypos)}<span class="dErrorDesc" title="{$ferrors.watermark.ypos}">!</span>{/if}
|
||||
</label>
|
||||
|
||||
<br>
|
||||
<label>{'X Repeat'|translate}
|
||||
<input size="3" maxlength="3" type="text" name="w[xrepeat]" value="{$watermark.xrepeat}"{if isset($ferrors.watermark.xrepeat)} class="dError"{/if}>
|
||||
{if isset($ferrors.watermark.xrepeat)}<span class="dErrorDesc" title="{$ferrors.watermark.xrepeat}">!</span>{/if}
|
||||
</label>
|
||||
|
||||
<br>
|
||||
<label>{'Y Repeat'|translate}
|
||||
<input size="3" maxlength="3" type="text" name="w[yrepeat]" value="{$watermark.yrepeat}"{if isset($ferrors.watermark.yrepeat)} class="dError"{/if}>
|
||||
{if isset($ferrors.watermark.yrepeat)}<span class="dErrorDesc" title="{$ferrors.watermark.yrepeat}">!</span>{/if}
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>{'Opacity'|translate}</label>
|
||||
<input size="3" maxlength="3" type="text" name="w[opacity]" value="{$watermark.opacity}"{if isset($ferrors.watermark.opacity)} class="dError"{/if}> %
|
||||
{if isset($ferrors.watermark.opacity)}<span class="dErrorDesc" title="{$ferrors.watermark.opacity}">!</span>{/if}
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,19 @@
|
||||
<table class="doubleSelect">
|
||||
<tr>
|
||||
<td>
|
||||
<h3>{$L_CAT_OPTIONS_TRUE}</h3>
|
||||
<select class="categoryList" name="cat_true[]" multiple="multiple" size="30">
|
||||
{html_options options=$category_option_true selected=$category_option_true_selected}
|
||||
</select>
|
||||
<p><input class="submit" type="submit" value="»" name="falsify" style="font-size:15px;"></p>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<h3>{$L_CAT_OPTIONS_FALSE}</h3>
|
||||
<select class="categoryList" name="cat_false[]" multiple="multiple" size="30">
|
||||
{html_options options=$category_option_false selected=$category_option_false_selected}
|
||||
</select>
|
||||
<p><input class="submit" type="submit" value="«" name="trueify" style="font-size:15px;"></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -0,0 +1,123 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{footer_script require='jquery.ui.sortable'}
|
||||
|
||||
const cat_nav = '{$CATEGORIES_NAV|escape:javascript}';
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
function checkOrderOptions() {
|
||||
jQuery("#image_order_user_define_options").hide();
|
||||
if (jQuery("input[name=image_order_choice]:checked").val() == "user_define") {
|
||||
jQuery("#image_order_user_define_options").show();
|
||||
}
|
||||
}
|
||||
|
||||
jQuery('ul.thumbnails').sortable( {
|
||||
revert: true, opacity: 0.7,
|
||||
handle: jQuery('.rank-of-image').add('.rank-of-image img'),
|
||||
update: function() {
|
||||
jQuery(this).find('li').each(function(i) {
|
||||
jQuery(this).find("input[name^=rank_of_image]").each(function() {
|
||||
jQuery(this).attr('value', (i+1)*10)
|
||||
});
|
||||
});
|
||||
|
||||
jQuery('#image_order_rank').prop('checked', true);
|
||||
checkOrderOptions();
|
||||
}
|
||||
});
|
||||
|
||||
jQuery("input[name=image_order_choice]").click(function () {
|
||||
checkOrderOptions();
|
||||
});
|
||||
|
||||
checkOrderOptions();
|
||||
});
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.thumbnail').tipTip({
|
||||
'delay' : 0,
|
||||
'fadeIn' : 200,
|
||||
'fadeOut' : 200
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<form action="{$F_ACTION}" method="post" id="element_set_ranks">
|
||||
{if !empty($thumbnails)}
|
||||
<fieldset>
|
||||
<legend><span class="icon-sort-alt-down icon-blue"></span>{'Manual order'|@translate}</legend>
|
||||
{if !empty($thumbnails)}
|
||||
<p>{'Drag to re-order'|@translate}</p>
|
||||
<ul class="thumbnails">
|
||||
{foreach from=$thumbnails item=thumbnail}
|
||||
<li class="rank-of-image">
|
||||
<img src="{$thumbnail.TN_SRC}" class="thumbnail" alt="{$thumbnail.NAME|@replace:'"':' '}" title="{$thumbnail.NAME|@replace:'"':' '}" style="width:{$thumbnail.SIZE[0]}px; height:{$thumbnail.SIZE[1]}px; ">
|
||||
<input type="text" name="rank_of_image[{$thumbnail.ID}]" value="{$thumbnail.RANK}" style="display:none">
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
{/if}
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset>
|
||||
<legend><span class="icon-sort-name-up icon-red"></span>{'Sort order'|@translate}</legend>
|
||||
<p class="field">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="image_order_choice" id="image_order_default" value="default"{if $image_order_choice=='default'} checked="checked"{/if}>
|
||||
{'Use the default photo sort order'|@translate}
|
||||
</label>
|
||||
</p>
|
||||
<p class="field">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="image_order_choice" id="image_order_rank" value="rank"{if $image_order_choice=='rank'} checked="checked"{/if}>
|
||||
{'manual order'|translate}
|
||||
</label>
|
||||
</p>
|
||||
<p class="field">
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="image_order_choice" id="image_order_user_define" value="user_define"{if $image_order_choice=='user_define'} checked="checked"{/if}>
|
||||
{'automatic order'|@translate}
|
||||
</label>
|
||||
<div id="image_order_user_define_options">
|
||||
{foreach from=$image_order item=order}
|
||||
<p class="field">
|
||||
<select name="image_order[]">
|
||||
{html_options options=$image_order_options selected=$order}
|
||||
</select>
|
||||
</p>
|
||||
{/foreach}
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
<div class="savebar-footer-block">
|
||||
<div class="switch-input">
|
||||
<label class="switch">
|
||||
<input type="checkbox" name="image_order_subcats" id="image_order_subcats">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
</div>
|
||||
<label class="switch-label" for="apply_on_sub"><span>{'Apply to sub-albums'|@translate}</span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button id="applyAction" class="buttonLike" type="submit" name="submit"><i class="icon-floppy"></i>{'Save order'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,33 @@
|
||||
{if isset($extents)}
|
||||
<h4>{'Replacement of original templates by customized templates from template-extension subfolder'|@translate}</h4>
|
||||
<form method="post" name="extend_for_templates" id="extend_for_templates" action="">
|
||||
<table class="table2">
|
||||
<tr class="throw">
|
||||
<th>{'Replacers (customized templates)'|@translate}</th>
|
||||
<th>{'Original templates'|@translate}</th>
|
||||
<th>{'Optional URL keyword'|@translate}</th>
|
||||
<th>{'Bound Theme'|@translate}</th>
|
||||
</tr>
|
||||
{foreach from=$extents item=tpl name=extent_loop}
|
||||
<tr class="{if $smarty.foreach.extent_loop.index is odd}row1{else}row2{/if}">
|
||||
<td>
|
||||
<input type="hidden" name="reptpl[]" value="{$tpl.replacer}">
|
||||
{$tpl.replacer}
|
||||
</td>
|
||||
<td>
|
||||
{html_options name='original[]' output=$tpl.original_tpl values=$tpl.original_tpl selected=$tpl.selected_tpl}
|
||||
</td>
|
||||
<td>
|
||||
{html_options name='url[]' output=$tpl.url_parameter values=$tpl.url_parameter selected=$tpl.selected_url}
|
||||
</td>
|
||||
<td>
|
||||
{html_options name='bound[]' output=$tpl.bound_tpl values=$tpl.bound_tpl selected=$tpl.selected_bound}
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
<p>
|
||||
<input type="submit" value="{'Submit'|@translate}" name="submit">
|
||||
</p>
|
||||
</form>
|
||||
{/if}
|
||||
@@ -0,0 +1,124 @@
|
||||
{*
|
||||
Warning : This is the admin pages footer only
|
||||
don't be confusing with the public page footer
|
||||
*}
|
||||
</div>{* <!-- pwgMain --> *}
|
||||
|
||||
{if isset($footer_elements)}
|
||||
{foreach from=$footer_elements item=elt}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
{if isset($debug.QUERIES_LIST)}
|
||||
<div id="debug">
|
||||
{$debug.QUERIES_LIST}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="footer">
|
||||
<div>
|
||||
<a class="externalLink tiptip piwigo-logo" href="{$PHPWG_URL}" title="{'Visit Piwigo project website'|translate}"><img src="admin/themes/default/images/piwigo-grey.svg"></a>
|
||||
{if isset($DISPLAY_BELL) and $DISPLAY_BELL}
|
||||
<span id="whats_new_notification" class="icon-blue tiptip" onclick="show_user_whats_new()" title="{'What\'s new in version %s'|translate:$WHATS_NEW_MAJOR_VERSION}">
|
||||
<i class="icon-bell"></i>
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
<div id="pageInfos">
|
||||
{if isset($debug.TIME) }
|
||||
{'Page generated in'|translate} {$debug.TIME} ({$debug.NB_QUERIES} {'SQL queries in'|translate} {$debug.SQL_TIME}) -
|
||||
{/if}
|
||||
|
||||
{'Contact'|translate}
|
||||
<a href="mailto:{$CONTACT_MAIL}?subject={'A comment on your site'|translate|escape:url}">{'Webmaster'|translate}</a>
|
||||
</div>{* <!-- pageInfos --> *}
|
||||
|
||||
</div>{* <!-- footer --> *}
|
||||
</div>{* <!-- the_page --> *}
|
||||
|
||||
{if (isset($SHOW_WHATS_NEW) and $SHOW_WHATS_NEW) or (isset($DISPLAY_BELL) and $DISPLAY_BELL)}
|
||||
<div id="whats_new">
|
||||
<div id="whats_new_popin">
|
||||
<a class="icon-cancel close_whats_new" onClick="hide_user_whats_new()"></a>
|
||||
<h3>{'What\'s new in version %s'|translate:$WHATS_NEW_MAJOR_VERSION}</h3>
|
||||
<div>
|
||||
<div class="whats_new_block_container">
|
||||
<div class="whats_new_block icon-blue whats_new_block_w_60">
|
||||
<h4>{'Brand new login & preferences with Standard pages !'|translate}</h4>
|
||||
<a href="{$RELEASE_NOTE_URL}" target="_blank"><img src="{$WHATS_NEW_IMGS.1}"></a>
|
||||
</div>
|
||||
<div class="whats_new_block icon-purple whats_new_block_w_40">
|
||||
<h4>{'Two factor authentication is here'|translate}</h4>
|
||||
<a href="{$RELEASE_NOTE_URL}" target="_blank"><img src="{$WHATS_NEW_IMGS.2}"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="whats_new_block_container">
|
||||
<div class="whats_new_block icon-green whats_new_block_w_100">
|
||||
<h4>{'UI redesigns that make a difference'|translate}</h4>
|
||||
<a href="{$RELEASE_NOTE_URL}" target="_blank"><img src="{$WHATS_NEW_IMGS.3}"></a>
|
||||
</div>
|
||||
{* <div class="whats_new_block icon-yellow">
|
||||
<h4>{'Even more filters for the gallery search engine'|translate}</h4>
|
||||
<a href="{$RELEASE_NOTE_URL}" target="_blank"><img src="{$WHATS_NEW_IMGS.4}"></a>
|
||||
</div>
|
||||
</div> *}
|
||||
</div>
|
||||
<div class="whats_new_buttons">
|
||||
<button onClick="hide_user_whats_new()"><i class="icon-thumbs-up"></i> {'Ok, got it!'|translate}</button>
|
||||
<a class="buttonLike" href="{$RELEASE_NOTE_URL}" target="_blank"><i class="icon-book"></i> {'Read the release note'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<style>
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
{combine_script id='jquery.tipTip' load='footer' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
{footer_script require='jquery.tipTip'}
|
||||
jQuery('.tiptip').tipTip({
|
||||
delay: 0,
|
||||
fadeIn: 200,
|
||||
fadeOut: 200
|
||||
});
|
||||
|
||||
jQuery('a.externalLink').click(function() {
|
||||
window.open(jQuery(this).attr("href"));
|
||||
return false;
|
||||
});
|
||||
|
||||
function hide_user_whats_new() {
|
||||
$.ajax({
|
||||
url: "ws.php?format=json&method=pwg.users.preferences.set",
|
||||
type: "POST",
|
||||
dataType: "JSON",
|
||||
data: {
|
||||
param: 'show_whats_new_{$WHATS_NEW_MAJOR_VERSION}',
|
||||
value: false,
|
||||
}
|
||||
})
|
||||
$('#whats_new').hide();
|
||||
}
|
||||
|
||||
function show_user_whats_new() {
|
||||
$('#whats_new').show();
|
||||
}
|
||||
|
||||
{if isset($SHOW_WHATS_NEW) && $SHOW_WHATS_NEW}
|
||||
show_user_whats_new()
|
||||
{/if}
|
||||
|
||||
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<!-- BEGIN get_combined -->
|
||||
{get_combined_scripts load='footer'}
|
||||
<!-- END get_combined -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,268 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{footer_script}
|
||||
var pwg_token = "{$PWG_TOKEN}";
|
||||
var str_member_default = "{'member'|@translate|@escape:'javascript'}"
|
||||
var str_members_default = "{'members'|@translate|@escape:'javascript'}"
|
||||
var str_group_created = "{'Group added'|@translate|@escape:'javascript'}"
|
||||
var str_renaming_done = "{'Group renamed'|@translate|@escape:'javascript'}"
|
||||
var str_name_taken = "{'Name is already taken'|@translate|@escape:'javascript'}"
|
||||
var str_name_not_empty = "{'Name field must not be empty'|@translate|@escape:'javascript'}"
|
||||
var str_group_deleted = '{'Group "%s" succesfully deleted'|@translate|@escape:'javascript'}'
|
||||
var str_groups_deleted = '{'Groups \{%s\} succesfully deleted'|@translate}'
|
||||
var str_set_default = "{'Set as group for new users'|@translate|@escape:'javascript'}"
|
||||
var str_unset_default = "{'Unset as group for new users'|@translate|@escape:'javascript'}"
|
||||
var str_delete = '{'Are you sure you want to delete group "%s"?'|@translate|@escape:'javascript'}'
|
||||
var str_yes_delete_confirmation = "{'Yes, delete'|@translate|@escape:'javascript'}"
|
||||
var str_no_delete_confirmation = "{"No, I have changed my mind"|@translate|@escape:'javascript'}"
|
||||
var str_user_associated = "{"User associated"|@translate|@escape:'javascript'}"
|
||||
var str_user_dissociate = "{'Dissociate user from this group'|translate|@escape:'javascript'}"
|
||||
var str_user_dissociated = '{'User "%s" dissociated from this group'|@translate|@escape:'javascript'}'
|
||||
var str_user_list = "{'Manage the members'|translate|@escape:'javascript'}"
|
||||
var str_merged_into = '{'Group(s) \{%s1\} succesfully merged into "%s2"'|@translate}'
|
||||
var str_copy = '{' (copy)'|@translate|@escape:'javascript'}'
|
||||
var str_other_copy = '{' (copy %s)'|@translate|@escape:'javascript'}'
|
||||
|
||||
var serverKey = '{$CACHE_KEYS.users}'
|
||||
var serverId = '{$CACHE_KEYS._hash}'
|
||||
var rootUrl = '{$ROOT_URL}'
|
||||
|
||||
$(document).on('keydown', function (e) {
|
||||
if ( e.keyCode === 27) { // ESC button
|
||||
$("#UserList").fadeOut();
|
||||
}
|
||||
})
|
||||
$(document).on('click', function (e) {
|
||||
if ($(e.target).closest(".UserListPopInContainer").length === 0) {
|
||||
$("#UserList").fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
{* temporary fix for #1283 (begin) : force user local storage cache on page load. *}
|
||||
var usersCache = new UsersCache({
|
||||
serverKey: '{$CACHE_KEYS.users}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
usersCache.selectize(jQuery('select.UserSearch'));
|
||||
{* temporary fix for #1283 (end) *}
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='group_list' load='footer' path='admin/themes/default/js/group_list.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
|
||||
{* Define template function for the content of Groups*}
|
||||
{function name=groupContent}
|
||||
{function groupContent}
|
||||
<div id="group-{$grp_id}" class="GroupContainer" data-id={$grp_id} {if $grp_is_default}data-default=1 {else}data-default=0 {/if}>
|
||||
<div class="Group-checkbox in-selection-mode">
|
||||
<label class="Group-checkbox-label" for="Group-Checkbox-selection-{$grp_id}"></label>
|
||||
<input type="checkbox" id="Group-Checkbox-selection-{$grp_id}">
|
||||
<span class="group-checkmark"></span>
|
||||
</div>
|
||||
<div class="groupHeader">
|
||||
<div class="groupIcon">
|
||||
<div class="icon-users-1
|
||||
{if isset($grp_color)}
|
||||
{$grp_color}
|
||||
{/if}">
|
||||
</div>
|
||||
<div class="groupMessage icon-ok icon-green"></div>
|
||||
<div class="groupError icon-cancel"></div>
|
||||
</div>
|
||||
|
||||
<div class="icon-star not-in-selection-mode is-default-token{if !$grp_is_default} deactivate{/if}" ></div>
|
||||
|
||||
<div class="icon-ellipsis-vert group-dropdown-options not-in-selection-mode">
|
||||
<div id="GroupOptions" class="dropdown">
|
||||
<div class="icon-docs dropdown-option" id="GroupDuplicate" value="duplicate">{'Duplicate'|@translate}</div>
|
||||
<div class="icon-trash dropdown-option" id="GroupDelete" value="delete">{'Delete'|@translate}</div>
|
||||
<div class="icon-star dropdown-option" id="GroupDefault" value="delete"></div>
|
||||
<a class="icon-pulse dropdown-option" href="admin.php?page=user_activity&group={$grp_id}">{'Activity'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="Group-name">
|
||||
<div class="Group-name-container">
|
||||
<p id="group_name">{$grp_name}</p>
|
||||
<span class="icon-pencil"></span>
|
||||
</div>
|
||||
<div class="group-rename">
|
||||
<form>
|
||||
<input type="text" class="group_name-editable" value="{$grp_name}">
|
||||
<input type="submit" hidden>
|
||||
</form>
|
||||
<span class="icon-ok validate"></span>
|
||||
<span class="icon-cancel"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="EditGroupName">
|
||||
<input class="input-edit-group-name" type="text" name="username" maxlength="50" size="20" placeholder="{$grp_name}">
|
||||
<button class="icon-ok submit" name="submit_add" id="EditGroupNameSubmit" type="submit">Change group name</button>
|
||||
<a id="EditGroupcancel">{'Cancel'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<p class="group_number_users">{$grp_members}</p>
|
||||
</div>
|
||||
|
||||
<a id="UserListTrigger" class="icon-user-1 manage-users not-in-selection-mode GroupManagerButtons">{'Manage the members'|translate}</a>
|
||||
<a class="icon-lock manage-permissions not-in-selection-mode GroupManagerButtons" href="admin.php?page=group_perm&group_id={$grp_id}">{'Manage Permissions'|translate}</a>
|
||||
</div>
|
||||
{/function}
|
||||
{/function}
|
||||
|
||||
|
||||
<div class="selection-mode-group-manager">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleSelectionMode">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<p>{'Selection mode'|@translate}</p>
|
||||
</div>
|
||||
|
||||
<div id="selection-mode-block" class="in-selection-mode">
|
||||
<div class="Selection-mode-content">
|
||||
<p id="nothing-selected">{'No groups selected, no actions possible.'|@translate}</p>
|
||||
<div class="SelectionModeGroup">
|
||||
<p>{'Your selection'|@translate}</p>
|
||||
<div class="SelectionModeGroupList">
|
||||
|
||||
<div class="DeleteGroupList">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<button id="MergeSelectionMode" class="icon-object-group unavailable" title="{'At least 2 selected groups are needed to merge'|@translate}">{'Merge'|@translate}</button>
|
||||
<button id="DeleteSelectionMode" class="icon-trash-1 unavailable">{'Delete'|@translate}</button>
|
||||
</div>
|
||||
|
||||
<div id="MergeOptionsBlock">
|
||||
<p>{'Choose which group to merge these groups into'|@translate}</p>
|
||||
<p class="ItalicTextInfo">{'The other groups will be removed'|@translate}</p>
|
||||
<div class="MergeOptionsContainer">
|
||||
<select id="MergeOptionsChoices">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button class="icon-ok ConfirmMergeButton">{'Confirm merge'|@translate}</button>
|
||||
<a id="CancelMerge" onclick="updateSelectionPanel('Selection')">{'Cancel'|@translate}</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="ConfirmGroupAction">
|
||||
<p>{'You are about to delete %s groups, are you sure?'|translate:'<span class="number-Selected">0</span>'}</p>
|
||||
<button class="icon-ok ConfirmDeleteButton">{'Yes, delete'|@translate}</button>
|
||||
<a id="CancelDelete" onclick="updateSelectionPanel('Selection')">{"No, I have changed my mind"|@translate}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group-manager">
|
||||
|
||||
<div class="groups">
|
||||
|
||||
<div id="addGroupForm" class="GroupContainer">
|
||||
<div class="groupError icon-cancel"></div>
|
||||
<div class="addGroupBlock">
|
||||
<div class="icon-plus-circled icon-blue icon-blue-full"></div>
|
||||
<p id="addGroup">{'Add group'|translate}</p>
|
||||
</div>
|
||||
<form>
|
||||
<fieldset>
|
||||
<div class="addGroupFormLabelAndInput">
|
||||
<label class="addGroupLabel" for="addGroupNameInput">{'Group name'|translate}</label>
|
||||
<input type="text" id="addGroupNameInput" name="groupname" maxlength="50" size="20" placeholder="{'Photographers...'|translate}">
|
||||
</div>
|
||||
<div class="actionButtons">
|
||||
<button name="submit" type="submit" class="buttonLike">
|
||||
<i class='icon-plus'> </i> {'Add'|translate}
|
||||
</button>
|
||||
<br/>
|
||||
<a id="addGroupClose" onclick="hideAddGroupForm()">{'Cancel'|@translate}</a>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{* Template Group (for js application) *}
|
||||
{groupContent grp_id="template" grp_name="Template" grp_members=0 grp_is_default=false}
|
||||
|
||||
{assign var='color_tab' value=["icon-red", "icon-blue", "icon-yellow", "icon-purple", "icon-green"]}
|
||||
|
||||
{if not empty($groups)}
|
||||
{foreach from=$groups item=group name=group_loop}
|
||||
{assign var='color_id' value=$group.ID%5}
|
||||
{groupContent
|
||||
grp_id=$group.ID
|
||||
grp_name=$group.NAME
|
||||
grp_members=$group.MEMBERS
|
||||
grp_color=$color_tab[$color_id]
|
||||
grp_is_default=$group.IS_DEFAULT
|
||||
}
|
||||
|
||||
{/foreach}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div id="UserList" class="UserListPopIn">
|
||||
|
||||
<div class="UserListPopInContainer">
|
||||
|
||||
<a class="icon-cancel CloseUserList"></a>
|
||||
|
||||
<div class="group-name-block">
|
||||
<span class="icon-list-bullet"></span>
|
||||
<p></p>
|
||||
<span class="UserNumberBadge">25</span>
|
||||
</div>
|
||||
|
||||
<div class="UserListAddFilterUsers">
|
||||
<div class="AddUserBlock">
|
||||
<p>{'Associate User'|translate}</p>
|
||||
<select class="UserSearch" placeholder="John Doe"></select>
|
||||
<button class="icon-user-add submit" name="submit_add" id="UserSubmit" type="submit"></button>
|
||||
</div>
|
||||
<div class="FilterUserBlock">
|
||||
<div class="AmountOfUsersShown">
|
||||
<p>{'Showing %s users out of %s'|translate:'<strong>39</strong>':'<strong>251</strong>'}</p>
|
||||
</div>
|
||||
<div class='search-user'>
|
||||
<span class="icon-filter search-icon"></span>
|
||||
<span class="icon-cancel search-cancel"></span>
|
||||
<input class="input-user-name search-input" type="text" name="username" maxlength="50" size="20" placeholder="{'Filter'|@translate}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="UsersInGroupListContainer">
|
||||
|
||||
<div class="UsersInGroupList row">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="LinkUserManager">
|
||||
<a>
|
||||
<span class="icon-users-cog"></span>
|
||||
{'Manage users with user manager'|translate}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
{* $Id *}
|
||||
<h2>{$TITLE}</h2>
|
||||
|
||||
<form method="post" action="{$F_ACTION}">
|
||||
{$DOUBLE_SELECT}
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</form>
|
||||
|
||||
<p>{'Only private albums are listed'|@translate}</p>
|
||||
@@ -0,0 +1,94 @@
|
||||
{*
|
||||
Warning : This is the admin pages header only
|
||||
don't confuse with the public page header
|
||||
*}
|
||||
<!DOCTYPE html>
|
||||
<html lang="{$lang_info.code}" dir="{$lang_info.direction}">
|
||||
<head>
|
||||
{if $SHOW_MOBILE_APP_BANNER}
|
||||
<meta name="apple-itunes-app" content="app-id=472225196">
|
||||
{/if}
|
||||
<meta charset="{$CONTENT_ENCODING}">
|
||||
<title>{$GALLERY_TITLE} :: {$PAGE_TITLE}</title>
|
||||
<link rel="icon" type="image/svg+xml" href="{$ROOT_URL}{$themeconf.icon_dir}/piwigo.org-icon 1.svg">
|
||||
<link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/fonts/open-sans/open-sans.css">
|
||||
|
||||
{strip}
|
||||
{combine_css path="admin/themes/default/fontello/css/fontello.css" order=-10}
|
||||
{assign "theme_id" ""}
|
||||
{foreach from=$themes item=theme}
|
||||
{assign "theme_id" $theme.id}
|
||||
|
||||
{if $theme.load_css}
|
||||
{combine_css path="admin/themes/`$theme.id`/theme.css" order=-10}
|
||||
{combine_css path="admin/themes/`$theme.id`/css/components/general.css" order=-9} {* Temporary solution *}
|
||||
{/if}
|
||||
{if !empty($theme.local_head)}
|
||||
{include file=$theme.local_head load_css=$theme.load_css}
|
||||
{/if}
|
||||
{/foreach}
|
||||
|
||||
{combine_script id='jquery' path='themes/default/js/jquery.min.js'}
|
||||
{/strip}
|
||||
|
||||
<!-- BEGIN get_combined -->
|
||||
{get_combined_css}
|
||||
|
||||
{get_combined_scripts load='header'}
|
||||
<!-- END get_combined -->
|
||||
|
||||
{if not empty($head_elements)}
|
||||
{foreach from=$head_elements item=elt}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
{/if}
|
||||
</head>
|
||||
|
||||
<body id="{$BODY_ID}">
|
||||
|
||||
<div id="the_page">
|
||||
|
||||
{if not empty($header_msgs)}
|
||||
<div class="header_msgs">
|
||||
{foreach from=$header_msgs item=elt}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="pwgHead">
|
||||
<a href="{$U_RETURN}" class="visit-gallery tiptip" title="{'Visit Gallery'|translate}"><i class="icon-left-open"></i>{'Visit'|translate}</a>
|
||||
<div class="pwgHead-gallery-title">{$GALLERY_TITLE}</div>
|
||||
|
||||
<div id="headActions">
|
||||
<span class="admin-head-username"><i class="icon-user"></i>{$USERNAME}</span>
|
||||
{*
|
||||
<a href="{$U_RETURN}" title="{'Visit Gallery'|translate}"><i class="icon-eye"></i><span>{'Visit Gallery'|translate}</span></a>
|
||||
*}
|
||||
|
||||
{strip}
|
||||
<a href="{$U_CHANGE_THEME}" class="tiptip" title="{'Switch to clear or dark colors for administration'|translate}">
|
||||
{if $theme_id eq "clear"}
|
||||
<i class="icon-moon-inv"></i><span>Dark</span>
|
||||
{elseif $theme_id eq "roma"}
|
||||
<i class="icon-sun-inv"></i><span>Light</span>
|
||||
{/if}
|
||||
</a>
|
||||
{/strip}
|
||||
|
||||
<a class="tiptip" href="{$U_FAQ}" title="{'Instructions to use Piwigo'|@translate}"><i class="icon-help-circled"></i><span>{'Help Me'|translate}</span></a>
|
||||
<a href="{$U_LOGOUT}"><i class="icon-logout"></i><span>{'Logout'|translate}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="clear:both;"></div>
|
||||
|
||||
{if not empty($header_notes)}
|
||||
<div class="header_notes">
|
||||
{foreach from=$header_notes item=elt}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="pwgMain">
|
||||
@@ -0,0 +1,13 @@
|
||||
{if not $ENABLE_SYNCHRONIZATION}
|
||||
{html_style}{literal}
|
||||
#helpSynchro {display:none;}
|
||||
{/literal}{/html_style}
|
||||
{/if}
|
||||
|
||||
<h2>{'Help'|@translate} » {$HELP_SECTION_TITLE}</h2>
|
||||
|
||||
<div id="helpContent">
|
||||
|
||||
{$HELP_CONTENT}
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,742 @@
|
||||
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
|
||||
{footer_script}
|
||||
jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
||||
jQuery('[data-datepicker]').pwgDatepicker();
|
||||
});
|
||||
|
||||
var dateObj = new Date();
|
||||
var month = dateObj.getUTCMonth() + 1; //months from 1-12
|
||||
var day = dateObj.getUTCDate();
|
||||
var year = dateObj.getUTCFullYear();
|
||||
|
||||
var filter_user_name = "{$USER_NAME}";
|
||||
|
||||
if (month < 10) month = "0" + month;
|
||||
if (day < 10) day = "0" + day;
|
||||
|
||||
today = year + "-" + month + "-" + day;
|
||||
var current_param = {
|
||||
start: "",
|
||||
end: today,
|
||||
types: {
|
||||
0: "none",
|
||||
1: "picture",
|
||||
2: "high",
|
||||
3: "other"
|
||||
},
|
||||
user_id: {$USER_ID},
|
||||
image_id: {if isset($IMAGE_ID)}"{$IMAGE_ID}"{else}""{/if},
|
||||
filename: "",
|
||||
ip: {if isset($IP)}"{$IP}"{else}""{/if},
|
||||
display_thumbnail: "display_thumbnail_classic",
|
||||
pageNumber: 0 {* fetch lines from line 0 to line 100*}
|
||||
}
|
||||
|
||||
const API_METHOD = "{$API_METHOD}";
|
||||
const str_dwld = "{'Downloaded'|translate}";
|
||||
const str_most_visited = "{'Most visited'|translate}";
|
||||
const str_best_rated = "{'Best rated'|translate}";
|
||||
const str_list = "{'Random photo'|translate}";
|
||||
const str_favorites = "{'Your favorites'|translate}";
|
||||
const str_recent_cats = "{'Recent albums'|translate}";
|
||||
const str_recent_pics = "{'Recent photos'|translate}";
|
||||
const str_memories = "{'Memories'|translate}";
|
||||
const str_no_longer_exist_photo = "{'This photo no longer exists'|@translate}";
|
||||
const str_tags = "{'Tags'|translate}";
|
||||
const unit_MB = "{"%s MB"|@translate}";
|
||||
const str_guest = '{'guest'|@translate}';
|
||||
const str_contact_form = '{'Contact Form'|@translate}';
|
||||
const str_edit_img = '{'Edit photo'|@translate}';
|
||||
|
||||
const str_search_details = {
|
||||
"allwords": "{'Search for words'|@translate}",
|
||||
"date_posted": "{'Post date'|@translate}",
|
||||
"tags": str_tags,
|
||||
"cat": "{'Album'|@translate}",
|
||||
"author": "{'Author'|@translate}",
|
||||
"added_by": "{'Added by'|@translate}",
|
||||
"filetypes": "{'File type'|@translate}",
|
||||
};
|
||||
const str_and_more = "{'and %d more'|@translate}"
|
||||
|
||||
const guest_id = {$guest_id};
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='history' load='footer' path='admin/themes/default/js/history.js'}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{combine_css path="themes/default/vendor/fontello/css/gallery-icon.css" order=-10}
|
||||
|
||||
<form class="filter" method="post" name="filter" action="">
|
||||
<fieldset class="history-filter">
|
||||
<div class="selectable-filter">
|
||||
<div class="filter-part date-start">
|
||||
<label>{'Start-Date'|@translate}</label>
|
||||
<input type="hidden" name="start" value="{$START}">
|
||||
<label>
|
||||
<input type="text" data-datepicker="start" data-datepicker-end="end" data-datepicker-unset="start_unset" readonly>
|
||||
</label>
|
||||
<a href="#" class="icon-cancel-circled" id="start_unset">{'unset'|translate}</a>
|
||||
</div>
|
||||
<div class="filter-part date-end">
|
||||
<label>{'End-Date'|@translate}</label>
|
||||
<input type="hidden" name="end" value="{$END}">
|
||||
<label>
|
||||
<input type="text" data-datepicker="end" data-datepicker-start="start" data-datepicker-unset="end_unset" readonly>
|
||||
</label>
|
||||
<a href="#" class="icon-cancel-circled" id="end_unset">{'unset'|translate}</a>
|
||||
</div>
|
||||
<div class="filter-part elem-type advanced-filter-select-container">
|
||||
<label>
|
||||
{'Action'|@translate}
|
||||
<select name="types[]" class="elem-type-select user-action-select advanced-filter-select">
|
||||
<option value=""></option>
|
||||
<option value="visited">{'Visited'|@translate} </option>
|
||||
<option value="downloaded">{'Downloaded'|@translate} </option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-tags">
|
||||
<label>{'Additional filters'|translate}</label>
|
||||
<div class="filter-container">
|
||||
<div id="default-filter" class="filter-item hide">
|
||||
<span class="filter-icon"></span><span class="filter-title"> test </span><span class="remove-filter icon-cancel"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="refresh-results icon-arrows-cw tiptip" title="{'Refresh'|translate}">
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{if isset($search_summary)}
|
||||
<fieldset>
|
||||
<legend>{'Summary'|@translate}</legend>
|
||||
|
||||
<ul>
|
||||
<li>{$search_summary.NB_LINES}, {$search_summary.FILESIZE}</li>
|
||||
<li>
|
||||
{$search_summary.USERS}
|
||||
<ul>
|
||||
<li>{$search_summary.MEMBERS}</li>
|
||||
<li>{$search_summary.GUESTS}</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
{* Used to be copied in JS *}
|
||||
<span id="-2" class="icon-green summary-user-item hide">
|
||||
<i class="icon-user-1"> </i>
|
||||
<i class="icon-plus-circled"> </i>
|
||||
<span class="user-item-name"> User test </span>
|
||||
</span>
|
||||
{* *}
|
||||
|
||||
<div class="search-summary">
|
||||
<div class="summary-lines">
|
||||
<span class="icon-yellow icon-menu summary-icons"></span>
|
||||
<span class="summary-data"> </span>
|
||||
</div>
|
||||
<div class="summary-weight">
|
||||
<span class="icon-purple icon-download summary-icons"></span>
|
||||
<span class="summary-data"> </span>
|
||||
</div>
|
||||
<div class="summary-users">
|
||||
<span class="icon-green icon-user-1 summary-icons"></span>
|
||||
<span class="summary-data"> </span>
|
||||
<div class="user-list">
|
||||
</div>
|
||||
<span class="user-dot icon-green summary-user-item">...</span>
|
||||
</div>
|
||||
<div class="summary-guests">
|
||||
<span class="icon-blue icon-user-secret summary-icons"></span>
|
||||
<span class="summary-data"> </span>
|
||||
<span class="addGuestFilter"> </span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
|
||||
<div class="loading hide">
|
||||
<span class="icon-spin6 animate-spin"> </span>
|
||||
</div>
|
||||
<div class="noResults">
|
||||
{'No results'|@translate}
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="tab-title">
|
||||
<div class="date-title">
|
||||
{'Date'|translate}
|
||||
</div>
|
||||
<div class="user-title">
|
||||
{'User'|translate}
|
||||
</div>
|
||||
<div class="type-title">
|
||||
{'Object'|translate}
|
||||
</div>
|
||||
<div class="detail-title">
|
||||
{'Details'|translate}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{* Used to be copied in js *}
|
||||
<div class="search-line hide" id="-1">
|
||||
<div class="date-section">
|
||||
<i class="date-dwld-icon"> </i>
|
||||
<div class="date-infos">
|
||||
<span class="date-day bold"> July 4th, 2042 </span>
|
||||
<span> at <span class="date-hour">23:59:59</span> </span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="user-section">
|
||||
<span class="user-name bold" title="{'Add as filter'|translate}"> Zac le boss <i class="add-filter icon-plus-circled"></i></span>
|
||||
<span class="user-ip" title="{'Add as filter'|translate}"> 192.168.0.0 <i class="add-filter icon-plus-circled"></i></span>
|
||||
</div>
|
||||
|
||||
<div class="type-section">
|
||||
<a class="type-icon no-img" target="_blank"> <i class="icon-file-image"> </i> </a>
|
||||
<span class="icon-ellipsis-vert toggle-img-option">
|
||||
<div class="img-option">
|
||||
<a class="add-img-as-filter icon-filter"> {'Add as filter'|translate} </a>
|
||||
<a class="edit-img icon-pencil" href="" target="_blank">{'Edit'|@translate}</a>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<div class="type-desc">
|
||||
<span class="type-name bold"> WIP </span>
|
||||
<span class="type-id"> tag #99 </span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="detail-section">
|
||||
<div class="detail-item detail-item-1 hide">
|
||||
detail 1
|
||||
</div>
|
||||
<div class="detail-item detail-item-2 hide">
|
||||
detail 2
|
||||
</div>
|
||||
<div class="detail-item detail-item-3 hide">
|
||||
detail 3
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab">
|
||||
</div>
|
||||
<div class="pagination-container">
|
||||
<div class="pagination-arrow left">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
<div class="pagination-item-container">
|
||||
|
||||
</div>
|
||||
<div class="pagination-arrow rigth">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
|
||||
{combine_script id='jquery.geoip' load='async' path='admin/themes/default/js/jquery.geoip.js'}
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready( function() {
|
||||
jQuery(".IP").one( "mouseenter", function(){
|
||||
var that = $(this);
|
||||
that
|
||||
.data("isOver", true)
|
||||
.one("mouseleave", function() {
|
||||
that.removeData("isOver");
|
||||
});
|
||||
GeoIp.get( that.text(), function(data) {
|
||||
if (!data.fullName) return;
|
||||
|
||||
var content = data.fullName;
|
||||
if (data.latitude && data.region_name) {
|
||||
content += '<br><a class="ipGeoOpen" data-lat="'+data.latitude+'" data-lon="'+data.longitude+'"';
|
||||
content += ' href="#">show on a Google Map</a>';
|
||||
}
|
||||
|
||||
that.tipTip( {
|
||||
content: content,
|
||||
keepAlive: true,
|
||||
defaultPosition: "right",
|
||||
maxWidth: 320,
|
||||
} );
|
||||
if (that.data("isOver"))
|
||||
that.trigger("mouseenter");
|
||||
});
|
||||
} );
|
||||
|
||||
jQuery(document).on('click', '.ipGeoOpen', function() {
|
||||
var lat = jQuery(this).data("lat");
|
||||
var lon = jQuery(this).data("lon");
|
||||
var parent = jQuery(this).parent();
|
||||
jQuery(this).remove();
|
||||
|
||||
var append = '<br><img width=300 height=220 src="http://maps.googleapis.com/maps/api/staticmap';
|
||||
append += '?sensor=false&size=300x220&zoom=6&markers=size:tiny%7C' + lat + ',' + lon + '">';
|
||||
|
||||
jQuery(parent).append(append);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
<style>
|
||||
|
||||
.notClickable {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.no-img {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
.container {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.container,
|
||||
.tab {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tab-title {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.noResults {
|
||||
font-size: 14px;
|
||||
display: none;
|
||||
font-weight: bold;
|
||||
color: #777;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.refresh-results {
|
||||
margin-left: auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.history-filter {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.hasDatepicker {
|
||||
border: solid 1px #D4D4D4;
|
||||
padding: 5px 10px;
|
||||
max-width: 180px;
|
||||
}
|
||||
|
||||
.filter-part {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.filter-part.elem-type label {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.elem-type-select{
|
||||
border: solid 1px #D4D4D4;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.selectable-filter {
|
||||
width: calc(50%-20px);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.selectable-filter label {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.filter-tags {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.filter-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.filter-item {
|
||||
margin: 10px 5px 0 0;
|
||||
white-space: nowrap;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.filter-title {
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.remove-filter {
|
||||
border-bottom-right-radius: 25px;
|
||||
border-top-right-radius: 25px;
|
||||
padding-right: 10px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.remove-filter:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.filter-icon {
|
||||
padding-left: 10px;
|
||||
border-bottom-left-radius: 25px;;
|
||||
border-top-left-radius: 25px;;
|
||||
}
|
||||
|
||||
.user-name, .user-ip {
|
||||
cursor: pointer;
|
||||
max-width: fit-content;
|
||||
}
|
||||
|
||||
.search-line {
|
||||
box-shadow: 0px 2px 4px #00000024;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
height: 80px;
|
||||
|
||||
align-items: center;
|
||||
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.line-icon {
|
||||
padding: 10px;
|
||||
border-radius: 50%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tab-title div {
|
||||
text-align: left;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
|
||||
margin: 0 20px 10px 0px;
|
||||
|
||||
color: #9e9e9e;
|
||||
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.date-title,
|
||||
.date-section {
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.date-title {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.user-title,
|
||||
.user-section {
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.user-title {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.type-title,
|
||||
.type-section {
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.type-title {
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
.detail-title,
|
||||
.detail-section {
|
||||
width: 500px;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.detail-item {
|
||||
margin: 0 10px 0 0;
|
||||
padding: 4px 8px;
|
||||
border-radius: 5px;
|
||||
|
||||
max-width: 130px;
|
||||
height: 20px;
|
||||
|
||||
text-align: center;
|
||||
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
cursor: default;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
.detail-item::before {
|
||||
margin: 0 5px 0 0px;
|
||||
}
|
||||
|
||||
.add-filter {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.user-name:hover .add-filter {
|
||||
display: inline;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.user-ip:hover .add-filter {
|
||||
display: inline;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.user-section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
height: 60%;
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.date-section {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 60%;
|
||||
width: 320px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.date-infos {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: left;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.date-dwld-icon {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.date-dwld-icon::before {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
.detail-section {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.type-section {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
height: 60%;
|
||||
width: 270px;
|
||||
}
|
||||
|
||||
.type-desc {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.type-name {
|
||||
overflow: hidden;
|
||||
max-height: 80px;
|
||||
max-width: 190px;
|
||||
vertical-align: middle;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
||||
.toggle-img-option {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
margin-left: 51px;
|
||||
}
|
||||
|
||||
.toggle-img-option::before{
|
||||
transform: scale(1.3);
|
||||
}
|
||||
|
||||
.img-option {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: linear-gradient(130deg, #ff7700 0%, #ffa744 100%);
|
||||
left: 20px;
|
||||
top: -80%;
|
||||
width: max-content;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.img-option span, .img-option a {
|
||||
padding: 5px 10px;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.img-option:after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 35%;
|
||||
left: -10px;
|
||||
transform: rotate(270deg);
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
border-color: transparent transparent #ff7700 transparent;
|
||||
}
|
||||
|
||||
.img-option a:first-child::before {
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.img-option a:hover:first-child {
|
||||
color: white;
|
||||
background-color: #00000012;
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
|
||||
.img-option a:hover:last-child {
|
||||
color: white;
|
||||
background-color: #00000012;
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
}
|
||||
|
||||
.type-icon img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
/* Summary */
|
||||
|
||||
.search-summary {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.summary-lines,
|
||||
.summary-weight,
|
||||
.summary-users,
|
||||
.summary-guests {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.summary-icons {
|
||||
padding: 10px;
|
||||
border-radius: 50%;
|
||||
margin: 0 5px 0 15px;
|
||||
}
|
||||
|
||||
.summary-lines .summary-icons {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.summary-users {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.summary-user-item {
|
||||
padding: 3px 6px;
|
||||
border-radius: 20px;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.summary-user-item .icon-plus-circled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.summary-user-item:hover .icon-plus-circled {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.summary-user-item:hover .icon-user-1 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.summary-users .summary-data {
|
||||
margin: 0 5px 0 0 !important;
|
||||
}
|
||||
|
||||
.summary-data {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
{* .user-list {
|
||||
margin-right: 10px;
|
||||
} *}
|
||||
|
||||
#start_unset, #end_unset {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#start_unset:hover, #end_unset:hover {
|
||||
color: #ffa500;
|
||||
}
|
||||
|
||||
.loading {
|
||||
font-size: 25px;
|
||||
}
|
||||
@media (min-width: 1600px) {
|
||||
.detail-title,
|
||||
.detail-section {
|
||||
max-width: 500px;
|
||||
}
|
||||
.detail-item {
|
||||
max-width: 170px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,30 @@
|
||||
{if empty($load_mode)}{$load_mode='footer'}{/if}
|
||||
{include file='include/colorbox.inc.tpl' load_mode=$load_mode}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
|
||||
{combine_script id='addAlbum' load=$load_mode path='admin/themes/default/js/addAlbum.js'}
|
||||
|
||||
<div style="display:none">
|
||||
<div id="addAlbumForm">
|
||||
<form>
|
||||
<div class="popinField addAlbumFormParent">
|
||||
<span class="popinFieldLabel">{'Parent album'|@translate}</span>
|
||||
<select name="category_parent"></select>
|
||||
</div>
|
||||
|
||||
<div class="popinField">
|
||||
<span class="popinFieldLabel">{'Album name'|@translate}</span>
|
||||
<input name="category_name" type="text" maxlength="255">
|
||||
<span id="categoryNameError" style="color:red;">{'The name of an album must not be empty'|translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="popinButtons">
|
||||
<input type="submit" value="{'Create'|@translate}" class="albumCreationButton">
|
||||
<span id="albumCreationLoading"><span class="icon-spin6 animate-spin"></span></span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
{if !$smarty.capture.inc_album_selector}
|
||||
{capture name="inc_album_selector"}1{/capture}
|
||||
{if empty($load_mode)}{$load_mode='footer'}{/if}
|
||||
{include file='include/colorbox.inc.tpl' load_mode=$load_mode}
|
||||
{combine_css path="admin/themes/default/css/components/album_selector.css"}
|
||||
{combine_css path="themes/default/vendor/fontello/css/gallery-icon.css" order=-10}
|
||||
{combine_script id='albumSelector' load=$load_mode path='admin/themes/default/js/album_selector.js'}
|
||||
{* {combine_script id='albumSelector' load=$load_mode path='admin/themes/default/js/test-ab.js'} *}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{footer_script}
|
||||
const str_plus_albums_found = "{'Only the first %d albums are displayed, out of %d.'|@translate|escape:javascript}"
|
||||
const str_album_selected = "{'Album already selected'|@translate|escape:javascript}"
|
||||
const str_already_in_related_cats = '{'This albums is already in related categories list'|translate|escape:javascript}';
|
||||
const str_no_search_in_progress = '{'No search in progress'|@translate|escape:javascript}';
|
||||
const str_albums_found = '{"<b>%d</b> albums found"|translate|escape:javascript}';
|
||||
const str_album_found = '{"<b>1</b> album found"|translate|escape:javascript}';
|
||||
const str_result_limit = '{"<b>%d+</b> albums found, try to refine the search"|translate|escape:javascript}';
|
||||
const str_add_subcat_of = '{"Add a sub-album to “%s”"|translate|escape:javascript}';
|
||||
const str_create_and_select = '{"Create and select"|translate|escape:javascript}';
|
||||
const str_root_album_select = '{"Root"|translate|escape:javascript}';
|
||||
const str_complete_name_field = '{"Name field must not be empty"|translate|escape:javascript}';
|
||||
const str_an_error_has_occured = '{"An error has occured"|translate|escape:javascript}';
|
||||
const str_album_modal_title = '{'Select an album'|@translate|escape:javascript}';
|
||||
const str_album_modal_placeholder = '{'Search'|@translate|escape:javascript}';
|
||||
const str_root = '{'Root'|@translate|escape:javascript}';
|
||||
{/footer_script}
|
||||
|
||||
<div id="addLinkedAlbum" class="linkedAlbumPopIn">
|
||||
<div class="linkedAlbumPopInContainer">
|
||||
<a class="gallery-icon-cancel ClosePopIn" id="closeAlbumPopIn"></a>
|
||||
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue gallery-icon-plus-circled"></span>
|
||||
</div>
|
||||
<div class="AddIconTitle">
|
||||
<span id="linkedModalTitle"></span>
|
||||
</div>
|
||||
|
||||
<div class="album-selector" id="linkedAlbumSelector">
|
||||
<label class="head-button-2 put-to-root-container notClickable" id="put-to-root">
|
||||
<p class="icon-home">{'Put at the root'|@translate}</p>
|
||||
</label>
|
||||
<p class="put-to-root-container">{'or'|@translate}</p>
|
||||
|
||||
<div id="linkedAlbumSearch">
|
||||
<span class='icon-search search-icon'> </span>
|
||||
<span class="icon-cancel search-cancel-linked-album" style="display: none;"></span>
|
||||
<input class='search-input' type='text' id="search-input-ab" placeholder="">
|
||||
</div>
|
||||
<div class="limitReached"></div>
|
||||
<div class="noSearch"></div>
|
||||
<div class="searching gallery-icon-spin6 animate-spin"> </div>
|
||||
</div>
|
||||
|
||||
<div id="searchResult">
|
||||
</div>
|
||||
|
||||
<div class="album-create" id="linkedAlbumCreate" style="display: none;">
|
||||
<div class="linked-album-subtitle">
|
||||
<p id="linkedAlbumSubtitle">Add a sub-album of “Album 3”</p>
|
||||
</div>
|
||||
|
||||
<div class="linked-album-input-container album-name">
|
||||
<label class="user-property-label">{'Album name'|@translate}
|
||||
<input class="user-property-input" id="linkedAlbumInput" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="linked-album-input-container">
|
||||
<label class="user-property-label">{'Position'|@translate}
|
||||
<div class="linked-add-radio-input">
|
||||
<input type="radio" id="place-start" name="position" value="first" checked>
|
||||
<label for="place-start">{'Place first'|translate}</label>
|
||||
</div>
|
||||
<div class="linked-add-radio-input">
|
||||
<input type="radio" id="place-end" name="position" value="last">
|
||||
<label for="place-end">{'Place last'|translate}</label>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="AddAlbumErrors">
|
||||
<p class="icon-cancel" id="linkedAddAlbumErrors">omg big big error</p>
|
||||
</div>
|
||||
|
||||
<div class="linked-album-create-btn">
|
||||
<p class="linked-button-cancel" id="linkedAlbumCancel">{'Cancel'|translate}</p>
|
||||
<p class="buttonLike icon-plus" id="linkedAddNewAlbum">{'Create and select'|translate}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="album-switch-bottom" id="linkedAlbumSwitch">
|
||||
<div class="album-switch-container">
|
||||
<div class="switch-input">
|
||||
<label class="switch">
|
||||
<input type="checkbox" name="locked" id="album-create-check" value="true">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<label class="switch-label" for="album-create-check"><span>{'Creation mode'|translate}</span> <i
|
||||
class="icon-help-circled tiptip" style="cursor:help"
|
||||
title="{"Activate create mode to create and select an album"|translate}"></i></label>
|
||||
</div>
|
||||
<p class="head-button-2 icon-plus-circled linked-add-album" id="linkedAddAlbum">
|
||||
{"Create a root album"|translate}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -0,0 +1,9 @@
|
||||
{combine_script id='jquery.autogrow' load='async' require='jquery' path='themes/default/js/plugins/jquery.autogrow-textarea.js'}
|
||||
{* Auto size and auto grow textarea *}
|
||||
{footer_script require='jquery.autogrow'}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery('textarea').css('overflow-y', 'hidden');
|
||||
// Auto size and auto grow for all text area
|
||||
jQuery('textarea').autogrow();
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
+289
@@ -0,0 +1,289 @@
|
||||
{combine_script id='doubleSlider' load='footer' require='jquery.ui.slider' path='admin/themes/default/js/doubleSlider.js'}
|
||||
{combine_script id='jquery.selectize' load='header' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
{combine_script id='jquery.ui.slider' require='jquery.ui' load='async' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{footer_script}
|
||||
<!-- sliders config -->
|
||||
var sliders = {
|
||||
widths: {
|
||||
values: [{$dimensions.widths}],
|
||||
selected: {
|
||||
min: {$dimensions.selected.min_width},
|
||||
max: {$dimensions.selected.max_width},
|
||||
},
|
||||
text: '{'between %d and %d pixels'|translate|escape:'javascript'}'
|
||||
},
|
||||
|
||||
heights: {
|
||||
values: [{$dimensions.heights}],
|
||||
selected: {
|
||||
min: {$dimensions.selected.min_height},
|
||||
max: {$dimensions.selected.max_height},
|
||||
},
|
||||
text: '{'between %d and %d pixels'|translate|escape:'javascript'}'
|
||||
},
|
||||
|
||||
ratios: {
|
||||
values: [{$dimensions.ratios}],
|
||||
selected: {
|
||||
min: {$dimensions.selected.min_ratio},
|
||||
max: {$dimensions.selected.max_ratio},
|
||||
},
|
||||
text: '{'between %.2f and %.2f'|translate|escape:'javascript'}'
|
||||
},
|
||||
|
||||
filesizes: {
|
||||
values: [{$filesize.list}],
|
||||
selected: {
|
||||
min: {$filesize.selected.min},
|
||||
max: {$filesize.selected.max},
|
||||
},
|
||||
text: '{'between %s and %s MB'|translate|escape:'javascript'}'
|
||||
}
|
||||
};
|
||||
{if isset($filter_category_selected) and $filter_category_selected}
|
||||
const selected_filter_cat_ids = ["{$filter_category_selected|@json_encode|escape:html}"];
|
||||
{else}
|
||||
const selected_filter_cat_ids = [];
|
||||
{/if}
|
||||
|
||||
const str_select_album = "{'Select at least one album'|@translate|escape:javascript}";
|
||||
const str_select_tag = "{'Select at least one tag'|@translate|escape:javascript}";
|
||||
let errorFilters = '';
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='batchManagerFilter' load='footer' path='admin/themes/default/js/batchManagerFilter.js'}
|
||||
<fieldset>
|
||||
<legend><span class='icon-filter icon-green'></span>{'Filter'|@translate}</legend>
|
||||
<div class="filterBlock">
|
||||
<ul id="filterList">
|
||||
<li id="filter_prefilter" {if !isset($filter.prefilter)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_prefilter_use" class="useFilterCheckbox" {if isset($filter.prefilter)}checked="checked"{/if}>
|
||||
<p>{'Predefined filter'|@translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
|
||||
<select name="filter_prefilter">
|
||||
{foreach from=$prefilters item=prefilter}
|
||||
{assign 'optionClass' ''}
|
||||
{if $prefilter.ID eq 'no_album'}{assign 'optionClass' 'icon-heart-broken'}{/if}
|
||||
{if $prefilter.ID eq 'caddie'}{assign 'optionClass' 'icon-flag'}{/if}
|
||||
|
||||
<option value="{$prefilter.ID}" class="{$optionClass}" {if isset($filter.prefilter) && $filter.prefilter eq $prefilter.ID}selected="selected"{/if}>{$prefilter.NAME}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<a id="empty_caddie" href="admin.php?page=batch_manager&action=empty_caddie" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'caddie'}display:none{/if}">{'Empty caddie'|translate}</a>
|
||||
{if $NB_ORPHANS > 0}
|
||||
<a id="delete_orphans" href="#" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'no_album'}display:none{/if}" class="icon-trash">{'Delete %d orphan photos'|translate:$NB_ORPHANS}</a>
|
||||
{/if}
|
||||
{if $NB_NO_MD5SUM > 0}
|
||||
<a id="sync_md5sum" href="#" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'no_sync_md5sum'}display:none{/if}" class="icon-arrows-cw">{'Compute %d missing checksums'|translate:{$NB_NO_MD5SUM}}</a>
|
||||
{/if}
|
||||
|
||||
<span id="add_md5sum" style="display:none">
|
||||
<img class="loading" src="themes/default/images/ajax-loader-small.gif">
|
||||
<span id="md5sum_added">0</span>% -
|
||||
<span id="md5sum_to_add" data-origin="{$NB_NO_MD5SUM}">{$NB_NO_MD5SUM}</span>
|
||||
{'checksums to add'|translate}
|
||||
</span>
|
||||
|
||||
<span id="add_md5sum_error" class="errors" style="display:none"></span>
|
||||
|
||||
<span id="orphans_deletion" style="display:none">
|
||||
<img class="loading" src="themes/default/images/ajax-loader-small.gif">
|
||||
<span id="orphans_deleted">0</span>% -
|
||||
<span id="orphans_to_delete" data-origin="{$NB_ORPHANS}">{$NB_ORPHANS}</span>
|
||||
{'orphans to delete'|translate}
|
||||
</span>
|
||||
|
||||
<span id="orphans_deletion_error" class="errors" style="display:none"></span>
|
||||
|
||||
<span id="duplicates_options" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'duplicates'}display:none{/if}">
|
||||
{'based on'|translate}
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="filter_duplicates_filename" {if isset($filter.duplicates_filename)}checked="checked"{/if}> {'file name'|translate}</label>
|
||||
<label class="font-checkbox" title="md5sum"><span class="icon-check"></span><input type="checkbox" name="filter_duplicates_checksum" {if isset($filter.duplicates_checksum)}checked="checked"{/if}> {'checksum'|translate} <i class="icon-help-circled tiptip" title="translated md5sum definition here !"> </i></label>
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="filter_duplicates_date" {if isset($filter.duplicates_date) or (isset($filter.prefilter) and $filter.prefilter ne 'duplicates')}checked="checked"{/if}> {'date & time'|translate}</label>
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="filter_duplicates_dimensions" {if isset($filter.duplicates_dimensions)}checked="checked"{/if}> {'width & height'|translate}</label>
|
||||
</span>
|
||||
</li>
|
||||
{* categories *}
|
||||
<li id="filter_category" {if !isset($filter.category)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_category_use" class="useFilterCheckbox" {if isset($filter.category)}checked="checked"{/if}>
|
||||
<p>{'Album'|@translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
{* <select data-selectize="categories" data-value="{$filter_category_selected|@json_encode|escape:html}"
|
||||
data-default="first" name="filter_category"></select> *}
|
||||
<div id="selectedAlbumFilterArea" {if !$filter_category_selected}style="display: none;"{/if}>
|
||||
<div class="selectedAlbum" id="selectedAlbumFilter">
|
||||
<input type="hidden" name="filter_category" id="filterCategoryValue" value="{$filter_category_selected|@json_encode|escape:html}">
|
||||
<span class="icon-sitemap" id="selectedAlbumNameFilter">{$filter_category_selected_name}</span>
|
||||
<a class="icon-pencil" id="selectedAlbumEditFilter"></a>
|
||||
</div>
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label>
|
||||
</div>
|
||||
<p class="head-button-1" id="selectAlbumFilter" {if $filter_category_selected}style="display: none;"{/if}>
|
||||
{"Select an album"|translate}
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li id="filter_tags" {if !isset($filter.tags)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_tags_use" class="useFilterCheckbox" {if isset($filter.tags)}checked="checked"{/if}>
|
||||
<p>{'Tags'|@translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
<select data-selectize="tags" data-value="{$filter_tags|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="filter_tags[]" multiple style="width:600px;"></select>
|
||||
<label class="font-checkbox"><span class="icon-circle-empty"></span><span><input type="radio" name="tag_mode" value="AND" {if !isset($filter.tag_mode) or $filter.tag_mode eq 'AND'}checked="checked"{/if}> {'All tags'|@translate}</span></label>
|
||||
<label class="font-checkbox"><span class="icon-circle-empty"></span><span><input type="radio" name="tag_mode" value="OR" {if isset($filter.tag_mode) and $filter.tag_mode eq 'OR'}checked="checked"{/if}> {'Any tag'|@translate}</span></label>
|
||||
</li>
|
||||
|
||||
<li id="filter_level" {if !isset($filter.level)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_level_use" class="useFilterCheckbox" {if isset($filter.level)}checked="checked"{/if}>
|
||||
<p>{'Privacy level'|@translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
<select name="filter_level" size="1">
|
||||
{html_options options=$filter_level_options selected=$filter_level_options_selected}
|
||||
</select>
|
||||
<label class="font-checkbox"><span class="icon-check"></span><input type="checkbox" name="filter_level_include_lower" {if isset($filter.level_include_lower)}checked="checked"{/if}> {'include photos with lower privacy level'|@translate}</label>
|
||||
</li>
|
||||
|
||||
<li id="filter_dimension" {if !isset($filter.dimension)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_dimension_use" class="useFilterCheckbox" {if isset($filter.dimension)}checked="checked"{/if}>
|
||||
<p>{'Dimensions'|translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
<blockquote>
|
||||
<div data-slider="widths" class="dimensionSlidersBlocks">
|
||||
<div class="dimensionSlidersTitleButtons">
|
||||
<div>
|
||||
{'Width'|translate} <span class="slider-info">{'between %d and %d pixels'|translate:$dimensions.selected.min_width:$dimensions.selected.max_width}</span>
|
||||
</div>
|
||||
<a class="slider-choice dimension-cancel" data-min="{$dimensions.bounds.min_width}" data-max="{$dimensions.bounds.max_width}">{'Reset'|translate}</a>
|
||||
</div>
|
||||
<div class="slider-slider"></div>
|
||||
|
||||
<input type="hidden" data-input="min" name="filter_dimension_min_width" value="{$dimensions.selected.min_width}">
|
||||
<input type="hidden" data-input="max" name="filter_dimension_max_width" value="{$dimensions.selected.max_width}">
|
||||
</div>
|
||||
|
||||
<div data-slider="heights" class="dimensionSlidersBlocks">
|
||||
<div class="dimensionSlidersTitleButtons">
|
||||
<div>
|
||||
{'Height'|translate} <span class="slider-info">{'between %d and %d pixels'|translate:$dimensions.selected.min_height:$dimensions.selected.max_height}</span>
|
||||
</div>
|
||||
<a class="slider-choice dimension-cancel" data-min="{$dimensions.bounds.min_height}" data-max="{$dimensions.bounds.max_height}">{'Reset'|translate}</a>
|
||||
</div>
|
||||
<div class="slider-slider"></div>
|
||||
|
||||
<input type="hidden" data-input="min" name="filter_dimension_min_height" value="{$dimensions.selected.min_height}">
|
||||
<input type="hidden" data-input="max" name="filter_dimension_max_height" value="{$dimensions.selected.max_height}">
|
||||
</div>
|
||||
|
||||
<div data-slider="ratios" class="dimensionSlidersBlocks">
|
||||
<div style="margin-bottom: 11px;">
|
||||
<span>{'Ratio'|translate} ({'Width'|@translate}/{'Height'|@translate})</span>
|
||||
<span class="slider-info">{'between %.2f and %.2f'|translate:$dimensions.selected.min_ratio:$dimensions.selected.max_ratio}</span>
|
||||
</div>
|
||||
<div class="dimensionSlidersRatioButtons">
|
||||
<div>
|
||||
{if isset($dimensions.ratio_portrait)} <a class="slider-choice" data-min="{$dimensions.ratio_portrait.min}" data-max="{$dimensions.ratio_portrait.max}">{'Portrait'|translate}</a>{/if}
|
||||
{if isset($dimensions.ratio_square)} <a class="slider-choice" data-min="{$dimensions.ratio_square.min}" data-max="
|
||||
{$dimensions.ratio_square.max}">{'square'|translate}</a>{/if}
|
||||
{if isset($dimensions.ratio_landscape)} <a class="slider-choice" data-min="{$dimensions.ratio_landscape.min}" data-max="{$dimensions.ratio_landscape.max}">{'Landscape'|translate}</a>{/if}
|
||||
{if isset($dimensions.ratio_panorama)} <a class="slider-choice" data-min="{$dimensions.ratio_panorama.min}" data-max="{$dimensions.ratio_panorama.max}">{'Panorama'|translate}</a>{/if}
|
||||
</div>
|
||||
<div>
|
||||
<a class="slider-choice dimension-cancel" data-min="{$dimensions.bounds.min_ratio}" data-max="{$dimensions.bounds.max_ratio}">{'Reset'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="slider-slider"></div>
|
||||
|
||||
<input type="hidden" data-input="min" name="filter_dimension_min_ratio" value="{$dimensions.selected.min_ratio}">
|
||||
<input type="hidden" data-input="max" name="filter_dimension_max_ratio" value="{$dimensions.selected.max_ratio}">
|
||||
</div>
|
||||
</blockquote>
|
||||
</li>
|
||||
|
||||
<li id="filter_search"{if !isset($filter.search)} style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_search_use" class="useFilterCheckbox"{if isset($filter.search)} checked="checked"{/if}>
|
||||
<p>{'Search'|@translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
<input name="q" size=40 value="{if isset($filter.search)} {$filter.search.q|stripslashes|htmlspecialchars}{/if}">
|
||||
<p title="{'Help'|@translate}" class="help-popin-search">
|
||||
<i class="icon-help-circled"></i>
|
||||
<span>{'Search tips'|translate}</span>
|
||||
</p>
|
||||
{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
|
||||
{if (isset($no_search_results))}
|
||||
<div>{'No results for'|@translate} :
|
||||
<em><strong>
|
||||
{foreach $no_search_results as $res}
|
||||
{if !$res@first} — {/if}
|
||||
{$res}
|
||||
{/foreach}
|
||||
</strong></em>
|
||||
</div>
|
||||
{/if}
|
||||
</li>
|
||||
|
||||
<li id="filter_filesize" {if !isset($filter.filesize)}style="display:none"{/if}>
|
||||
<input type="checkbox" name="filter_filesize_use" class="useFilterCheckbox" {if isset($filter.filesize)}checked="checked"{/if}>
|
||||
<p>{'Filesize'|translate}</p>
|
||||
<a href="#" class="removeFilter" title="{'remove this filter'|translate}"><span>[x]</span></a>
|
||||
<blockquote>
|
||||
<div data-slider="filesizes">
|
||||
<span class="slider-info">{'between %s and %s MB'|translate:$filesize.selected.min:$filesize.selected.max}</span>
|
||||
<a class="slider-choice dimension-cancel" data-min="{$filesize.bounds.min}" data-max="{$filesize.bounds.max}">{'Reset'|translate}</a>
|
||||
<div class="slider-slider"></div>
|
||||
|
||||
<input type="hidden" data-input="min" name="filter_filesize_min" value="{$filesize.selected.min}">
|
||||
<input type="hidden" data-input="max" name="filter_filesize_max" value="{$filesize.selected.max}">
|
||||
</div>
|
||||
</blockquote>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class='noFilter'>{'No filter, add one'|@translate}</div>
|
||||
|
||||
<div class="filterActions">
|
||||
<div id="addFilter">
|
||||
<div class="addFilter-button icon-plus" onclick="$('.addFilter-dropdown').slideToggle()">{'Add a filter'|@translate}</div>
|
||||
<div class="addFilter-dropdown">
|
||||
<a data-value="filter_prefilter" {if isset($filter.prefilter)}class="disabled"{/if}>{'Predefined filter'|@translate}</a>
|
||||
<a data-value="filter_category" {if isset($filter.category)}class="disabled"{/if}>{'Album'|@translate}</a>
|
||||
<a data-value="filter_tags" {if isset($filter.tags)}class="disabled"{/if}>{'Tags'|@translate}</a>
|
||||
<a data-value="filter_level" {if isset($filter.level)}class="disabled"{/if}>{'Privacy level'|@translate}</a>
|
||||
<a data-value="filter_dimension" {if isset($filter.dimension)}class="disabled"{/if}>{'Dimensions'|@translate}</a>
|
||||
<a data-value="filter_filesize" {if isset($filter.filesize)}class="disabled"{/if}>{'Filesize'|@translate}</a>
|
||||
<a data-value="filter_search"{if isset($filter.search)} class="disabled"{/if}>{'Search'|@translate}</a>
|
||||
</div>
|
||||
<a id="removeFilters" class="icon-cancel" style="display: none;">{'Remove all filters'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<button id="applyFilter" name="submitFilter" type="submit">
|
||||
<i class="icon-arrows-cw"></i> {'Refresh photo set'|@translate}
|
||||
</button>
|
||||
|
||||
<div id="errorFilter" class="icon-red-error" style="display: none; margin-left: 10px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="bg-modal" id="modalQuickSearch">
|
||||
<div class="modal-content">
|
||||
<a class="icon-cancel close-modal" id="closeModalQuickSearch"></a>
|
||||
|
||||
<div class="quick-search-content">
|
||||
<div class="quick-search-header">
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue icon-search"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="quick-search-syntax">
|
||||
{assign var=is_dark_mode value=$themeconf.colorscheme == 'dark'}
|
||||
{include file='themes/default/template/help/quick_search.tpl' dark_mode=$is_dark_mode}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
@@ -0,0 +1,3 @@
|
||||
{if empty($load_mode)}{$load_mode='footer'}{/if}
|
||||
{combine_script id='jquery.colorbox' load=$load_mode require='jquery' path='themes/default/js/plugins/jquery.colorbox.min.js'}
|
||||
{combine_css id='jquery.colorbox' path="themes/default/js/plugins/colorbox/style2/colorbox.css"}
|
||||
@@ -0,0 +1,22 @@
|
||||
{if empty($load_mode)}{$load_mode='footer'}{/if}
|
||||
{combine_script id='jquery.ui.timepicker-addon' load=$load_mode require='jquery.ui.datepicker,jquery.ui.slider' path="themes/default/js/ui/jquery.ui.timepicker-addon.js"}
|
||||
|
||||
{$require='jquery.ui.timepicker-addon'}
|
||||
{assign var="datepicker_language" value="themes/default/js/ui/i18n/jquery.ui.datepicker-`$lang_info.jquery_code`.js"}
|
||||
{if "PHPWG_ROOT_PATH"|@constant|@cat:$datepicker_language|@file_exists}
|
||||
{combine_script id="jquery.ui.datepicker-`$lang_info.jquery_code`" load=$load_mode require='jquery.ui.datepicker' path=$datepicker_language}
|
||||
{$require=$require|cat:",jquery.ui.datepicker-`$lang_info.jquery_code`"}
|
||||
{/if}
|
||||
|
||||
{assign var="timepicker_language" value="themes/default/js/ui/i18n/jquery.ui.timepicker-`$lang_info.jquery_code`.js"}
|
||||
{if "PHPWG_ROOT_PATH"|@constant|@cat:$datepicker_language|@file_exists}
|
||||
{combine_script id="jquery.ui.timepicker-`$lang_info.jquery_code`" load=$load_mode require='jquery.ui.timepicker-addon' path=$timepicker_language}
|
||||
{$require=$require|cat:",jquery.ui.timepicker-`$lang_info.jquery_code`"}
|
||||
{/if}
|
||||
|
||||
{combine_script id='datepicker' load=$load_mode require=$require path='admin/themes/default/js/datepicker.js'}
|
||||
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.theme.css"}
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.datepicker.css"}
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.timepicker-addon.css"}
|
||||
@@ -0,0 +1,19 @@
|
||||
<script type="text/javascript" src="template-common/lib/jquery.packed.js"></script>
|
||||
{literal}
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$option_selected = $('#dblayer option:selected').attr('value');
|
||||
if ($option_selected=='sqlite' || $option_selected=='pdo-sqlite') {
|
||||
$('input[name=dbhost],input[name=dbuser],input[name=dbpasswd]').parent().parent().hide();
|
||||
}
|
||||
$('#dblayer').change(function() {
|
||||
$db = this;
|
||||
if ($db.value=='sqlite' || $db.value=='pdo-sqlite') {
|
||||
$('input[name=dbhost],input[name=dbuser],input[name=dbpasswd]').parent().parent().hide();
|
||||
} else {
|
||||
$('input[name=dbhost],input[name=dbuser],input[name=dbpasswd]').parent().parent().show();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
@@ -0,0 +1,312 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{$lang_info.code}" dir="{$lang_info.direction}">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={$T_CONTENT_ENCODING}">
|
||||
<meta http-equiv="Content-script-type" content="text/javascript">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{$ROOT_URL}{$themeconf.icon_dir}/favicon.ico">
|
||||
|
||||
{get_combined_css}
|
||||
{foreach from=$themes item=theme}
|
||||
{if $theme.load_css}
|
||||
{combine_css path="admin/themes/`$theme.id`/theme.css" order=-10}
|
||||
{/if}
|
||||
{/foreach}
|
||||
|
||||
<!--[if IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/fix-ie7.css">
|
||||
<![endif]-->
|
||||
|
||||
<!-- BEGIN get_combined_scripts -->
|
||||
{get_combined_scripts load='header'}
|
||||
<!-- END get_combined_scripts -->
|
||||
|
||||
{combine_script id='jquery' path='themes/default/js/jquery.min.js'}
|
||||
{literal}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$("a.externalLink").click(function() {
|
||||
window.open($(this).attr("href"));
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#admin_mail").keyup(function() {
|
||||
$(".adminEmail").text($(this).val());
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style type="text/css">
|
||||
body {
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
#content {
|
||||
width: 800px;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding:0;
|
||||
background-color:transparent !important;
|
||||
border:none;
|
||||
}
|
||||
|
||||
#theHeader {
|
||||
display: block;
|
||||
background:url("admin/themes/default/images/piwigo-orange.svg") no-repeat scroll center 20px transparent;
|
||||
height:100px;
|
||||
background-size: 300px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
margin-top:20px;
|
||||
background-color:#f1f1f1;
|
||||
}
|
||||
|
||||
legend {
|
||||
font-weight:bold;
|
||||
letter-spacing:2px;
|
||||
}
|
||||
|
||||
.content h2 {
|
||||
display:block;
|
||||
font-size:20px;
|
||||
text-align:center;
|
||||
/* margin-top:5px; */
|
||||
}
|
||||
|
||||
table.table2 {
|
||||
width: 100%;
|
||||
border:0;
|
||||
}
|
||||
|
||||
table.table2 td {
|
||||
text-align: left;
|
||||
padding: 5px 2px;
|
||||
}
|
||||
|
||||
table.table2 td.fieldname {
|
||||
font-weight:normal;
|
||||
}
|
||||
|
||||
table.table2 td.fielddesc {
|
||||
padding-left:10px;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
input[type="submit"], input[type="button"], a.bigButton {
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
letter-spacing:2px;
|
||||
border:none;
|
||||
background-color:#666666;
|
||||
color:#fff;
|
||||
padding:5px;
|
||||
-moz-border-radius:5px;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px;
|
||||
}
|
||||
|
||||
input[type="submit"]:hover, input[type="button"]:hover, a.bigButton:hover {
|
||||
background-color:#ff7700;
|
||||
color:white;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], select {
|
||||
background-color:#ddd;
|
||||
border:2px solid #ccc;
|
||||
-moz-border-radius:5px;
|
||||
-webkit-border-radius:5px;
|
||||
border-radius:5px;
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
input[type="text"]:focus, input[type="password"]:focus, select:focus {
|
||||
background-color:#fff;
|
||||
border:2px solid #ff7700;
|
||||
}
|
||||
|
||||
.sql_content, .infos a {
|
||||
color: #ff3363;
|
||||
}
|
||||
|
||||
.errors {
|
||||
padding-bottom:5px;
|
||||
}
|
||||
|
||||
</style>
|
||||
{/literal}
|
||||
|
||||
{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.js'}
|
||||
|
||||
{footer_script require='jquery.cluetip'}
|
||||
jQuery().ready(function(){ldelim}
|
||||
jQuery('.cluetip').cluetip({ldelim}
|
||||
width: 300,
|
||||
splitTitle: '|',
|
||||
positionBy: 'bottomTop'
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
|
||||
<title>Piwigo {$RELEASE} - {'Installation'|@translate}</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="the_page">
|
||||
<div id="theHeader"></div>
|
||||
<div id="content" class="content">
|
||||
|
||||
<h2>{'Version'|@translate} {$RELEASE} - {'Installation'|@translate}</h2>
|
||||
|
||||
{if isset($config_creation_failed)}
|
||||
<div class="errors">
|
||||
<p style="margin-left:30px;">
|
||||
<strong>{'Creation of config file local/config/database.inc.php failed.'|@translate}</strong>
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>{'You can download the config file and upload it to local/config directory of your installation.'|@translate}</p>
|
||||
<p style="text-align:center">
|
||||
<input type="button" value="{'Download the config file'|@translate}" onClick="window.open('{$config_url}');">
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>{'An alternate solution is to copy the text in the box above and paste it into the file "local/config/database.inc.php" (Warning : database.inc.php must only contain what is in the textarea, no line return or space character)'|@translate}</p>
|
||||
<textarea rows="15" cols="70">{$config_file_content}</textarea>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($errors)}
|
||||
<div class="errors">
|
||||
<ul>
|
||||
{foreach from=$errors item=error}
|
||||
<li>{$error}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($infos)}
|
||||
<div class="infos">
|
||||
<ul>
|
||||
{foreach from=$infos item=info}
|
||||
<li>{$info}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($install)}
|
||||
<form method="POST" action="{$F_ACTION}" name="install_form">
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Basic configuration'|@translate}</legend>
|
||||
|
||||
<table class="table2">
|
||||
<tr>
|
||||
<td style="width: 30%">{'Default gallery language'|@translate}</td>
|
||||
<td>
|
||||
<select name="language" onchange="document.location = 'install.php?language='+this.options[this.selectedIndex].value;">
|
||||
{html_options options=$language_options selected=$language_selection}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Database configuration'|@translate}</legend>
|
||||
|
||||
<table class="table2">
|
||||
<tr>
|
||||
<td style="width: 30%;" class="fieldname">{'Host'|@translate}</td>
|
||||
<td><input type="text" name="dbhost" value="{$F_DB_HOST}" required></td>
|
||||
<td class="fielddesc">{'localhost or other, supplied by your host provider'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'User'|@translate}</td>
|
||||
<td><input type="text" name="dbuser" value="{$F_DB_USER}" required></td>
|
||||
<td class="fielddesc">{'user login given by your host provider'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Password'|@translate}</td>
|
||||
<td><input type="password" name="dbpasswd" value=""></td>
|
||||
<td class="fielddesc">{'user password given by your host provider'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Database name'|@translate}</td>
|
||||
<td><input type="text" name="dbname" value="{$F_DB_NAME}" required></td>
|
||||
<td class="fielddesc">{'also given by your host provider'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Database table prefix'|@translate}</td>
|
||||
<td><input type="text" name="prefix" value="{$F_DB_PREFIX}"></td>
|
||||
<td class="fielddesc">{'database tables names will be prefixed with it (enables you to manage better your tables)'|@translate}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{'Admin configuration'|@translate}</legend>
|
||||
|
||||
<table class="table2">
|
||||
<tr>
|
||||
<td style="width: 30%;" class="fieldname">{'Username'|@translate}</td>
|
||||
<td><input type="text" name="admin_name" value="{$F_ADMIN}" required></td>
|
||||
<td class="fielddesc">{'It will be shown to the visitors. It is necessary for website administration'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Password'|@translate}</td>
|
||||
<td><input type="password" name="admin_pass1" value="" required></td>
|
||||
<td class="fielddesc">{'Keep it confidential, it enables you to access administration panel'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Password [confirm]'|@translate}</td>
|
||||
<td><input type="password" name="admin_pass2" value="" required></td>
|
||||
<td class="fielddesc">{'verification'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="fieldname">{'Email address'|@translate}</td>
|
||||
<td><input type="text" name="admin_mail" id="admin_mail" value="{$F_ADMIN_EMAIL}" required></td>
|
||||
<td class="fielddesc">{'Visitors will be able to contact site administrator with this mail'|@translate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{'Options'|@translate}</options>
|
||||
<td colspan="2">
|
||||
<label>
|
||||
<input type="checkbox" name="newsletter_subscribe"{if $F_NEWSLETTER_SUBSCRIBE} checked="checked"{/if}>
|
||||
<span class="cluetip" title="{'Piwigo Announcements Newsletter'|@translate}|{'Keep in touch with Piwigo project, subscribe to Piwigo Announcement Newsletter. You will receive emails when a new release is available (sometimes including a security bug fix, it\'s important to know and upgrade) and when major events happen to the project. Only a few emails a year.'|@translate|@htmlspecialchars|@nl2br}">{'Subscribe %s to Piwigo Announcements Newsletter'|@translate:$EMAIL}</span>
|
||||
</label>
|
||||
<br>
|
||||
<label>
|
||||
<input type="checkbox" name="send_credentials_by_mail" checked="checked">
|
||||
{'Send my connection settings by email'|@translate}
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<div style="text-align:center; margin:20px 0 10px 0">
|
||||
<input class="submit" type="submit" name="install" value="{'Start Install'|@translate}">
|
||||
</div>
|
||||
</form>
|
||||
{else}
|
||||
<p>
|
||||
<a class="bigButton" href="index.php">{'Visit Gallery'|@translate}</a>
|
||||
</p>
|
||||
{/if}
|
||||
</div> {* content *}
|
||||
<div style="text-align: center">{$L_INSTALL_HELP}</div>
|
||||
</div> {* the_page *}
|
||||
|
||||
<!-- BEGIN get_combined_scripts -->
|
||||
{get_combined_scripts load='footer'}
|
||||
<!-- END get_combined_scripts -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,280 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.js'}
|
||||
|
||||
{footer_script require='jquery.cluetip'}
|
||||
var piwigo_need_update_msg = '<a href="admin.php?page=updates">{'A new version of Piwigo is available.'|@translate|@escape:"javascript"} <i class="icon-right"></i></a>';
|
||||
var ext_need_update_msg = '<a href="admin.php?page=updates&tab=ext">{'Some upgrades are available for extensions.'|@translate|@escape:"javascript"} <i class="icon-right"></i></a>';
|
||||
const str_gb_used = "{'%s GB used'|translate}";
|
||||
const str_mb_used = "{'%s MB used'|translate}";
|
||||
const str_gb = "{'%sGB'|translate}".replace(' ', ' ');
|
||||
const str_mb = "{'%sMB'|translate}".replace(' ', ' ');
|
||||
const storage_total = {$STORAGE_TOTAL};
|
||||
const storage_details = {$STORAGE_CHART_DATA|json_encode};
|
||||
const translate_files = "{'%d files'|translate|escape:javascript}";
|
||||
let translate_type = {};
|
||||
{if isset($SUBSCRIBE_BASE_URL)}
|
||||
const newsletter_base_url = "{$SUBSCRIBE_BASE_URL}";
|
||||
{/if}
|
||||
{literal}
|
||||
jQuery().ready(function(){
|
||||
jQuery('.cluetip').cluetip({
|
||||
width: 300,
|
||||
splitTitle: '|',
|
||||
positionBy: 'bottomTop'
|
||||
});
|
||||
{/literal}
|
||||
{if $CHECK_FOR_UPDATES}
|
||||
jQuery.ajax({
|
||||
type: 'GET',
|
||||
url: 'ws.php',
|
||||
dataType: 'json',
|
||||
data: { method: 'pwg.extensions.checkUpdates', format: 'json' },
|
||||
timeout: 5000,
|
||||
success: function (data) {
|
||||
if (data['stat'] != 'ok')
|
||||
return;
|
||||
piwigo_update = data['result']['piwigo_need_update'];
|
||||
ext_update = data['result']['ext_need_update']
|
||||
if ((piwigo_update || ext_update) && !jQuery(".warnings").is('div'))
|
||||
jQuery(".eiw").prepend('<div class="warnings"><i class="eiw-icon icon-attention"></i><ul></ul></div>');
|
||||
if (piwigo_update)
|
||||
jQuery(".warnings ul").append('<li>'+piwigo_need_update_msg+'</li>');
|
||||
if (ext_update)
|
||||
jQuery(".warnings ul").append('<li>'+ext_need_update_msg+'</li>');
|
||||
}
|
||||
});
|
||||
{/if}
|
||||
|
||||
{if isset($SUBSCRIBE_BASE_URL)}
|
||||
jQuery(".eiw").prepend(`
|
||||
<div class="promote-newsletter">
|
||||
<div class="promote-content">
|
||||
|
||||
<img class="promote-image" src="admin/themes/default/images/promote-newsletter.png">
|
||||
|
||||
<div class="promote-newsletter-content">
|
||||
<span class="promote-newsletter-title">{"Subscribe to our newsletter and stay updated!"|@translate|escape:javascript}</span>
|
||||
<div class="promote-content subscribe-newsletter">
|
||||
<input type="text" id="newsletterSubscribeInput" value="{$EMAIL}" class="left-side">
|
||||
<a href="{$SUBSCRIBE_BASE_URL}{$EMAIL}" id="newsletterSubscribeLink" class="right-side go-to-porg icon-thumbs-up newsletter-hide">{"Sign up to the newsletter"|@translate|escape:javascript}</a>
|
||||
</div>
|
||||
<a href="{$OLD_NEWSLETTERS_URL}" class="promote-link">{"See previous newsletters"|@translate|escape:javascript}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<a href="#" class="dont-show-again icon-cancel tiptip newsletter-hide" title="{'Understood, do not show again'|translate|escape:javascript}"></a>
|
||||
</div>`);
|
||||
|
||||
{/if}
|
||||
|
||||
{literal}
|
||||
|
||||
jQuery("#newsletterSubscribeInput").change(function(){
|
||||
jQuery("#newsletterSubscribeLink").attr("href", newsletter_base_url + jQuery("#newsletterSubscribeInput").val())
|
||||
})
|
||||
|
||||
jQuery('.newsletter-hide').click(function() {
|
||||
jQuery('.promote-newsletter').hide();
|
||||
|
||||
jQuery.ajax({
|
||||
type: 'GET',
|
||||
url: 'admin.php?action=hide_newsletter_subscription'
|
||||
});
|
||||
|
||||
if (jQuery(this).hasClass('newsletter-hide')) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
let size_info = storage_total > 1000000 ? str_gb_used : str_mb_used;
|
||||
let size_nb = storage_total > 1000000 ? (storage_total / 1000000).toFixed(2) : (storage_total / 1000).toFixed(0);
|
||||
$(".chart-title-infos").html(size_info.replace("%s", size_nb));
|
||||
});
|
||||
{/literal}
|
||||
{foreach from=$STORAGE_CHART_DATA key=type_to_translate item=details}
|
||||
translate_type['{$type_to_translate}'] = "{$type_to_translate|translate}";
|
||||
{/foreach}
|
||||
{/footer_script}
|
||||
{combine_script id='intro_tooltips' load='footer' path='admin/themes/default/js/intro_tooltips.js'}
|
||||
|
||||
{html_style}
|
||||
.eiw .messages ul li {
|
||||
list-style-type:none !important;
|
||||
}
|
||||
|
||||
.eiw .messages .eiw-icon {
|
||||
margin-right:10px !important;
|
||||
}
|
||||
{/html_style}
|
||||
|
||||
<h2>{'Piwigo Administration'|@translate}</h2>
|
||||
|
||||
<div class="intro-page-container">
|
||||
<div class="stat-boxes">
|
||||
|
||||
{if $NB_PHOTOS > 1}
|
||||
<a class="stat-box" href="{$U_ADD_PHOTOS}">
|
||||
<i class="icon-picture icon-yellow"></i>
|
||||
<span class="number">{$NB_PHOTOS|number_format}</span><span class="caption">{'Photos'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_ALBUMS > 1}
|
||||
<a class="stat-box" href="{$U_ALBUMS}">
|
||||
<i class="icon-sitemap icon-red"></i>
|
||||
<span class="number">{$NB_ALBUMS}</span><span class="caption">{'Albums'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_TAGS > 1}
|
||||
<a class="stat-box" href="{$U_TAGS}">
|
||||
<i class="icon-tags icon-yellow"></i>
|
||||
<span class="number">{$NB_TAGS}</span><span class="caption" title="{'%d associations'|translate:$NB_IMAGE_TAG}">{'Tags'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_USERS > 2}
|
||||
<a class="stat-box" href="{$U_USERS}">
|
||||
<i class="icon-users icon-purple"></i>
|
||||
{* -1 because we don't count the "guest" user *}
|
||||
<span class="number">{$NB_USERS - 1}</span><span class="caption">{'Users'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_GROUPS > 0}
|
||||
<a class="stat-box" href="{$U_GROUPS}">
|
||||
<i class="icon-group icon-purple"></i>
|
||||
<span class="number">{$NB_GROUPS}</span><span class="caption">{'Groups'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_COMMENTS > 1}
|
||||
<a class="stat-box" href="{$U_COMMENTS}">
|
||||
<i class="icon-chat icon-blue"></i>
|
||||
<span class="number">{$NB_COMMENTS}</span><span class="caption">{'Comments'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_RATES > 0}
|
||||
<a class="stat-box" href="{$U_RATING}">
|
||||
<i class="icon-star icon-yellow"></i>
|
||||
<span class="number">{$NB_RATES}</span><span class="caption">{'Rating'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_VIEWS > 0}
|
||||
<a class="stat-box" href="{$U_HISTORY_STAT}">
|
||||
<i class="icon-signal icon-blue"></i>
|
||||
<span class="number">{$NB_VIEWS}</span><span class="caption">{'Pages seen'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{if $NB_PLUGINS > 0}
|
||||
<a class="stat-box" href="{$U_PLUGINS}">
|
||||
<i class="icon-puzzle icon-green"></i>
|
||||
<span class="number">{$NB_PLUGINS}</span><span class="caption">{'Plugins'|translate}</span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
<div class="stat-box">
|
||||
<i class="icon-hdd icon-blue"></i>
|
||||
<span class="number">{$STORAGE_USED}</span><span class="caption">{'Storage used'|translate}</span>
|
||||
</div>
|
||||
|
||||
</div> {* .stat-boxes *}
|
||||
|
||||
<div class="intro-charts">
|
||||
|
||||
<div class="chart-title"> {"Activity peak in the last weeks"|@translate}</div>
|
||||
<div class="activity-chart" style="grid-template-rows: repeat({count($ACTIVITY_CHART_DATA) + 1}, 5vw);">
|
||||
{foreach from=$ACTIVITY_CHART_DATA item=WEEK_ACTIVITY key=WEEK_NUMBER}
|
||||
<div id="week-{$WEEK_NUMBER}-legend" class="row-legend"><div>{'Week %d'|@translate:$ACTIVITY_WEEK_NUMBER[$WEEK_NUMBER]}</div></div>
|
||||
{foreach from=$WEEK_ACTIVITY item=SIZE key=DAY_NUMBER}
|
||||
<span class="activity_tooltips">
|
||||
{if $SIZE != 0}
|
||||
{assign var='SIZE_IN_UNIT' value=$SIZE/$ACTIVITY_CHART_NUMBER_SIZES * 5 + 1}
|
||||
{assign var='OPACITY_IN_UNIT' value=$SIZE/$ACTIVITY_CHART_NUMBER_SIZES * 0.6 + 0.2}
|
||||
<div id="day{$WEEK_NUMBER}-{$DAY_NUMBER}" style="height:{$SIZE_IN_UNIT}vw;width:{$SIZE_IN_UNIT}vw;"></div>
|
||||
{if $ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["number"] != 0}
|
||||
<p class="tooltip" style="transform: translate(-50%,{$SIZE_IN_UNIT/2}vw);">
|
||||
<span class="tooltip-arrow"></span>
|
||||
<span class="tooltip-header">
|
||||
<span class="tooltip-title">{if $ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["number"] > 1}{'%d Activities'|translate:$ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["number"]}{else}{'%d Activity'|translate:$ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["number"]}{/if}</span>
|
||||
<span class="tooltip-date">{$ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["date"]}</span>
|
||||
</span>
|
||||
<span class="tooltip-details">
|
||||
{foreach from=$ACTIVITY_LAST_WEEKS[$WEEK_NUMBER][$DAY_NUMBER]["details"] item=actions key=cat}
|
||||
<span class="tooltip-details-cont">
|
||||
{if $cat == "Group"} <span class="icon-group icon-purple tooltip-details-title">{$cat|translate}</span>
|
||||
{elseif $cat == "User"} <span class="icon-users icon-purple tooltip-details-title"> {$cat|translate}</span>
|
||||
{elseif $cat == "Album"} <span class="icon-sitemap icon-red tooltip-details-title">{$cat|translate}</span>
|
||||
{elseif $cat == "Photo"} <span class="icon-picture icon-yellow tooltip-details-title">{$cat|translate} </span>
|
||||
{elseif $cat == "Tag"} <span class="icon-tags icon-green tooltip-details-title">{$cat|translate} </span>
|
||||
{else} <span class="tooltip-details-title"> {$cat|translate} </span> {/if}
|
||||
|
||||
{foreach from=$actions item=number key=action}
|
||||
{if $action == "Edit"} <span class="icon-pencil tooltip-detail" title="{"%s editions"|@translate:$number}">{$number}</span>
|
||||
{elseif $action == "Add"} <span class="icon-plus tooltip-detail" title="{"%s additions"|@translate:$number}">{$number}</span>
|
||||
{elseif $action == "Delete"} <span class="icon-trash tooltip-detail" title="{"%s deletions"|@translate:$number}">{$number}</span>
|
||||
{elseif $action == "Login"} <span class="icon-key tooltip-detail" title="{"%s login"|@translate:$number}">{$number}</span>
|
||||
{elseif $action == "Logout"} <span class="icon-logout tooltip-detail" title="{"%s logout"|@translate:$number}">{$number} </span>
|
||||
{elseif $action == "Move"} <span class="icon-move tooltip-detail" title="{"%s movement"|@translate:$number}">{$number} </span>
|
||||
{else} <span> ({$action|translate}) {$number} </span>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</span>
|
||||
{/foreach}
|
||||
</p>
|
||||
{/if}
|
||||
{/if}
|
||||
</span>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
<div></div>
|
||||
{foreach from=$DAY_LABELS item=day}
|
||||
<div class="col-legend">{$day} <div class="line-vertical" style="height: {count($ACTIVITY_CHART_DATA)*100 - 50}%;"></div></div>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<div id="chart-title-storage" class="chart-title"> {'Storage'|translate} <span class="chart-title-infos"> {'%s MB used'|translate:(round($STORAGE_TOTAL/1000, 0))} </span></div>
|
||||
|
||||
<div class="storage-chart">
|
||||
{foreach from=$STORAGE_CHART_DATA key=type item=details}
|
||||
<span data-type="storage-{$type}" style="width:{$details.total.filesize/$STORAGE_TOTAL*100}%">
|
||||
<p>{round($details.total.filesize/$STORAGE_TOTAL*100)}%</p>
|
||||
</span>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<div class="storage-tooltips">
|
||||
{foreach from=$STORAGE_CHART_DATA key=type item=value}
|
||||
<p id="storage-{$type}" class="tooltip">
|
||||
<span class="tooltip-arrow"></span>
|
||||
<span class="tooltip-header">
|
||||
<span id="storage-title-{$type}" class="tooltip-title"></span>
|
||||
<span id="storage-size-{$type}" class="tooltip-size"></span>
|
||||
<span id="storage-files-{$type}" class="tooltip-files"></span>
|
||||
</span>
|
||||
<span class="separated"></span>
|
||||
<span id="storage-detail-{$type}" class="tooltip-details"></span>
|
||||
</p>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
<div class="storage-chart-legend">
|
||||
{foreach from=$STORAGE_CHART_DATA item=i key=type}
|
||||
<div><span></span> <p>{$type|translate}</p></div>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div> {* .intro-chart *}
|
||||
|
||||
</div> {* .intro-page-container *}
|
||||
|
||||
<p class="showCreateAlbum">
|
||||
{if $ENABLE_SYNCHRONIZATION}
|
||||
<a href="{$U_QUICK_SYNC}" class="icon-exchange">{'Quick Local Synchronization'|translate}</a>
|
||||
{/if}
|
||||
|
||||
|
||||
</p>
|
||||
@@ -0,0 +1,63 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
$(".delete-lang-button").each(function() {
|
||||
let title_msg = '{'Are you sure you want to delete the language "%s"?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = '{"No, I have changed my mind"|@translate|@escape:'javascript'}';
|
||||
let lang_name = $(this).closest(".languageBox").find('.languageName').html();
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title_msg.replace("%s", lang_name),
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{foreach from=$language_states item=language_state}
|
||||
<fieldset>
|
||||
<legend>
|
||||
{if $language_state == 'active'}
|
||||
{'Active Languages'|@translate}
|
||||
|
||||
{elseif $language_state == 'inactive'}
|
||||
{'Inactive Languages'|@translate}
|
||||
|
||||
{/if}
|
||||
</legend>
|
||||
<div class="languageBoxes">
|
||||
{foreach from=$languages item=language}
|
||||
{if $language.state == $language_state}
|
||||
<div class="languageBox{if $language.is_default} languageDefault{/if}">
|
||||
<div class="languageName">{$language.name}{if $language.is_default} <em>({'default'|@translate})</em>{/if}</div>
|
||||
{if $isWebmaster == 1}
|
||||
<div class="languageActions">
|
||||
<div>
|
||||
{if $language_state == 'active'}
|
||||
{if $language.deactivable}
|
||||
<a href="{$language.u_action}&action=deactivate" class="tiptip" title="{'Forbid this language to users'|@translate}">{'Deactivate'|@translate}</a>
|
||||
{else}
|
||||
<span title="{$language.deactivate_tooltip}">{'Deactivate'|@translate}</span>
|
||||
{/if}
|
||||
|
||||
{if not $language.is_default}
|
||||
| <a href="{$language.u_action}&action=set_default" class="tiptip" title="{'Set as default language for unregistered and new users'|@translate}">{'Default'|@translate}</a>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{if $language_state == 'inactive'}
|
||||
<a href="{$language.u_action}&action=activate" class="tiptip" title="{'Make this language available to users'|@translate}">{'Activate'|@translate}</a>
|
||||
{if $CONF_ENABLE_EXTENSIONS_INSTALL}
|
||||
| <a href="{$language.u_action}&action=delete" class="tiptip delete-lang-button" title="{'Delete this language'|@translate}">{'Delete'|@translate}</a>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div> <!-- languageActions -->
|
||||
{/if}
|
||||
</div> <!-- languageBox -->
|
||||
{/if}
|
||||
{/foreach}
|
||||
</div> <!-- languageBoxes -->
|
||||
</fieldset>
|
||||
{/foreach}
|
||||
@@ -0,0 +1,41 @@
|
||||
{combine_script id='jquery.cluetip' load='async' require='jquery' path='themes/default/js/plugins/jquery.cluetip.js'}
|
||||
|
||||
{footer_script require='jquery.cluetip'}
|
||||
jQuery().ready(function(){ldelim}
|
||||
jQuery('.cluetip').cluetip({ldelim}
|
||||
width: 300,
|
||||
splitTitle: '|'
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{if $isWebmaster == 1}
|
||||
|
||||
{if !empty($languages)}
|
||||
<table class="table2 languages">
|
||||
<thead>
|
||||
<tr class="throw">
|
||||
<td>{'Language'|@translate}</td>
|
||||
<td>{'Version'|@translate}</td>
|
||||
<td>{'Date'|@translate}</td>
|
||||
<td>{'Author'|@translate}</td>
|
||||
<td>{'Actions'|@translate}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
{foreach from=$languages item=language name=languages_loop}
|
||||
<tr class="{if $smarty.foreach.languages_loop.index is odd}row1{else}row2{/if}">
|
||||
<td><a href="{$language.EXT_URL}" class="externalLink cluetip" title="{$language.EXT_NAME}|{$language.EXT_DESC|@htmlspecialchars|@nl2br}">{$language.EXT_NAME}</a></td>
|
||||
<td style="text-align:center;"><a href="{$language.EXT_URL}" class="externalLink cluetip" title="{$language.EXT_NAME}|{$language.VER_DESC|@htmlspecialchars|@nl2br}">{$language.VERSION}</a></td>
|
||||
<td>{$language.DATE}</td>
|
||||
<td>{$language.AUTHOR}</td>
|
||||
<td style="text-align:center;"><a href="{$language.URL_INSTALL}">{'Install'|@translate}</a>
|
||||
/ <a href="{$language.URL_DOWNLOAD}">{'Download'|@translate}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
{else}
|
||||
<p>{'There is no other language available.'|@translate}</p>
|
||||
{/if}
|
||||
|
||||
{/if}
|
||||
@@ -0,0 +1,292 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{footer_script}
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
const no_time_elapsed = "{"right now"|@translate}";
|
||||
const unit_MB = "{"%s MB"|@translate}"
|
||||
let selected = [];
|
||||
$(".lock-gallery-button").each(function() {
|
||||
const gallery_tip = '{"A locked gallery is only visible to administrators"|@translate|@escape:'javascript'}';
|
||||
{if (isset($U_MAINT_LOCK_GALLERY))}
|
||||
let title = '{"Are you sure you want to lock the gallery?"|@translate}';
|
||||
{else}
|
||||
let title = '{"Are you sure you want to unlock the gallery?"|@translate}';
|
||||
{/if}
|
||||
|
||||
let confirm_msg_gallery = '{"Yes, I want to lock the gallery"|@translate}';
|
||||
let cancel_msg_gallery = '{"Keep it unlocked"|@translate}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg,
|
||||
alert_content: gallery_tip
|
||||
});
|
||||
});
|
||||
$(".purge-history-detail-button").each(function() {
|
||||
const title = '{"Purge history detail"|@translate|@escape:'javascript'}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
$(".purge-history-summary-button").each(function() {
|
||||
const title = '{"Purge history summary"|@translate|@escape:'javascript'}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
$(".purge-search-history-button").each(function() {
|
||||
const title = '{"Purge search history"|@translate|@escape:'javascript'}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
$(".delete-all-sizes-button").each(function() {
|
||||
const title = '{"Are you sure you want to delete all sizes?"|@translate|@escape:'javascript'}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
|
||||
$(".delete-size-check").click(function () {
|
||||
if ($(this).attr('data-selected') == '1') {
|
||||
$(this).attr('data-selected', '0');
|
||||
$(this).find("i").hide();
|
||||
} else {
|
||||
$(this).attr('data-selected', '1');
|
||||
$(this).find("i").show();
|
||||
}
|
||||
$(this).trigger("change");
|
||||
});
|
||||
$(".delete-size-check:first").change(function() {
|
||||
if ($(this).attr('data-selected') == '1') {
|
||||
$(".delete-size-check").hide();
|
||||
$(".delete-size-check").attr("data-selected", "1");
|
||||
$(this).show();
|
||||
} else {
|
||||
$(".delete-size-check").show();
|
||||
$(".delete-size-check").attr("data-selected", "0");
|
||||
}
|
||||
})
|
||||
const delete_deriv_URL = "admin.php?page=maintenance&action=derivatives&";
|
||||
$(".delete-size-check").change(function() {
|
||||
let delete_deriv_with_token = delete_deriv_URL + "pwg_token=" + "{$pwg_token}&";
|
||||
let types_str = '';
|
||||
let selected = []
|
||||
$(".delete-size-check").each(function () {
|
||||
if ($(this).attr("data-selected") == '1') {
|
||||
selected.push($(this).attr("name"));
|
||||
}
|
||||
})
|
||||
if (selected.length == 0) {
|
||||
$(".delete-sizes").attr("href", "");
|
||||
} else {
|
||||
if (selected[0] == "all") {
|
||||
types_str = "all";
|
||||
} else {
|
||||
types_str = selected.join("_");
|
||||
}
|
||||
console.log(selected);
|
||||
$(".delete-sizes").attr("href", delete_deriv_with_token + "type=" + types_str);
|
||||
}
|
||||
})
|
||||
|
||||
$(".delete-sizes").hide();
|
||||
$(".delete-size-check").click( function () {
|
||||
let displayDeleteSizes = false;
|
||||
$(".delete-size-check").each(function() {
|
||||
if ($(this).attr("data-selected") == 1) {
|
||||
displayDeleteSizes = true;
|
||||
}
|
||||
});
|
||||
|
||||
(displayDeleteSizes ? $(".delete-sizes").show() : $(".delete-sizes").hide())
|
||||
|
||||
})
|
||||
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='ajax' load='footer' path='admin/themes/default/js/maintenance.js'}
|
||||
|
||||
{if $isWebmaster == 1}
|
||||
|
||||
<fieldset class="">
|
||||
<legend><span class="icon-globe icon-blue"></span>{'Global Gallery Actions'|translate}</legend>
|
||||
<div style="display:flex;flex-wrap: wrap;">
|
||||
{if (isset($U_MAINT_LOCK_GALLERY))}
|
||||
<a href="{$U_MAINT_LOCK_GALLERY}" class="lock-gallery-button {$maint_actions['lock_gallery']['icon']} maintenance-action">{$maint_actions['lock_gallery']['label']}</a>
|
||||
{else}
|
||||
<a href="{$U_MAINT_UNLOCK_GALLERY}" class="lock-gallery-button {$maint_actions['unlock_gallery']['icon']} maintenance-action">{$maint_actions['unlock_gallery']['label']}</a>
|
||||
{/if}
|
||||
<a href="{$U_MAINT_CATEGORIES}" class="{$maint_actions['categories']['icon']} maintenance-action">{$maint_actions['categories']['label']}</a>
|
||||
<a href="{$U_MAINT_IMAGES}" class="{$maint_actions['images']['icon']} maintenance-action">{$maint_actions['images']['label']}</a>
|
||||
<a href="{$U_MAINT_DATABASE}" class="{$maint_actions['database']['icon']} maintenance-action">{$maint_actions['database']['label']}</a>
|
||||
<a href="{$U_MAINT_C13Y}" class="{$maint_actions['c13y']['icon']} maintenance-action">{$maint_actions['c13y']['label']}</a>
|
||||
{if (isset($U_EMPTY_LOUNGE))}
|
||||
<a href="{$U_EMPTY_LOUNGE}" class="{$maint_actions['empty_lounge']['icon']} maintenance-action tiptip" title="{'There is currently %d photos in the lounge (upload buffer)'|translate:$LOUNGE_COUNTER}">{$maint_actions['empty_lounge']['label']}<span class="multiple-pictures-sizes">{$LOUNGE_COUNTER}</span></a>
|
||||
{/if}
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="">
|
||||
<legend><span class="icon-trash-1 icon-green"></span>{'Purge Actions'|@translate}</legend>
|
||||
<div style="display:flex;flex-wrap: wrap;">
|
||||
<a href="{$U_MAINT_USER_CACHE}" class="{$maint_actions['user_cache']['icon']} maintenance-action">{$maint_actions['user_cache']['label']}</a>
|
||||
<a href="{$U_MAINT_ORPHAN_TAGS}" class="{$maint_actions['delete_orphan_tags']['icon']} maintenance-action">{$maint_actions['delete_orphan_tags']['label']}</a>
|
||||
<a href="{$U_MAINT_HISTORY_DETAIL}" class="{$maint_actions['history_detail']['icon']} maintenance-action purge-history-detail-button">{$maint_actions['history_detail']['label']}</a>
|
||||
<a href="{$U_MAINT_HISTORY_SUMMARY}" class="{$maint_actions['history_summary']['icon']} maintenance-action purge-history-summary-button">{$maint_actions['history_summary']['label']}</a>
|
||||
<a href="{$U_MAINT_SESSIONS}" class="{$maint_actions['sessions']['icon']} maintenance-action">{$maint_actions['sessions']['label']}</a>
|
||||
<a href="{$U_MAINT_FEEDS}" class="{$maint_actions['feeds']['icon']} maintenance-action">{$maint_actions['feeds']['label']}</a>
|
||||
<a href="{$U_MAINT_SEARCH}" class="{$maint_actions['search']['icon']} maintenance-action purge-search-history-button">{$maint_actions['search']['label']}</a>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
{if isset($advanced_features) and !(count($advanced_features) < 1)}
|
||||
<fieldset class="">
|
||||
<legend><span class="icon-puzzle icon-purple"></span>{'Advanced features'|@translate}</legend>
|
||||
<div style="display:flex;flex-wrap: wrap;">
|
||||
{foreach from=$advanced_features item=feature key=key name=name}
|
||||
<a href="{$feature.URL}" class="{$feature.ICON} maintenance-action">{$feature.CAPTION}</a>
|
||||
{/foreach}
|
||||
</div>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset class="">
|
||||
<legend><span class="icon-trash-1 icon-red"></span>{'Purge Cache'|@translate}</legend>
|
||||
|
||||
<div class="template-purge">
|
||||
<div class="cache-infos">
|
||||
<span class="cache-size-text">{'Cache size'|@translate}</span>
|
||||
<span class="cache-size-value">
|
||||
{if isset($cache_sizes)}
|
||||
{"%s MB"|@translate:{round($cache_sizes[0]['value']/1024/1024, 2)}}
|
||||
{else}
|
||||
{'N/A'|translate}
|
||||
{/if}
|
||||
</span>
|
||||
<span class="cache-lastCalculated-text">{if $time_elapsed_since_last_calc}  {'calculated'|@translate}{/if}</span>
|
||||
<span class="cache-lastCalculated-value">{if $time_elapsed_since_last_calc} {$time_elapsed_since_last_calc} {else}   {"never calculated"|@translate} {/if}</span>
|
||||
<a class="refresh-cache-size"><span class="refresh-icon icon-arrows-cw"></span>{'Refresh'|@translate}</a>
|
||||
</div>
|
||||
<a href="{$U_MAINT_COMPILED_TEMPLATES}" class="{$maint_actions['compiled-templates']['icon']} maintenance-action">{$maint_actions['compiled-templates']['label']}
|
||||
<span class="multiple-compiledTemplate-sizes">
|
||||
{if isset($cache_sizes)}
|
||||
{"%s MB"|@translate:{round($cache_sizes[2]['value']/1024/1024, 2)}}
|
||||
{else}
|
||||
{'N/A'|translate}
|
||||
{/if}
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="delete-size-checks">
|
||||
<span id="label-delete-size-checkbox">{$maint_actions['derivatives']['label']}
|
||||
<span class="multiple-pictures-sizes">
|
||||
{if isset($cache_sizes)}
|
||||
{"%s MB"|@translate:{round($cache_sizes[1]['value']['all']/1024/1024, 2)}}
|
||||
{else}
|
||||
{'N/A'|translate}
|
||||
{/if}
|
||||
</span>
|
||||
</span>
|
||||
<div class="delete-check-container">
|
||||
{foreach from=$purge_derivatives key=name item=url name=loop}
|
||||
<div class="delete-size-check" title="{if isset($cache_sizes) and isset($cache_sizes[1]['value'][$url])}{"%s MB"|@translate:{round($cache_sizes[1]['value'][$url]/1024/1024, 2)}}{else}{'N/A'|translate}{/if}" data-selected="0" name="{$url}">
|
||||
<span class="select-checkbox"><i class="icon-ok" style="margin-left:8px"></i></span>
|
||||
<span class="picture-deletion-size" style="font-size:14px;margin-left:5px;padding-top:2px;">{$name}</span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a class="icon-ok delete-sizes">{'Delete these sizes'|@translate}</a>
|
||||
</fieldset>
|
||||
|
||||
{/if}
|
||||
<style>
|
||||
#label-delete-size-checkbox {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.maintenance-action:hover {
|
||||
color: #ff7700;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.maintenance-action {
|
||||
border: solid 1px;
|
||||
padding: 8px 10px;
|
||||
margin-right: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.maintenance-action.icon-th-list {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.delete-size-checks {
|
||||
display: flex;
|
||||
text-align: left;
|
||||
margin-bottom: 5px;
|
||||
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.delete-check-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.delete-size-check {
|
||||
margin-right: 15px;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
cursor: pointer
|
||||
}
|
||||
|
||||
.select-checkbox {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.delete-sizes {
|
||||
display: block;
|
||||
width: max-content;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.delete-sizes {
|
||||
cursor: pointer;
|
||||
padding: 8px 10px;
|
||||
font-weight: bold;
|
||||
background-color: #ffa744;
|
||||
color: #3c3c3c;
|
||||
}
|
||||
|
||||
.delete-sizes:hover {
|
||||
background-color: #ff7700;
|
||||
color: #3c3c3c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.rotate-anim {
|
||||
animation: spin 4s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,69 @@
|
||||
{combine_script id='ajax' load='footer' path='admin/themes/default/js/maintenance.js'}
|
||||
{combine_script id='activated_plugin_list' load='footer' path='admin/themes/default/js/maintenance_env.js'}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10}
|
||||
{* order 10 is required, see issue 1080 *}
|
||||
{footer_script}
|
||||
const no_time_elapsed = "{"right now"|@translate}";
|
||||
const no_active_plugin = "{"No plugin activated"|@translate}";
|
||||
const error_occured = "{"an error happened"|@translate}";
|
||||
const unit_MB = "{"%s MB"|@translate}"
|
||||
{/footer_script}
|
||||
|
||||
<fieldset id="environment">
|
||||
<legend><span class="icon-television icon-red"></span> {'Environment'|@translate}</legend>
|
||||
<ul style="font-weight:bold">
|
||||
<li><a href="{$PHPWG_URL}" class="externalLink">Piwigo</a> {$PWG_VERSION} <a href="{$U_CHECK_UPGRADE}&tab=env" class="icon-arrows-cw">{'Check for upgrade'|@translate}</a></li>
|
||||
{if isset($INSTALLED_ON)}
|
||||
<li>{'Installed on %s, %s'|translate:$INSTALLED_ON:$INSTALLED_SINCE}</li>
|
||||
{/if}
|
||||
<li>{'Operating system'|@translate}: {$OS}</li>
|
||||
{if {$CONTAINER_INFO} neq 'none'}
|
||||
<li>{'Container info'|translate}: {$CONTAINER_INFO}</li>
|
||||
{/if}
|
||||
<li>PHP: {$PHP_VERSION} (<a href="{$U_PHPINFO}" class="externalLink">{'Show info'|@translate}</a>) [{$PHP_DATATIME}]</li>
|
||||
<li>{$DB_ENGINE}: {$DB_VERSION} [{$DB_DATATIME}]</li>
|
||||
{if isset($GRAPHICS_LIBRARY)}
|
||||
<li>{'Graphics Library'|@translate}: {$GRAPHICS_LIBRARY}</li>
|
||||
{/if}
|
||||
<li>
|
||||
<span class="cache-size-text">{'Cache size'|@translate}</span>
|
||||
<span class="cache-size-value">
|
||||
{if isset($cache_sizes)}
|
||||
{round($cache_sizes[0]['value']/1024/1024, 2)} Mo
|
||||
{else}
|
||||
{'N/A'|translate}
|
||||
{/if}
|
||||
</span>
|
||||
<span class="cache-lastCalculated-text">{if $time_elapsed_since_last_calc}  {'calculated'|@translate}{/if}</span>
|
||||
<span class="cache-lastCalculated-value">{if $time_elapsed_since_last_calc} {$time_elapsed_since_last_calc} {else}   {"never calculated"|@translate} {/if}</span>
|
||||
<a class="refresh-cache-size"><span class="refresh-icon icon-arrows-cw"></span>{'Refresh'|@translate}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="pluginList">
|
||||
<legend><span class="icon-puzzle icon-green"></span> {'Activated plugin list'|@translate} <span class="badge-number"></span></legend>
|
||||
<ul style="font-weight:bold">
|
||||
<i class="icon-spin6 animate-spin"></i>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<style>
|
||||
|
||||
.cache-size-value {
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.cache-size-text, .cache-size-value {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.cache-lastCalculated-text, .cache-lastCalculated-value {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.badge-number {
|
||||
color:white;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,209 @@
|
||||
{if $isWebmaster == 1}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{combine_script id='sys' load='footer' path='admin/themes/default/js/maintenance_sys.js'}
|
||||
<fieldset id="activities-system">
|
||||
<div class="tab-header">
|
||||
<div class="tab-object">
|
||||
<p>{'Object'|translate}</p>
|
||||
</div>
|
||||
<div class="tab-action">
|
||||
<p>{'Action'|translate}</p>
|
||||
</div>
|
||||
<div class="tab-users">
|
||||
<p>{'Users'|translate}</p>
|
||||
</div>
|
||||
<div class="tab-date">
|
||||
<p>{'Date'|translate}</p>
|
||||
</div>
|
||||
<div class="tab-details">
|
||||
<p>{'Details'|translate}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loading">
|
||||
<span class="icon-spin6 animate-spin"></span>
|
||||
</div>
|
||||
|
||||
<div class="tab-body line" id="body_example">
|
||||
<div class="tab-body-object">
|
||||
<p>
|
||||
<span class="icon_object"> </span>
|
||||
<span class="text_object">Object</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="tab-body-action">
|
||||
<p class="color_action">
|
||||
<span class="icon_action"> </span>
|
||||
<span class="text_action">Action</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="tab-body-users">
|
||||
<p>
|
||||
<span class="icon_user"></span>
|
||||
<span class="text_username">Username</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="tab-body-date">
|
||||
<p>
|
||||
<span class="icon icon-clock"></span>
|
||||
<span class="text_date">Date</span>
|
||||
<span class="text_hour">Hour</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="tab-body-details">
|
||||
<p class="detail-item" id="line_details_example">
|
||||
<span class="icon_details"></span>
|
||||
<span class="text_details">Details</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="tab-body-content"></div>
|
||||
|
||||
</fieldset>
|
||||
<style>
|
||||
#body_example {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#line_details_example {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.icon-th-list {
|
||||
padding: 0;
|
||||
font-size: unset;
|
||||
}
|
||||
|
||||
.loading {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.major-infos {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.major-infos::before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 8px;
|
||||
height: 100%;
|
||||
background-color: #F4AB4F;
|
||||
position: absolute;
|
||||
left: -8px;
|
||||
}
|
||||
|
||||
.tab-header,
|
||||
.tab-body {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1.2fr 1fr 1.2fr 2fr;
|
||||
text-align: start;
|
||||
}
|
||||
|
||||
.tab-body-object,
|
||||
.tab-body-users,
|
||||
.tab-body-date {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.tab-body-object p,
|
||||
.tab-body-users p,
|
||||
.tab-body-date p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.tab-body-action,
|
||||
.tab-body-details {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-right: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.tab-header p {
|
||||
color: #9e9e9e;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tab-body {
|
||||
min-height: 40px;
|
||||
align-content: center;
|
||||
align-items: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.tab-body p {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.tab-body-object .icon_object {
|
||||
margin-left: 10px;
|
||||
margin-right: 0.4em;
|
||||
}
|
||||
|
||||
.tab-body-action .color_action {
|
||||
display: inline;
|
||||
border-radius: 23px;
|
||||
padding: 5px 15px 5px 7px;
|
||||
}
|
||||
|
||||
.tab-body-action .icon_action {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
|
||||
.tab-body-users p {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.tab-body-users .icon_user {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
min-width: 30px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-weight: 600;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.tab-body-date .icon {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.tab-body-date .text_hour {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.tab-body-details p {
|
||||
display: inline;
|
||||
align-items: center;
|
||||
border-radius: 3px !important;
|
||||
padding: 4px !important;
|
||||
padding-right: 8px !important;
|
||||
margin-right: 5px !important;
|
||||
font-weight: normal;
|
||||
}
|
||||
@media (min-width: 1350px) {
|
||||
.tab-header,
|
||||
.tab-body {
|
||||
grid-template-columns: 1fr 1fr 1fr 1.7fr 2fr;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1650px) {
|
||||
.tab-header,
|
||||
.tab-body {
|
||||
grid-template-columns: 1fr 1.2fr 1fr 1.6fr 3fr;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
{/if}
|
||||
@@ -0,0 +1,81 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{footer_script require='jquery.ui.sortable'}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery(".menuPos").hide();
|
||||
jQuery(".drag_button").show();
|
||||
jQuery(".menuLi").css("cursor","move");
|
||||
jQuery(".menuUl").sortable({
|
||||
axis: "y",
|
||||
opacity: 0.8
|
||||
});
|
||||
jQuery("input[name^='hide_']").click(function() {
|
||||
men = this.name.split('hide_');
|
||||
if (this.checked) {
|
||||
jQuery("#menu_"+men[1]).addClass('menuLi_hidden');
|
||||
} else {
|
||||
jQuery("#menu_"+men[1]).removeClass('menuLi_hidden');
|
||||
}
|
||||
});
|
||||
jQuery("#menuOrdering").submit(function(){
|
||||
ar = jQuery('.menuUl').sortable('toArray');
|
||||
for(i=0;i<ar.length;i++) {
|
||||
men = ar[i].split('menu_');
|
||||
document.getElementsByName('pos_' + men[1])[0].value = i+1;
|
||||
}
|
||||
});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
{html_style}
|
||||
.font-checkbox i {
|
||||
margin-left:5px;
|
||||
}
|
||||
{/html_style}
|
||||
|
||||
<form id="menuOrdering" action="{$F_ACTION}" method="post">
|
||||
<ul class="menuUl">
|
||||
{foreach from=$blocks item=block name="block_loop"}
|
||||
<li class="menuLi {if $block.pos<0}menuLi_hidden{/if}" id="menu_{$block.reg->get_id()}">
|
||||
<p>
|
||||
<span>
|
||||
<label class="font-checkbox"><strong>{'Hide'|@translate}</strong><i class="icon-check"></i><input type="checkbox" name="hide_{$block.reg->get_id()}" {if $block.pos<0}checked="checked"{/if}></label>
|
||||
</span>
|
||||
|
||||
<img src="{$themeconf.admin_icon_dir}/cat_move.png" class="drag_button" style="display:none;" alt="{'Drag to re-order'|@translate}" title="{'Drag to re-order'|@translate}">
|
||||
<strong>{$block.reg->get_name()|@translate}</strong> ({$block.reg->get_id()})
|
||||
</p>
|
||||
|
||||
{if $block.reg->get_owner() != 'piwigo'}
|
||||
<p class="menuAuthor">
|
||||
{'Author'|@translate}: <i>{$block.reg->get_owner()}</i>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<p class="menuPos">
|
||||
<label>
|
||||
{'Position'|@translate} :
|
||||
<input type="text" size="4" name="pos_{$block.reg->get_id()}" maxlength="4" value="{math equation="abs(pos)" pos=$block.pos}">
|
||||
</label>
|
||||
</p>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,34 @@
|
||||
<div class="pagination-container">
|
||||
{if isset($navbar.URL_FIRST)}
|
||||
<a href="{$navbar.URL_PREV}" class='pagination-arrow left' rel="prev">
|
||||
<span class="icon-left-open"></span>
|
||||
</a>
|
||||
{else}
|
||||
<a class='pagination-arrow left unavailable'>
|
||||
<span class="icon-left-open"></span>
|
||||
</a>
|
||||
{/if}
|
||||
|
||||
{assign var='prev_page' value=0}
|
||||
<div class="pagination-item-container">
|
||||
{foreach from=$navbar.pages key=page item=url}
|
||||
{if $page > $prev_page+1}<span>...</span>{/if}
|
||||
{if $page == $navbar.CURRENT_PAGE}
|
||||
<a class="actual">{$page}</a>
|
||||
{else}
|
||||
<a href="{$url}">{$page}</a>
|
||||
{/if}
|
||||
{assign var='prev_page' value=$page}
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
{if isset($navbar.URL_NEXT)}
|
||||
<a href="{$navbar.URL_NEXT}" class='pagination-arrow rigth' rel="next">
|
||||
<span class="icon-left-open"></span>
|
||||
</a>
|
||||
{else}
|
||||
<a class='pagination-arrow rigth unavailable'>
|
||||
<span class="icon-left-open"></span>
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
@@ -0,0 +1,172 @@
|
||||
|
||||
{include file='include/autosize.inc.tpl'}
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
jQuery("#checkAllLink").click(function () {
|
||||
jQuery("#notification_by_mail input[type=checkbox]").prop('checked', true);
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#uncheckAllLink").click(function () {
|
||||
jQuery("#notification_by_mail input[type=checkbox]").prop('checked', false);
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
<form method="post" name="notification_by_mail" id="notification_by_mail" action="{$F_ACTION}">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
|
||||
{if isset($REPOST_SUBMIT_NAME)}
|
||||
<fieldset>
|
||||
<div class="infos">
|
||||
<input type="submit" value="{'Continue processing treatment'|@translate}" name="{$REPOST_SUBMIT_NAME}">
|
||||
</div>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
{if isset($param)}
|
||||
<fieldset>
|
||||
<legend>{'Parameters'|@translate}</legend>
|
||||
<table>
|
||||
<tr>
|
||||
<td><label>{'Send mail on HTML format'|@translate}</label></td>
|
||||
<td>
|
||||
<label><input type="radio" name="nbm_send_html_mail" value="true" {if $param.SEND_HTML_MAIL}checked="checked"{/if}>{'Yes'|@translate}</label>
|
||||
<label><input type="radio" name="nbm_send_html_mail" value="false" {if $param.SEND_HTML_MAIL === "false" || !$param.SEND_HTML_MAIL}checked="checked"{/if}>{'No'|@translate}</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="send_mail_as">{'Send mail as'|@translate}</label>
|
||||
<br><i><small>{'With blank value, gallery title will be used'|@translate}</small></i>
|
||||
</td>
|
||||
<td><input type="text" maxlength="35" size="35" name="nbm_send_mail_as" id="send_mail_as" value="{$param.SEND_MAIL_AS}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label>{'Add detailed content'|@translate}</label></td>
|
||||
<td>
|
||||
<label><input type="radio" name="nbm_send_detailed_content" value="true" {if $param.SEND_DETAILED_CONTENT}checked="checked"{/if}>{'Yes'|@translate}</label>
|
||||
<label><input type="radio" name="nbm_send_detailed_content" value="false" {if !$param.SEND_DETAILED_CONTENT || $param.SEND_DETAILED_CONTENT === "false"}checked="checked"{/if}>{'No'|@translate}</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="complementary_mail_content">{'Complementary mail content'|@translate}</label></td>
|
||||
<td><textarea cols="50" rows="5" name="nbm_complementary_mail_content" id="complementary_mail_content">{$param.COMPLEMENTARY_MAIL_CONTENT}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<label>{'Include display of recent photos grouped by dates'|@translate}</label>
|
||||
<br><i><small>{'Available only with HTML format'|@translate}</small></i>
|
||||
</td>
|
||||
<td>
|
||||
<label><input type="radio" name="nbm_send_recent_post_dates" value="true" {if $param.SEND_RECENT_POST_DATES}checked="checked"{/if}>{'Yes'|@translate}</label>
|
||||
<label><input type="radio" name="nbm_send_recent_post_dates" value="false" {if !$param.SEND_RECENT_POST_DATES || $param.SEND_RECENT_POST_DATES === "false"}checked="checked"{/if}>{'No'|@translate}</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
|
||||
{/if}{* isset $param*}
|
||||
|
||||
{if isset($subscribe)}
|
||||
<fieldset>
|
||||
<legend>{'Subscribe/unsubscribe users'|@translate}</legend>
|
||||
<p><i>{'Warning: subscribing or unsubscribing will send mails to users'|@translate}</i></p>
|
||||
{$DOUBLE_SELECT}
|
||||
</fieldset>
|
||||
{/if}{* isset $subscribe*}
|
||||
|
||||
{if isset($send)}
|
||||
{if empty($send.users)}
|
||||
<p>{'There is no available subscribers to mail.'|@translate}</p>
|
||||
<p>
|
||||
{'Subscribers could be listed (available) only if there is new elements to notify.'|@translate}<br>
|
||||
{'Anyway only webmasters can see this tab and never administrators.'|@translate}
|
||||
</p>
|
||||
{else}
|
||||
<fieldset>
|
||||
<legend>{'Select recipients'|@translate}</legend>
|
||||
<table class="table2">
|
||||
<tr class="throw">
|
||||
<th>{'User'|@translate}</th>
|
||||
<th>{'Email'|@translate}</th>
|
||||
<th>{'Last send'|@translate}</th>
|
||||
<th>{'To send ?'|@translate}</th>
|
||||
</tr>
|
||||
{foreach from=$send.users item=u name=user_loop}
|
||||
<tr class="{if $smarty.foreach.user_loop.index is odd}row1{else}row2{/if}">
|
||||
<td><label for="send_selection-{$u.ID}">{$u.USERNAME}</label></td>
|
||||
<td><label for="send_selection-{$u.ID}">{$u.EMAIL}</label></td>
|
||||
<td><label for="send_selection-{$u.ID}">{$u.LAST_SEND}</label></td>
|
||||
<td><input type="checkbox" name="send_selection[]" value="{$u.ID}" {$u.CHECKED} id="send_selection-{$u.ID}"></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
<p>
|
||||
<a href="#" id="checkAllLink">{'Check all'|@translate}</a>
|
||||
/ <a href="#" id="uncheckAllLink">{'Uncheck all'|@translate}</a>
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Options'|@translate}</legend>
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="send_customize_mail_content">{'Complementary mail content'|@translate}</label></td>
|
||||
<td><textarea cols="50" rows="5" name="send_customize_mail_content" id="send_customize_mail_content">{$send.CUSTOMIZE_MAIL_CONTENT}</textarea></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
{if isset($auth_key_duration)}
|
||||
<fieldset>
|
||||
<legend><span class="icon-info-circled-1 icon-blue"></span>{'Informations'|@translate}</legend>
|
||||
<p>
|
||||
{'Each email sent will contain its own automatic authentication key on links, valid for %s.'|translate:$auth_key_duration}
|
||||
<br>{'For security reason, authentication keys do not work for administrators.'|translate}
|
||||
</p>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<p>
|
||||
<input type="submit" value="{'Send'|@translate}" name="send_submit">
|
||||
</p>
|
||||
{/if}
|
||||
{/if}{* isset $send*}
|
||||
|
||||
{if isset($param)}
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
<div class="savebar-footer-block">
|
||||
<button class="savebar-see-out" type="reset" name="param_reset">{'Reset'|@translate}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if isset($save_error)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-warning">
|
||||
<i class="icon-attention"></i>{$save_error}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="param_submit"><i class="icon-floppy"></i>{'Submit'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,104 @@
|
||||
{footer_script require='jquery.ui.sortable'}
|
||||
jQuery(document).ready(function(){
|
||||
$("h1").append("<span class='badge-number'>{$nb_cats}</span>")
|
||||
jQuery("#addPermalinkOpen").click(function(){
|
||||
jQuery("#addPermalink").show();
|
||||
jQuery("#showAddPermalink").hide();
|
||||
});
|
||||
|
||||
jQuery("#addPermalinkClose").click(function(){
|
||||
jQuery("#addPermalink").hide();
|
||||
jQuery("#showAddPermalink").show();
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{literal}
|
||||
<style>
|
||||
#showAddPermalink {text-align:left;margin-left:1em;margin-top:0;}
|
||||
form fieldset p {margin:0 0 1em 0;}
|
||||
form fieldset p.actionButtons {margin-bottom:0}
|
||||
</style>
|
||||
{/literal}
|
||||
|
||||
{html_style}
|
||||
[name="permalink"] {
|
||||
width : 100%;
|
||||
max-width : 600px;
|
||||
}
|
||||
{/html_style}
|
||||
|
||||
<p id="showAddPermalink"><a href="#" id="addPermalinkOpen">{'Add/delete a permalink'|@translate}</a></p>
|
||||
|
||||
<form method="post" action="" id="addPermalink" style="display:none">
|
||||
<fieldset>
|
||||
<legend>{'Add/delete a permalink'|@translate}</legend>
|
||||
<p>
|
||||
<strong>{'Album'|@translate}</strong>
|
||||
<br>
|
||||
<select name="cat_id">
|
||||
<option value="0">------</option>
|
||||
{html_options options=$categories selected=$categories_selected}
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Permalink'|@translate}</strong>
|
||||
<br><input name="permalink">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label><input type="checkbox" name="save" checked="checked"> <strong>{'Save to permalink history'|@translate}</strong></label>
|
||||
</p>
|
||||
|
||||
<p class="actionButtons">
|
||||
<input type="submit" class="submit" name="set_permalink" value="{'Submit'|@translate}">
|
||||
<a href="#" id="addPermalinkClose">{'Cancel'|@translate}</a>
|
||||
</p>
|
||||
</fieldset>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</form>
|
||||
|
||||
<fieldset>
|
||||
<legend><span class="icon-lock icon-blue"></span>{'Permalinks'|@translate}</legend>
|
||||
<table class="table2" style="margin:0">
|
||||
<tr class="throw">
|
||||
<td>Id {$SORT_ID}</td>
|
||||
<td>{'Album'|@translate} {$SORT_NAME}</td>
|
||||
<td>{'Permalink'|@translate} {$SORT_PERMALINK}</td>
|
||||
</tr>
|
||||
{foreach from=$permalinks item=permalink name="permalink_loop"}
|
||||
<tr class="{if $smarty.foreach.permalink_loop.index is odd}row1{else}row2{/if}" style="line-height:1.5em;">
|
||||
<td style="text-align:center;">{$permalink.id}</td>
|
||||
<td>{$permalink.name}</td>
|
||||
<td>{$permalink.permalink}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend><span class="icon-lock icon-red"></span>{'Permalink history'|@translate} <a name="old_permalinks"></a></legend>
|
||||
<table class="table2" style="margin:0">
|
||||
<tr class="throw">
|
||||
<td>Id {$SORT_OLD_CAT_ID}</td>
|
||||
<td>{'Album'|@translate}</td>
|
||||
<td>{'Permalink'|@translate} {$SORT_OLD_PERMALINK}</td>
|
||||
<td>{'Deleted on'|@translate} {$SORT_OLD_DATE_DELETED}</td>
|
||||
<td>{'Last hit'|@translate} {$SORT_OLD_LAST_HIT}</td>
|
||||
<td>{'Hit'|@translate} {$SORT_OLD_HIT}</td>
|
||||
<td style="width:5px;"></td>
|
||||
</tr>
|
||||
{foreach from=$deleted_permalinks item=permalink}
|
||||
<tr style="line-height:1.5em;">
|
||||
<td style="text-align:center;">{$permalink.cat_id}</td>
|
||||
<td>{$permalink.name}</td>
|
||||
<td>{$permalink.permalink}</td>
|
||||
<td>{$permalink.date_deleted}</td>
|
||||
<td>{$permalink.last_hit}</td>
|
||||
<td>{$permalink.hit}</td>
|
||||
<td><a href="{$permalink.U_DELETE}"><img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/delete.png" alt="[{'Delete'|@translate}]"></a></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
</fieldset>
|
||||
@@ -0,0 +1,191 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery().ready(function(){
|
||||
jQuery(".illustration a").colorbox({rel:'group1'});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
{html_head}{literal}
|
||||
<style type="text/css">
|
||||
.applicationContainer {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.applicationCard {
|
||||
max-width: 500px;
|
||||
margin: 20px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.applicationCard img {
|
||||
max-width: 210px;
|
||||
height: 175px;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.applicationCard .textSide {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.applicationCard .applicationName {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
margin: 20px 0 10px 0;
|
||||
padding-right: 15px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.applicationCard .applicationDesc {
|
||||
text-align: left;
|
||||
padding-right: 15px;
|
||||
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 6;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.applicationCard .applicationLink {
|
||||
width: fit-content;
|
||||
margin-top: auto;
|
||||
margin-bottom: 20px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.applicationCard .applicationLink a {
|
||||
text-decoration: none;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
{/literal}{/html_head}
|
||||
|
||||
<div class="applicationContainer">
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/piwigo-remote-sync.png" title="Piwigo Remote Sync"><img src="https://piwigo.org/screenshots/applications/piwigo-remote-sync.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> Piwigo Remote Sync </div>
|
||||
<div class="applicationDesc"> {'Piwigo Remote Sync is able to upload a whole folder hierarchy. If you run it again, only new photos will be uploaded.'|@translate} </div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" href="http://piwigo.org/ext/extension_view.php?eid=851" target="_blank">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/piwigo-ios.png" title="{'Piwigo for iOS (iPhone, iPad, iPod Touch)'|@translate}"><img src="https://piwigo.org/screenshots/applications/thumbnail/piwigo-ios.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> {'Piwigo for iOS (iPhone, iPad, iPod Touch)'|@translate}</div>
|
||||
<div class="applicationDesc"> {'<em>Piwigo for iOS</em> application empowers you to connect to your Piwigo gallery from your iPhone, iPad or iPod Touch, create some albums and upload several photos at once.'|@translate}</div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="http://itunes.apple.com/us/app/piwigo/id472225196"> {'Available on'|@translate} Apple AppStore</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/piwigo-android.png" title="{'Piwigo for Android'|@translate}"><img src="https://piwigo.org/screenshots/applications/thumbnail/piwigo-android.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> {'Piwigo for Android'|@translate} </div>
|
||||
<div class="applicationDesc"> {'<em>Piwigo for Android</em> application empowers you to connect your Android phone or table to your Piwigo gallery, create some albums and upload several photos at once.'|@translate} </div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="https://play.google.com/store/apps/details?id=com.piwigo.piwigo_ng">{'Available on'|@translate} Google Play</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/lightroom.png" title="{'Piwigo Publish plugin for Lightroom'|@translate}"><img src="https://piwigo.org/screenshots/applications/lightroom.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> Lightroom </div>
|
||||
<div class="applicationDesc">
|
||||
{'Adobe Photoshop Lightroom is a photography software designed to manage large quantities of digital images and doing post production work.'|@translate}
|
||||
{'The Piwigo publish Plug-in allows you to export and synchronize photos from Lightroom directly to your Piwigo photo gallery.'|@translate}
|
||||
</div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="http://alloyphoto.com/plugins/piwigo/">{'Available on'|@translate} alloyphoto.com</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/shotwell.png" title="{'Piwigo publish plugin for Shotwell'|@translate}"><img src="https://piwigo.org/screenshots/applications/shotwell.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> Shotwell </div>
|
||||
<div class="applicationDesc"> {'Shotwell is an open source digital photo organizer that runs on Linux. It is the default photo manager in Ubuntu and Fedora.'|@translate}</div>
|
||||
<div class="applicationLink">
|
||||
<a title="{'On your Linux, simply install Shotwell with your package manager and the activate Piwigo publishing option.'|@translate}" class="buttonLike" href="https://shotwell-project.org/doc/html/" target="_blank">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/digikam.png" title="{'Piwigo publish plugin for digiKam'|@translate}"><img src="https://piwigo.org/screenshots/applications/digikam.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> digiKam </div>
|
||||
<div class="applicationDesc">
|
||||
{'digiKam is an advanced digital photo management free software for Linux, Windows, and MacOSX.'|@translate}
|
||||
{'digiKam is designed for photographers who want to view, manage, edit, enhance, organize, tag, and share photographs.'|@translate}
|
||||
</div>
|
||||
<div class="applicationLink">
|
||||
<a title="{'To export your photos from digiKam to Piwigo, simply install digiKam and the Kipi-plugins.'|@translate}" class="buttonLike" href="http://digikam.org/" target="_blank">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/macsharetopiwigo.jpg" title="MacShareToPiwigo"><img src="https://piwigo.org/screenshots/applications/macsharetopiwigo.jpg"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> MacShareToPiwigo </div>
|
||||
<div class="applicationDesc"> {'Share / Send your photos directly from your Mac Os X (10.10 and following) to Piwigo'|@translate} </div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="http://piwigo.org/ext/extension_view.php?eid=804">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/iphoto.jpg" title="{'Piwigo export plugin for iPhoto'|@translate}"><img src="https://piwigo.org/screenshots/applications/iphoto.jpg"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> iPhoto </div>
|
||||
<div class="applicationDesc"> {'iPhoto is the default photo manager on MacOSX. The Piwigo export plugin let you create new albums and export your photos directly from iPhoto to your Piwigo photo gallery.'|@translate} </div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="http://piwigo.org/ext/extension_view.php?eid=592">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="applicationCard">
|
||||
<div class="illustration"><a href="https://piwigo.org/screenshots/applications/aperture.png" title="{'Piwigo export plugin for Aperture'|@translate}"><img src="https://piwigo.org/screenshots/applications/aperture.png"></a></div>
|
||||
|
||||
<div class="textSide">
|
||||
<div class="applicationName"> Aperture </div>
|
||||
<div class="applicationDesc">
|
||||
{'Aperture is a powerful tool to refine images and manage massive libraries on Mac.'|@translate}
|
||||
{'Aperture is designed for professional photographers with iPhoto simplicity.'|@translate}
|
||||
{'The Piwigo export plugin allows you to create albums and export photos.'|@translate}
|
||||
</div>
|
||||
<div class="applicationLink">
|
||||
<a class="buttonLike" target="_blank" href="http://piwigo.org/ext/extension_view.php?eid=598">{'Learn more'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,271 @@
|
||||
{if isset($ADD_TO_ALBUM) or isset($selected_category_name)}{$can_upload=true}{else}{$can_upload=false}{/if}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.plupload' load='footer' require='jquery' path='themes/default/js/plugins/plupload/plupload.full.min.js'}
|
||||
{combine_script id='jquery.plupload.queue' load='footer' require='jquery' path='themes/default/js/plugins/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
|
||||
{combine_css path="themes/default/js/plugins/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css"}
|
||||
|
||||
{assign var="plupload_i18n" value="themes/default/js/plugins/plupload/i18n/`$lang_info.plupload_code`.js"}
|
||||
{if "PHPWG_ROOT_PATH"|@constant|@cat:$plupload_i18n|@file_exists}
|
||||
{combine_script id="plupload_i18n-`$lang_info.plupload_code`" load="footer" path=$plupload_i18n require="jquery.plupload.queue"}
|
||||
{/if}
|
||||
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{if !$DISPLAY_FORMATS}
|
||||
{include file='include/add_album.inc.tpl'}
|
||||
{/if}
|
||||
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{combine_script id='piecon' load='footer' path='themes/default/js/plugins/piecon.js'}
|
||||
{combine_script id='add_photo' load='footer' path='admin/themes/default/js/photos_add_direct.js'}
|
||||
|
||||
{html_style}
|
||||
.addAlbumFormParent { display: none; } /* specific to this page, do not move in theme.css */
|
||||
{/html_style}
|
||||
|
||||
{footer_script}
|
||||
|
||||
const formatMode = {if $DISPLAY_FORMATS}true{else}false{/if};
|
||||
const haveFormatsOriginal = {if $HAVE_FORMATS_ORIGINAL}true{else}false{/if};
|
||||
const originalImageId = haveFormatsOriginal? '{if isset($FORMATS_ORIGINAL_INFO['id'])} {$FORMATS_ORIGINAL_INFO['id']} {else} -1 {/if}' : -1;
|
||||
const imageFormatsExtensions = '{$FORMATS_EXT_INFO}';
|
||||
const nb_albums = {$NB_ALBUMS|escape:javascript};
|
||||
const chunk_size = '{$chunk_size}kb';
|
||||
const max_file_size = '{$max_file_size}mb';
|
||||
const format_update_warning = "{'This format already exists, it will be overwritten !'|translate}";
|
||||
const format_remove = "{'Remove'|translate}";
|
||||
var pwg_token = '{$pwg_token}';
|
||||
const photosAdded_label = "{'%d photos uploaded'|translate|escape:javascript}";
|
||||
const photosUpdated_label = "{'%d photos updated'|translate|escape:javascript}";
|
||||
const formatsAdded_label = "{'%d formats added for %d photos'|translate|escape:javascript}";
|
||||
const formatsUpdated_label = "{'%d formats updated for %d photos'|translate|escape:javascript}";
|
||||
const batch_Label = "{'Manage this set of %d photos'|translate|escape:javascript}";
|
||||
const albumSummary_label = "{'Album "%s" now contains %d photos'|translate|escape:javascript}";
|
||||
const str_format_warning = "{'Error when trying to detect formats'|translate|escape:javascript}";
|
||||
const str_ok = "{'Ok'|translate|escape:javascript}";
|
||||
const str_format_warning_multiple = "{'There is multiple image in the database with the following names : %s.'|translate|escape:javascript}";
|
||||
const str_format_warning_notFound = "{'No picture found with the following name : %s.'|translate|escape:javascript}";
|
||||
const str_and_X_others = "{'and %d more'|translate|escape:javascript}";
|
||||
const str_upload_in_progress = "{'Upload in progress'|translate|escape:javascript}";
|
||||
const str_drop_album_ab = '{'Drop into album'|@translate|escape:javascript}';
|
||||
const file_ext = "{$file_exts}";
|
||||
const format_ext = "{$format_ext}";
|
||||
const uploadedPhotos = [];
|
||||
let uploadCategory = null;
|
||||
const addedPhotos = [];
|
||||
const updatedPhotos = [];
|
||||
let related_categories_ids = {$selected_category|json_encode};
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<div id="photosAddContent">
|
||||
|
||||
{if count($setup_errors) > 0}
|
||||
<div class="errors">
|
||||
<ul>
|
||||
{foreach from=$setup_errors item=error}
|
||||
<li>{$error}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{else}
|
||||
{if count($setup_warnings) > 0}
|
||||
<div class="warnings">
|
||||
<ul>
|
||||
{foreach from=$setup_warnings item=warning}
|
||||
<li>{$warning}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
<div class="hideButton" style="text-align:center"><a href="{$hide_warnings_link}">{'Hide'|@translate}</a></div>
|
||||
</div>
|
||||
{/if}
|
||||
{/if} {* $setup_errors *}
|
||||
|
||||
{if $PROMOTE_MOBILE_APPS}
|
||||
<div class="promote-apps">
|
||||
<div class="promote-content">
|
||||
<div class="left-side">
|
||||
<img src="https://sandbox.piwigo.com/uploads/4/y/1/4y1zzhnrnw//2023/01/24/20230124175152-015bc1e3.png">
|
||||
</div>
|
||||
<div class="promote-text">
|
||||
<span>{"Piwigo is also on mobile."|@translate|escape:javascript}</span>
|
||||
<span>{"Try now !"|@translate|escape:javascript}</span>
|
||||
</div>
|
||||
<div class="right-side">
|
||||
<div>
|
||||
<a href="{$PHPWG_URL}/mobile-applications" target="_blank"><span class="go-to-porg icon-link-1">{"Discover"|@translate|escape:javascript}</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="dont-show-again icon-cancel tiptip" title="{'Understood, do not show again'|translate|escape:javascript}"></span>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if $ENABLE_FORMATS and $can_upload}
|
||||
<div class="format-mode-group-manager">
|
||||
<label class="switch" onClick="window.location.replace('{$SWITCH_FORMAT_MODE_URL}'); $('.switch .slider').addClass('loading');">
|
||||
<input type="checkbox" id="toggleFormatMode" {if $DISPLAY_FORMATS}checked{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<p>{'Upload Formats'|@translate}</p>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if !$DISPLAY_FORMATS}
|
||||
<div class="addAlbumEmptyCenter"{if $NB_ALBUMS > 0} style="display:none;"{/if}>
|
||||
<div class="addAlbumEmpty">
|
||||
<div class="addAlbumEmptyTitle">{'Welcome!'|translate}</div>
|
||||
<p class="addAlbumEmptyInfos">{'Piwigo requires an album to add photos.'|translate}</p>
|
||||
<a class="buttonLike" id="btnFirstAlbum">{'Create a first album'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="infos" style="display:none"><i class="eiw-icon icon-ok"></i></div>
|
||||
<div class="errors" style="display:none"><i class="eiw-icon icon-cancel"></i><ul></ul></div>
|
||||
|
||||
<p class="afterUploadActions" style="margin:10px; display:none;">
|
||||
{if !$DISPLAY_FORMATS}
|
||||
<a class="batchLink icon-pencil"></a><span class="buttonSeparator">{'or'|translate}</span><a href="admin.php?page=photos_add" class="secondary_button icon-plus-circled">{'Add another set of photos'|@translate}</a>
|
||||
{else}
|
||||
<a href="admin.php?page=photos_add&formats" class="icon-plus-circled">{'Add another set of formats'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<form id="uploadForm" class="{if $DISPLAY_FORMATS}format-mode{/if}" enctype="multipart/form-data" method="post" action="{$form_action}"{if $NB_ALBUMS == 0} style="display:none;"{/if}>
|
||||
{if not $DISPLAY_FORMATS}
|
||||
<fieldset class="selectAlbum">
|
||||
<legend><span class="icon-folder-open icon-red"></span>{'Drop into album'|@translate}</legend>
|
||||
<div class="selectedAlbum"{if !$can_upload} style="display: none"{/if} id="selectedAlbum">
|
||||
<span class="icon-sitemap" id="selectedAlbumName">{if isset($ADD_TO_ALBUM)}{$ADD_TO_ALBUM}{elseif isset($selected_category_name)}{$selected_category_name}{/if}</span>
|
||||
<a class="icon-pencil" id="selectedAlbumEdit"></a>
|
||||
</div>
|
||||
<div class="selectAlbumSelector" {if $can_upload} style="display: none"{/if} id="addPhotosAS">
|
||||
<p class="head-button-1 icon-folder-open" id="btnPhotosAS">{"Select or create an album"|translate}</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
{elseif $HAVE_FORMATS_ORIGINAL}
|
||||
<fieldset class="originalPicture">
|
||||
<legend><span class="icon-link-1 icon-red"></span>{'Picture to associate formats with'|@translate}</legend>
|
||||
<a class='info-framed' href='{$FORMATS_ORIGINAL_INFO['u_edit']}' title='{'Edit photo'|@translate}'>
|
||||
<div class='info-framed-icon'>
|
||||
<img src='{$FORMATS_ORIGINAL_INFO['src']}'></i>
|
||||
</div>
|
||||
<div class='info-framed-container'>
|
||||
<div class='info-framed-title'>{$FORMATS_ORIGINAL_INFO['name']}</div>
|
||||
{if isset($FORMATS_ORIGINAL_INFO['formats'])}<div>{$FORMATS_ORIGINAL_INFO['formats']}</div>{/if}
|
||||
<div>{$FORMATS_ORIGINAL_INFO.ext}</div>
|
||||
</div>
|
||||
</a>
|
||||
</fieldset>
|
||||
{/if}
|
||||
{*
|
||||
<p class="showFieldset"><a id="showPermissions" href="#">{'Manage Permissions'|@translate}</a></p>
|
||||
|
||||
<fieldset id="permissions" style="display:none">
|
||||
<legend>{'Who can see these photos?'|@translate}</legend>
|
||||
|
||||
<select name="level" size="1">
|
||||
{html_options options=$level_options selected=$level_options_selected}
|
||||
</select>
|
||||
</fieldset>
|
||||
*}
|
||||
<fieldset class="selectFiles">
|
||||
|
||||
<legend>
|
||||
<div style="display:flex;align-items: center;">
|
||||
<span class="icon-file-image icon-yellow"></span>{'Select files'|@translate}
|
||||
{if !$DISPLAY_FORMATS}
|
||||
<div id="uploadOptions" class="upload-options">
|
||||
<span class="icon-equalizer rotate-element upload-options-icon"></span>{'Options'|@translate}
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{if !$DISPLAY_FORMATS}
|
||||
<div class="upload-options-content" id="uploadOptionsContent">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleUpdateMode">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<div style="margin-left: 6px;">
|
||||
<p>{'If a photo in this album has the same filename, update the file without changing the photo\'s properties'|@translate}</p>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</legend>
|
||||
|
||||
<div class="selectFilesButtonBlock">
|
||||
<button id="addFiles" class="buttonLike icon-plus-circled" {if !$can_upload}disabled{/if}>
|
||||
{if not $DISPLAY_FORMATS}{'Add Photos'|translate}{else}{'Add formats'|@translate}{/if}
|
||||
</button>
|
||||
<div class="selectFilesinfo">
|
||||
{if isset($original_resize_maxheight)}
|
||||
<p class="uploadInfo">{'The picture dimensions will be reduced to %dx%d pixels.'|@translate:$original_resize_maxwidth:$original_resize_maxheight}</p>
|
||||
{/if}
|
||||
<p id="uploadWarningsSummary">
|
||||
{if not $DISPLAY_FORMATS}
|
||||
{'Allowed file types: %s.'|@translate:$upload_file_types}
|
||||
{else}
|
||||
{'Allowed file types: %s.'|@translate:$str_format_ext}
|
||||
{if !$HAVE_FORMATS_ORIGINAL}<p>{'The original picture will be detected with the filename (without extension).'|@translate}</p>{/if}
|
||||
{/if}
|
||||
</p>
|
||||
</p>
|
||||
{if isset($max_upload_resolution)}
|
||||
{'Approximate maximum resolution: %dM pixels (that\'s %dx%d pixels).'|@translate:$max_upload_resolution:$max_upload_width:$max_upload_height}
|
||||
{/if}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="photosUploader" id="uploader" {if !$can_upload}style="display: none;"{/if}>
|
||||
<p>Your browser doesn't have HTML5 support.</p>
|
||||
</div>
|
||||
<div class="selectAlbumFirst" id="chooseAlbumFirst" {if $can_upload}style="display: none;"{/if}>
|
||||
<p>{"First choose an album, then add your files"|translate}</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div id="uploadingActions" style="display:none">
|
||||
<div class="big-progressbar" style="max-width:98%;margin-bottom: 10px;">
|
||||
<div class="progressbar" style="width:0%"></div>
|
||||
</div>
|
||||
<button id="cancelUpload" class="buttonLike icon-cancel-circled">{'Cancel'|translate}</button>
|
||||
</div>
|
||||
|
||||
<button id="startUpload" class="buttonLike icon-upload" disabled>{'Start Upload'|translate}</button>
|
||||
|
||||
</form>
|
||||
|
||||
<fieldset style="display:none" class="Addedphotos">
|
||||
<div id="uploadedPhotos"></div>
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- photosAddContent -->
|
||||
<div class="bg-modal" id="addFirstAlbum">
|
||||
<div class="new-album-modal-content">
|
||||
<a class="icon-cancel close-modal" id="closeFirstAlbum"></a>
|
||||
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue icon-add-album"></span>
|
||||
</div>
|
||||
<div class="AddIconTitle">
|
||||
<span>{'Create your first album'|translate}</span>
|
||||
</div>
|
||||
<div class="AddAlbumInputContainer">
|
||||
<label class="user-property-label AddAlbumLabelUsername">{'Album name'|translate}
|
||||
<input class="user-property-input" id="inputFirstAlbum">
|
||||
</label>
|
||||
</div>
|
||||
<a class="buttonLike icon-plus" id="btnAddFirstAlbum">{'Create and select'|translate}</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
@@ -0,0 +1,5 @@
|
||||
<div id="ftpPage">
|
||||
<p><a href="{$U_CAT_UPDATE}">{'Administration'|@translate} » {'Tools'|@translate} » {'Synchronize'|@translate}</a></p>
|
||||
|
||||
{$FTP_HELP_CONTENT}
|
||||
</div>
|
||||
@@ -0,0 +1,71 @@
|
||||
{html_head}
|
||||
<link rel="stylesheet" type="text/css" href="themes/default/js/plugins/jquery.Jcrop.css" />
|
||||
{/html_head}
|
||||
{combine_script id='jquery.jcrop' load='footer' require='jquery' path='themes/default/js/plugins/jquery.Jcrop.min.js'}
|
||||
|
||||
<form method="post">
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Photo sizes with crop'|@translate}</legend>
|
||||
{foreach from=$cropped_derivatives item=deriv}
|
||||
<img src="{$deriv.U_IMG}" alt="{$ALT}" {$deriv.HTM_SIZE}>
|
||||
{/foreach}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Center of interest'|@translate}</legend>
|
||||
<p style="margin:0 0 10px 0;padding:0;">
|
||||
{'The center of interest is the most meaningful zone in the photo.'|@translate}
|
||||
{'For photo sizes with crop, such as "Square", Piwigo will do its best to include the center of interest.'|@translate}
|
||||
{'By default, the center of interest is placed in the middle of the photo.'|@translate}
|
||||
{'Select a zone with your mouse to define a new center of interest.'|@translate}
|
||||
</p>
|
||||
<input type="hidden" id="l" name="l" value="{if isset($coi)}{$coi.l}{/if}">
|
||||
<input type="hidden" id="t" name="t" value="{if isset($coi)}{$coi.t}{/if}">
|
||||
<input type="hidden" id="r" name="r" value="{if isset($coi)}{$coi.r}{/if}">
|
||||
<input type="hidden" id="b" name="b" value="{if isset($coi)}{$coi.b}{/if}">
|
||||
|
||||
<img id="jcrop" src="{$U_IMG}" alt="{$ALT}">
|
||||
|
||||
<p>
|
||||
<input type="submit" name="submit" value="{'Submit'|@translate}">
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{footer_script}
|
||||
{literal}
|
||||
function from_coi(f, total) {
|
||||
return f*total;
|
||||
}
|
||||
|
||||
function to_coi(v, total) {
|
||||
return v/total;
|
||||
}
|
||||
|
||||
function jOnChange(sel) {
|
||||
var $img = jQuery("#jcrop");
|
||||
jQuery("#l").val( to_coi(sel.x, $img.width()) );
|
||||
jQuery("#t").val( to_coi(sel.y, $img.height()) );
|
||||
jQuery("#r").val( to_coi(sel.x2, $img.width()) );
|
||||
jQuery("#b").val( to_coi(sel.y2, $img.height()) );
|
||||
}
|
||||
function jOnRelease() {
|
||||
jQuery("#l,#t,#r,#b").val("");
|
||||
}
|
||||
|
||||
{/literal}
|
||||
jQuery("#jcrop").Jcrop( {ldelim}
|
||||
boxWidth: 500, boxHeight: 400,
|
||||
onChange: jOnChange,
|
||||
onRelease: jOnRelease
|
||||
}
|
||||
{if isset($coi)}
|
||||
,function() {ldelim}
|
||||
var $img = jQuery("#jcrop");
|
||||
this.animateTo( [from_coi({$coi.l}, $img.width()), from_coi({$coi.t}, $img.height()), from_coi({$coi.r}, $img.width()), from_coi({$coi.b}, $img.height()) ] );
|
||||
}
|
||||
{/if}
|
||||
);
|
||||
{/footer_script}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{combine_script id='picture_formats' load='footer' path='admin/themes/default/js/picture_formats.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
<script>
|
||||
const nbFormats = {count($FORMATS)}
|
||||
const pwg_token = "{$PWG_TOKEN}"
|
||||
const str_confirm_delete_format = "{'Delete %s format ?'|@translate}"
|
||||
const str_confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const str_cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
</script>
|
||||
|
||||
<div class="formats-header">
|
||||
<a class="{if (count($FORMATS) != 0)}head-button-1{else}head-button-2{/if} icon-plus-circled" href="{$ADD_FORMATS_URL}">{"Add formats"|@translate}</a>
|
||||
</div>
|
||||
<div class="formats-content">
|
||||
<div class="no-formats" {if (count($FORMATS) != 0)}style="display:none"{/if}>
|
||||
{"No format for this picture"|@translate}
|
||||
</div>
|
||||
|
||||
<div class="formats-list" {if (count($FORMATS) == 0)}style="display:none"{/if}>
|
||||
{foreach from=$FORMATS item=format}
|
||||
<div class="format-card" data-id="{$format["format_id"]}" style="background-image: url('{$IMG_SQUARE_SRC}')">
|
||||
<span class="format-card-size">{'%s MB'|@translate:$format["filesize"]}</span>
|
||||
<div class="format-card-ext"><span>{$format["label"]}</span></div>
|
||||
<div class="format-card-actions">
|
||||
<a href="{$format["download_url"]}" rel="nofollow"> <i class="icon-download"></i> </a>
|
||||
<a class="format-delete"> <i class="icon-trash-1"></i> </a>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,278 @@
|
||||
{include file='include/autosize.inc.tpl'}
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
|
||||
{footer_script}
|
||||
(function(){
|
||||
{* <!-- CATEGORIES --> *}
|
||||
var categoriesCache = new CategoriesCache({
|
||||
serverKey: '{$CACHE_KEYS.categories}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'));
|
||||
|
||||
{* <!-- TAGS --> *}
|
||||
var tagsCache = new TagsCache({
|
||||
serverKey: '{$CACHE_KEYS.tags}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
tagsCache.selectize(jQuery('[data-selectize=tags]'), { lang: {
|
||||
'Add': '{'Create'|translate}'
|
||||
}});
|
||||
|
||||
{* <!-- DATEPICKER --> *}
|
||||
jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
||||
jQuery('[data-datepicker]').pwgDatepicker({
|
||||
showTimepicker: true,
|
||||
cancelButton: '{'Cancel'|translate}'
|
||||
});
|
||||
});
|
||||
|
||||
{* <!-- THUMBNAILS --> *}
|
||||
jQuery("a.preview-box").colorbox({
|
||||
photo: true
|
||||
});
|
||||
|
||||
str_are_you_sure = '{'Are you sure?'|translate|escape:javascript}';
|
||||
str_yes = '{'Yes, delete'|translate|escape:javascript}';
|
||||
str_no = '{'No, I have changed my mind'|translate|@escape:'javascript'}';
|
||||
url_delete = '{$U_DELETE}';
|
||||
str_orphan = '{'This photo is an orphan'|@translate|escape:javascript}';
|
||||
|
||||
|
||||
related_categories_ids = {$related_categories_ids|@json_encode};
|
||||
|
||||
{literal}
|
||||
$('#action-delete-picture').on('click', function() {
|
||||
$.confirm({
|
||||
title: str_are_you_sure,
|
||||
draggable: false,
|
||||
titleClass: "groupDeleteConfirm",
|
||||
theme: "modern",
|
||||
content: "",
|
||||
animation: "zoom",
|
||||
boxWidth: '30%',
|
||||
useBootstrap: false,
|
||||
type: 'red',
|
||||
animateFromElement: false,
|
||||
backgroundDismiss: true,
|
||||
typeAnimated: false,
|
||||
buttons: {
|
||||
confirm: {
|
||||
text: str_yes,
|
||||
btnClass: 'btn-red',
|
||||
action: function () {
|
||||
window.location.href = url_delete.replaceAll('amp;', '');
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
text: str_no
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
{/literal}
|
||||
|
||||
}());
|
||||
const str_assoc_album_ab = '{'Associate to album'|translate|escape:javascript}';
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='picture_modify' load='footer' path='admin/themes/default/js/picture_modify.js'}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
|
||||
<form action="{$F_ACTION}" method="post" id="pictureModify">
|
||||
{if $INTRO.is_svg}
|
||||
<div id='picture-preview' class="svg-container">
|
||||
{else}
|
||||
<div id='picture-preview'>
|
||||
{/if}
|
||||
<div class='picture-preview-actions'>
|
||||
<a class="preview-box icon-zoom-square" href="{$FILE_SRC}" title="{'Zoom'|translate}"></a>
|
||||
<a class="icon-download" href="{$U_DOWNLOAD}" title="{'Download'|translate}"></a>
|
||||
<a class="icon-signal" href="{$U_HISTORY}" title="{'Visit history'|translate}"></a>
|
||||
<a class="icon-pulse" href="{$U_ACTIVITY}" title="{'Activity'|translate}"></a>
|
||||
{if !url_is_remote($PATH)}
|
||||
<a class="icon-arrows-cw" href="{$U_SYNC}" title="{'Synchronize metadata'|@translate}"></a>
|
||||
<a class="icon-trash" title="{'delete photo'|@translate}" id='action-delete-picture'></a>
|
||||
{/if}
|
||||
</div>
|
||||
{if $INTRO.is_svg}
|
||||
<img src="{$PATH}" alt="{'Thumbnail'|translate}" class="svg-image other-image-format" style="{if $FORMAT}width:100%; max-height:100%; {else}max-width:100%; height:100%;{/if} object-fit:contain;">
|
||||
{else}
|
||||
<img src="{$TN_SRC}" alt="{'Thumbnail'|translate}" class="other-image-format" style="{if $FORMAT}width:100%; max-height:100%;{else}max-width:100%; height:100%;{/if} object-fit:contain;">
|
||||
{/if}
|
||||
</div>
|
||||
<div id='picture-content'>
|
||||
<div id='picture-infos'>
|
||||
<div class='info-framed'>
|
||||
<div class='info-framed-icon'>
|
||||
<i class='icon-picture'></i>
|
||||
</div>
|
||||
<div class='info-framed-container'>
|
||||
<div class='info-framed-title'>{$INTRO.file}</div>
|
||||
<div>{$INTRO.size}</div>
|
||||
<div>{if isset($INTRO.formats)}{$INTRO.formats} {/if}</div>
|
||||
<div>{$INTRO.ext}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='info-framed'>
|
||||
<div class='info-framed-icon'>
|
||||
<span class='icon-calendar'></span>
|
||||
</div>
|
||||
<div class='info-framed-container'>
|
||||
<div class='info-framed-title'>{$INTRO.date}</div>
|
||||
<div>{$INTRO.age}</div>
|
||||
<div>{$INTRO.added_by}</div>
|
||||
<div>{$INTRO.stats}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<p>
|
||||
<strong>{'Title'|@translate}</strong>
|
||||
<br>
|
||||
<input type="text" class="large" name="name" value="{$NAME|@escape}">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Author'|@translate}</strong>
|
||||
<br>
|
||||
<input type="text" class="large" name="author" value="{$AUTHOR}">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Creation date'|@translate}</strong>
|
||||
<br>
|
||||
<input type="hidden" name="date_creation" value="{$DATE_CREATION}">
|
||||
<label class="date-input">
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="date_creation" data-datepicker-unset="date_creation_unset" readonly>
|
||||
</label>
|
||||
<a href="#" class="icon-cancel-circled" id="date_creation_unset">{'unset'|translate}</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Linked albums'|@translate} <span class="linked-albums-badge {if $related_categories|@count < 1 } badge-red {/if}"> {$related_categories|@count} </span></strong>
|
||||
{if $related_categories|@count < 1}
|
||||
<span class="orphan-photo">{'This photo is an orphan'|@translate}</span>
|
||||
{else}
|
||||
<span class="orphan-photo"></span>
|
||||
{/if}
|
||||
<br>
|
||||
<select class="invisible-related-categories-select" name="associate[]" multiple>
|
||||
{foreach from=$related_categories item=cat_path key=key}
|
||||
<option selected value="{$key}"></option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<div class="related-categories-container">
|
||||
{foreach from=$related_categories item=cat_path key=key}
|
||||
<div class="breadcrumb-item"><span class="link-path">{$cat_path['name']}</span>{if $cat_path['unlinkable']}<span id={$key} class="icon-cancel-circled remove-item"></span>{else}<span id={$key} class="icon-help-circled help-item tiptip" title="{'This picture is physically linked to this album, you can\'t dissociate them'|translate}"></span>{/if}</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="breadcrumb-item linked-albums add-item {if $related_categories|@count < 1 } highlight {/if}"><span class="icon-plus-circled"></span>{'Add'|translate}</div>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Representation of albums'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="categories" data-value="{$represented_albums|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="represent[]" multiple style="width:calc(100% + 2px);"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Tags'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="tags" data-value="{$tag_selection|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-create="true" name="tags[]" multiple style="width:calc(100% + 2px);"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Description'|@translate}</strong>
|
||||
<br>
|
||||
<textarea name="comment" id="description" class="description">{$DESCRIPTION}</textarea>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Who can see this photo?'|@translate}</strong> ({'Privacy level'|translate})
|
||||
<br>
|
||||
<div class='select-icon icon-down-open'> </div>
|
||||
<select name="level" size="1">
|
||||
{html_options options=$level_options selected=$level_options_selected}
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
<div class="savebar-footer-block">
|
||||
{if isset($U_JUMPTO)}
|
||||
<a class="savebar-see-out" href="{$U_JUMPTO}" ><i class="icon-left-open"></i>{'Open in gallery'|@translate}</a>
|
||||
{else}
|
||||
<a class="savebar-see-out tiptip disabled" href="#" title="{'You don\'t have access to this photo'|translate}"><i class="icon-left-open"></i>{'Open in gallery'|translate}</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit"><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
{include file='include/album_selector.inc.tpl'}
|
||||
|
||||
<style>
|
||||
.selectize-input .item,
|
||||
.selectize-input .item.active {
|
||||
background-image:none !important;
|
||||
background-color: #ffa646 !important;
|
||||
border-color: transparent !important;
|
||||
color: black !important;
|
||||
|
||||
border-radius: 20px !important;
|
||||
}
|
||||
|
||||
.selectize-input .item .remove,
|
||||
.selectize-input .item .remove {
|
||||
background-color: transparent !important;
|
||||
border-top-right-radius: 20px !important;
|
||||
border-bottom-right-radius: 20px !important;
|
||||
color: black !important;
|
||||
|
||||
border-left: 1px solid transparent !important;
|
||||
|
||||
}
|
||||
.selectize-input .item .remove:hover,
|
||||
.selectize-input .item .remove:hover {
|
||||
background-color: #ff7700 !important;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,201 @@
|
||||
{combine_script id='jquery.ajaxmanager' load='footer' require='jquery' path='themes/default/js/plugins/jquery.ajaxmanager.js' }
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.cookie' path='themes/default/js/jquery.cookie.js' load='footer'}
|
||||
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_script id='tiptip' load='header' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
|
||||
{combine_script id='pluginInstallated' load='footer' require='jquery.ajaxmanager' path='admin/themes/default/js/plugins_installated.js'}
|
||||
|
||||
{footer_script}
|
||||
/* incompatible message */
|
||||
var incompatible_msg = '{'WARNING! This plugin does not seem to be compatible with this version of Piwigo.'|@translate|@escape:'javascript'}';
|
||||
var activate_msg = '\n{'Do you want to activate anyway?'|@translate|@escape:'javascript'}';
|
||||
var deactivate_all_msg = '{'Deactivate all'|@translate}';
|
||||
|
||||
/* group action */
|
||||
const pwg_token = '{$PWG_TOKEN}';
|
||||
const nb_plugin = {
|
||||
'all' : {$count_types_plugins["active"]} + {$count_types_plugins["inactive"]} + {$count_types_plugins["missing"]} + {$count_types_plugins["merged"]},
|
||||
'active' : {$count_types_plugins["active"]},
|
||||
'inactive' : {$count_types_plugins["inactive"]},
|
||||
'other' : {$count_types_plugins["missing"]} + {$count_types_plugins["merged"]},
|
||||
};
|
||||
const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
let delete_plugin_msg = '{'Are you sure you want to delete the plugin "%s"?'|@translate|@escape:'javascript'}';
|
||||
let deleted_plugin_msg = '{'Plugin "%s" deleted!'|@translate|@escape:'javascript'}';
|
||||
let restore_plugin_msg = '{'Are you sure you want to restore the plugin "%s"?'|@translate|@escape:'javascript'}';
|
||||
let uninstall_plugin_msg = '{'Are you sure you want to uninstall the plugin "%s"?'|@translate|@escape:'javascript'}';
|
||||
const restore_tip_msg = "{'Restore default configuration. You will lose your plugin settings!'|@translate|@escape:'javascript'}";
|
||||
const plugin_added_str = '{'Activated'|@translate|@escape:'javascript'}';
|
||||
const plugin_deactivated_str = '{'Deactivated'|@translate|@escape:'javascript'}';
|
||||
const plugin_restored_str = '{'Restored'|@translate|@escape:'javascript'}';
|
||||
const plugin_action_error = '{'an error happened'|@translate|@escape:'javascript'}';
|
||||
const not_webmaster = '{'Webmaster status required'|@translate|@escape:'javascript'}';
|
||||
const nothing_found = '{'No plugins found'|@translate|@escape:'javascript'}';
|
||||
const x_plugins_found = '{'%s plugins found'|@translate|@escape:'javascript'}';
|
||||
const plugin_found = '{'%s plugin found'|@translate|@escape:'javascript'}';
|
||||
const isWebmaster = {$isWebmaster};
|
||||
const view_selector = '{$view_selector}';
|
||||
const str_restore_def = '{'While restoring this plugin, it will be reset to its original parameters and associated data is going to be reset'|@translate|@escape:'javascript'}';
|
||||
|
||||
const show_details = {if $show_details} true {else} false {/if};
|
||||
|
||||
let searchParams = new URLSearchParams(window.location.search);
|
||||
let plugin_filter = searchParams.get('filter');
|
||||
{/footer_script}
|
||||
|
||||
{if isset($plugins)}
|
||||
|
||||
{assign var='field_name' value='null'} {* <!-- 'counter' for fieldset management --> *}
|
||||
{counter start=0 assign=i} {* <!-- counter for 'deactivate all' link --> *}
|
||||
|
||||
<div class="pluginTypeFilter">
|
||||
<input type="radio" name="p-filter" class="filter" id="seeAll" {if $count_types_plugins["active"] <= 0} checked {/if}><label for="seeAll">{'All'|@translate}<span class="filter-badge">X</span></label><input type="radio" name="p-filter" class="filter" id="seeActive" {if $count_types_plugins["active"] > 0} checked {/if}><label class="filterLabel" for="seeActive">{'Activated'|@translate}<span class="filter-badge">X</span></label><input type="radio" name="p-filter" class="filter" id="seeInactive"><label class="filterLabel" for="seeInactive">{'Deactivated'|@translate}<span class="filter-badge">X</span></label><input type="radio" name="p-filter" class="filter" id="seeOther"><label class="filterLabel" for="seeOther">{'Other'|@translate}<span class="filter-badge">X</span></label>
|
||||
</div>
|
||||
|
||||
<div class="nbPluginsSearch"></div>
|
||||
|
||||
<div class="pluginFilter">
|
||||
<span class="icon-search search-icon"></span>
|
||||
<span class="icon-cancel search-cancel"></span>
|
||||
<input class='search-input' type="text" placeholder="{'Search'|@translate}">
|
||||
</div>
|
||||
|
||||
<div class="AlbumViewSelector">
|
||||
<input type="radio" name="layout" class="switchLayout" id="displayClassic" {if $view_selector == 'classic'}checked{/if}/><label for="displayClassic"><span class="icon-pause firstIcon tiptip" title="{'Classic View'|translate}"></span></label><input type="radio" name="layout" class="switchLayout" id="displayLine" {if $view_selector== 'line'}checked{/if}/><label for="displayLine"><span class="icon-th-list tiptip" title="{'Line View'|translate}"></span></label><input type="radio" name="layout" class="switchLayout" id="displayCompact" {if $view_selector == 'compact'}checked{/if}/><label for="displayCompact"><span class="icon-th-large lastIcon tiptip" title="{'Compact View'|translate}"></span></label>
|
||||
</div>
|
||||
|
||||
<div class="pluginContainer {if $view_selector == 'classic'} classic-form {elseif $view_selector == 'line'} line-form {elseif $view_selector == 'compact'} compact-form {else} {/if}">
|
||||
|
||||
{foreach from=$plugins item=plugin name=plugins_loop}
|
||||
|
||||
{if not empty($plugin.AUTHOR)}
|
||||
{if not empty($plugin.AUTHOR_URL)}
|
||||
{assign var='author' value="<a href='%s'>%s</a>"|@sprintf:$plugin.AUTHOR_URL:$plugin.AUTHOR}
|
||||
{else}
|
||||
{assign var='author' value='<u>'|cat:$plugin.AUTHOR|cat:'</u>'}
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{if not empty($plugin.VISIT_URL)}
|
||||
{assign var='version' value="<a class='externalLink' href='"|cat:$plugin.VISIT_URL|cat:"'>"|cat:$plugin.VERSION|cat:"</a>"}
|
||||
{else}
|
||||
{assign var='version' value=$plugin.VERSION}
|
||||
{/if}
|
||||
|
||||
<div id="{$plugin.ID}" class="pluginBox pluginMiniBox {$plugin.STATE} plugin-{$plugin.STATE}">
|
||||
|
||||
<div class="AddPluginSuccess pluginNotif">
|
||||
<label class="icon-ok">
|
||||
<span>{'Plugin activated'|@translate}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="DeactivatePluginSuccess pluginNotif">
|
||||
<label class="icon-ok">
|
||||
<span>{'Plugin deactivated'|@translate}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="RestorePluginSuccess pluginNotif">
|
||||
<label class="icon-ok">
|
||||
<span>{'Plugin deactivated'|@translate}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="PluginActionError pluginNotif">
|
||||
<label class="icon-cancel">
|
||||
<span>{'Plugin deactivated'|@translate}</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="pluginContent">
|
||||
<div class="PluginOptionsIcons">
|
||||
{if $plugin.STATE == 'active' || $plugin.STATE == 'inactive'}
|
||||
<a class="icon-ellipsis-v showOptions showInfo" ></a>
|
||||
{/if}
|
||||
</div>
|
||||
{if $plugin.STATE == 'active' || $plugin.STATE == 'inactive'}
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleSelectionMode" {if {$plugin.STATE} === "active"}checked{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
{/if}
|
||||
|
||||
<div class="pluginActionsSmallIcons">
|
||||
{if $plugin.STATE == 'active'}
|
||||
{if $plugin.SETTINGS_URL != ''}
|
||||
<div class="tiptip" title="{'Settings'|@translate}">
|
||||
<a href="{$plugin.SETTINGS_URL}"><span class="icon-cog"></span></a>
|
||||
</div>
|
||||
{else}
|
||||
<div class="tiptip" title="{'N/A'|translate}">
|
||||
<a><i class="icon-cog"></i></a>
|
||||
</div>
|
||||
{/if}
|
||||
{elseif $plugin.STATE == 'inactive'}
|
||||
{if $plugin.SETTINGS_URL != ''}
|
||||
<div class="tiptip" title="{'Settings'|@translate}">
|
||||
<a href="{$plugin.SETTINGS_URL}"><span class="icon-cog"></span></a>
|
||||
</div>
|
||||
{else}
|
||||
<div class="tiptip" title="{'N/A'|@translate}">
|
||||
<a><i class="icon-cog"></i></a>
|
||||
</div>
|
||||
{/if}
|
||||
{elseif $plugin.STATE == 'missing'}
|
||||
<div class="tiptip" title="{'Uninstall'|@translate}">
|
||||
<a class="uninstall-plugin-button">{'Uninstall'|@translate}</a>
|
||||
</div>
|
||||
{elseif $plugin.STATE == 'merged' and $CONF_ENABLE_EXTENSIONS_INSTALL}
|
||||
<div class="tiptip" title="{'Delete'|@translate}">
|
||||
<a class="" href="{$plugin.U_ACTION}&action=delete">{'Delete'|@translate}</a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="PluginOptionsBlock dropdown">
|
||||
<div class="dropdown-option-content"> {if !empty($author)}{'By %s'|@translate:$author} | {/if}{'Version'|@translate} {$version}</div>
|
||||
<div class="pluginDescCompact">
|
||||
{$plugin.DESC}
|
||||
</div>
|
||||
<a class="dropdown-option icon-back-in-time plugin-restore separator-top tiptip" title="{'While restoring this plugin, it will be reset to its original parameters and associated data is going to be reset'|@translate}">{'Restore'|@translate}</a>
|
||||
{if $CONF_ENABLE_EXTENSIONS_INSTALL}
|
||||
<a class="dropdown-option icon-trash delete-plugin-button separator-top">{'Delete'|@translate}</a>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="pluginName" data-title="{$plugin.NAME}">
|
||||
{$plugin.NAME}
|
||||
</div>
|
||||
<div class="pluginDesc">
|
||||
{$plugin.DESC}
|
||||
</div>
|
||||
<div class="pluginActions">
|
||||
{if $plugin.STATE == 'active'}
|
||||
{if $plugin.SETTINGS_URL != ''}
|
||||
<a href="{$plugin.SETTINGS_URL}" class="pluginActionLevel1 icon-cog">{'Settings'|@translate}</a>
|
||||
{else}
|
||||
<a class="pluginUnavailableAction icon-cog tiptip" title="{'N/A'|translate}">{'Settings'|@translate}</a>
|
||||
{/if}
|
||||
{elseif $plugin.STATE == 'inactive'}
|
||||
{if $plugin.SETTINGS_URL != ''}
|
||||
<a href="{$plugin.SETTINGS_URL}" class="pluginUnavailableAction icon-cog">{'Settings'|@translate}</a>
|
||||
{else}
|
||||
<a class="pluginUnavailableAction icon-cog tiptip" title="{'N/A'|translate}">{'Settings'|@translate}</a>
|
||||
{/if}
|
||||
{elseif $plugin.STATE == 'missing'}
|
||||
<a class="pluginActionLevel3 uninstall-plugin-button">{'Uninstall'|@translate}</a>
|
||||
{elseif $plugin.STATE == 'merged' and $CONF_ENABLE_EXTENSIONS_INSTALL}
|
||||
<a class="pluginActionLevel3" href="{$plugin.U_ACTION}&action=delete">{'Delete'|@translate}</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -0,0 +1,215 @@
|
||||
{combine_script id='jquery.sort' load='footer' path='themes/default/js/plugins/jquery.sort.js'}
|
||||
|
||||
{combine_script id='jquery.ui.slider' require='jquery.ui' load='header' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_script id='pluginsNew' load='footer' require='jquery.ui.effect-blind,jquery.sort' path='admin/themes/default/js/plugins_new.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
|
||||
{footer_script}
|
||||
const str_confirm_msg = "{"Yes, I am sure"|@translate}";
|
||||
const str_cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
const str_install_title = "{'Are you sure you want to install the plugin "%s"?'|@translate|@escape:'javascript'}";
|
||||
const strs_certification = {
|
||||
"-1" : "{'This plugin is incompatible with your version'|@translate}",
|
||||
"0" : "{'This plugin have no update since 3 years ! It may be outdated'|@translate}",
|
||||
"1" : "{'This plugin has no recent update'|@translate}",
|
||||
"2" : "{'This plugin was updated less than 6 months ago'|@translate}",
|
||||
"3" : "{'This plugin have been updated recently'|@translate}",
|
||||
};
|
||||
const str_x_month = "{"%d month"|@translate}";
|
||||
const str_x_months = "{"%d months"|@translate}";
|
||||
const str_x_year = "{"%d year"|@translate}";
|
||||
const str_x_years = "{"%d years"|@translate}";
|
||||
const str_from_begining = "{"since the beginning"|@translate}";
|
||||
{/footer_script}
|
||||
|
||||
<div class="titrePage">
|
||||
<div class="sort">
|
||||
<div class="sort-actions">
|
||||
<div class="beta-test-plugin-switch tiptip" title="{'Show plugins compatible with previous version of Piwigo'|translate|escape:html}">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="showBetaTestPlugin" {if $BETA_TEST}checked{/if}>
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<label for='showBetaTestPlugin'>{'Show beta test plugins'|@translate}</label>
|
||||
</div>
|
||||
|
||||
<div class="sort-by">
|
||||
<label>{'Sort order'|@translate}</label>
|
||||
<div class="select-container">
|
||||
{html_options name="selectOrder" options=$order_options selected=$order_selected}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-btn icon-filter"> <span>{'Filters'|@translate}</span></div>
|
||||
|
||||
<div id="search-plugin">
|
||||
<span class="icon-search search-icon"> </span>
|
||||
<span class="icon-cancel search-cancel"></span>
|
||||
<input class="search-input" type="text" placeholder="{'Search'|@translate}" id="search">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter advanced-filter-new-plugin">
|
||||
<div class="advanced-filter-header">
|
||||
<span class="advanced-filter-title">{'Advanced filters'|@translate}</span>
|
||||
<span class="advanced-filter-close icon-cancel"></span>
|
||||
</div>
|
||||
<div class="advanced-filter-container">
|
||||
|
||||
<div class="advanced-filter-item advanced-filter-author">
|
||||
<label class="advanced-filter-item-label" for="author-filter">{'Author'|@translate}</label>
|
||||
<div class="advanced-filter-item-container">
|
||||
<select name="author-filter" id="author-filter"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-item advanced-filter-tag">
|
||||
<label class="advanced-filter-item-label" for="tag-filter">{'Tag'|@translate}</label>
|
||||
<div class="advanced-filter-item-container">
|
||||
<select name="tag-filter" id="tag-filter"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-item advanced-filter-rating">
|
||||
<label class="advanced-filter-item-label" for="notation-filter">
|
||||
{'Rating greater than'|@translate}
|
||||
<span class="rating-star-container">
|
||||
<span data-star="0"><i></i></span>
|
||||
<span data-star="1"><i></i></span>
|
||||
<span data-star="2"><i></i></span>
|
||||
<span data-star="3"><i></i></span>
|
||||
<span data-star="4"><i></i></span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="advanced-filter-item-container">
|
||||
<div id="notation-filter" class="select-bar"></div>
|
||||
<div class="slider-bar-wrapper">
|
||||
<div class="slider-bar-container notation-filter-slider"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-item advanced-filter-revision-date">
|
||||
<label class="advanced-filter-item-label" for="revision-date-filter">
|
||||
{'Last revision date is newer than'|@translate}<span class="revision-date"></span>
|
||||
</label>
|
||||
<div class="advanced-filter-item-container">
|
||||
<div id="revision-date" class="select-bar"></div>
|
||||
<div class="slider-bar-wrapper">
|
||||
<div class="slider-bar-container revision-date-filter-slider"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="advanced-filter-item advanced-filter-certification">
|
||||
<label class="advanced-filter-item-label" for="certification-filter">
|
||||
{'Certification higher or equal to'|@translate}
|
||||
<span><i class="certification tiptip" title=""></i></span>
|
||||
</label>
|
||||
<div class="advanced-filter-item-container">
|
||||
<div id="certification-filter" class="select-bar"></div>
|
||||
<div class="slider-bar-wrapper">
|
||||
<div class="slider-bar-container certification-filter-slider"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if not empty($plugins)}
|
||||
<div id="availablePlugins">
|
||||
|
||||
{assign var='color_tab' value=["icon-red", "icon-blue", "icon-yellow", "icon-purple", "icon-green"]}
|
||||
|
||||
{foreach from=$plugins item=plugin name=plugins_loop}
|
||||
<div class="pluginBox pluginBigBox" id="plugin_{$plugin.ID}"
|
||||
data-id="{$plugin.ID}"
|
||||
data-date="{$plugin.ID}"
|
||||
data-name="{$plugin.EXT_NAME}"
|
||||
data-revision="{$plugin.REVISION_DATE}"
|
||||
data-downloads="{$plugin.DOWNLOADS}"
|
||||
data-author="{$plugin.AUTHOR}"
|
||||
data-tags="{$plugin.TAGS|join:", "}"
|
||||
>
|
||||
<div class="pluginContent">
|
||||
<div class="pluginImage">
|
||||
{if $plugin.SCREENSHOT == ''}
|
||||
<span class="noImage {$color_tab[$plugin.ID%5]}"><i class="icon-puzzle"></i></span>
|
||||
{else}
|
||||
<span class="screenshot" style="background-image: url({$plugin.SCREENSHOT});"></span>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="pluginInfo">
|
||||
<div>
|
||||
<div class="pluginName">
|
||||
<span title="{$plugin.EXT_NAME}">{$plugin.EXT_NAME}</span>
|
||||
<i class="certification tiptip" data-certification={$plugin.CERTIFICATION}
|
||||
{if $plugin.CERTIFICATION == 3}
|
||||
title="{'This plugin have been updated recently'|@translate}"
|
||||
{elseif $plugin.CERTIFICATION == 2}
|
||||
title="{'This plugin was updated less than 6 months ago'|@translate}"
|
||||
{elseif $plugin.CERTIFICATION == 1}
|
||||
title="{'This plugin has no recent update'|@translate}"
|
||||
{elseif $plugin.CERTIFICATION == 0}
|
||||
title="{'This plugin have no update since 3 years ! It may be outdated'|@translate}"
|
||||
{elseif $plugin.CERTIFICATION == -1}
|
||||
title="{'This plugin is incompatible with your version'|@translate}"
|
||||
{/if}
|
||||
></i>
|
||||
</div>
|
||||
<div class="pluginAuthorVersion">{'by %s'|@translate:$plugin.AUTHOR}</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{if !is_null($plugin.RATING)}
|
||||
<div class="pluginRating tiptip" data-rating="{$plugin.RATING}" title="{'On %d rating(s)'|@translate:$plugin.NB_RATINGS}">
|
||||
<div class="rating-star-container">
|
||||
<span data-star="0"><i></i></span>
|
||||
<span data-star="1"><i></i></span>
|
||||
<span data-star="2"><i></i></span>
|
||||
<span data-star="3"><i></i></span>
|
||||
<span data-star="4"><i></i></span>
|
||||
</div>
|
||||
<span class="rating">{$plugin.RATING}</span>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="pluginDownload tiptip" title="{$plugin.DOWNLOADS} {'Downloads'|@translate}"><i class="icon-download">{$plugin.DOWNLOADS}</i></div>
|
||||
<div class="pluginVersion tiptip" title="{$plugin.REVISION_FORMATED_DATE}"><i class="icon-flow-branch"></i>{'Version %s'|@translate:$plugin.VERSION}</div>
|
||||
<a class="pluginLink" href="{$plugin.EXT_URL}"><i class="icon-link"></i>{'Website'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<div class="pluginInstall">
|
||||
<a class="buttonLike buttonInstall" href="{$plugin.URL_INSTALL}"><i class="icon-plus-circled"></i>{'Add'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pluginMoreInfo">
|
||||
<div class="pluginTags tiptip" title="{'Tags'|@translate} : {$plugin.TAGS|join:", "}">
|
||||
{foreach from=$plugin.TAGS key=tag_id item=tag_label}
|
||||
<span data-id="{$tag_id}">{$tag_label}</span>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="pluginDesc" >
|
||||
{$plugin.BIG_DESC|@nl2br}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{else}
|
||||
<p>{'There is no other plugin available.'|@translate}
|
||||
{if isset($BETA_URL)}
|
||||
<a href="{$BETA_URL}" class="buttonLike icon-fire">{'Show beta test plugins'|@translate}</a>
|
||||
{/if}
|
||||
</p>
|
||||
{/if}
|
||||
@@ -0,0 +1,12 @@
|
||||
<div id="content" class="content">
|
||||
{$HELP_CONTENT}
|
||||
</div> <!-- content -->
|
||||
|
||||
<ul class="categoryActions">
|
||||
<li>
|
||||
<a href="#" onclick="window.close();" title="{'Close this window'|@translate}">
|
||||
<img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/exit.png" alt="exit">
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{footer_script}
|
||||
{* <!-- CATEGORIES --> *}
|
||||
var categoriesCache = new CategoriesCache({
|
||||
serverKey: '{$CACHE_KEYS.categories}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'));
|
||||
|
||||
jQuery("#removeAlbumFilter").click(function() {
|
||||
jQuery("select[name=cat]")[0].selectize.setValue(null);
|
||||
return false;
|
||||
});
|
||||
|
||||
function checkCatFilter() {
|
||||
if (jQuery("select[name=cat]").val() == "") {
|
||||
jQuery("#removeAlbumFilter").hide();
|
||||
}
|
||||
else {
|
||||
jQuery("#removeAlbumFilter").show();
|
||||
}
|
||||
}
|
||||
|
||||
checkCatFilter();
|
||||
jQuery("select[name=cat]").change(function(){
|
||||
checkCatFilter();
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$('h1').append("<span class='badge-number'>{$NB_ELEMENTS}</span>")
|
||||
});
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<form action="{$F_ACTION}" method="GET" class="filter">
|
||||
<fieldset>
|
||||
<legend><span class="icon-filter icon-green"></span>{'Filter'|@translate}</legend>
|
||||
|
||||
<label>
|
||||
{'Sort by'|@translate}
|
||||
<select name="order_by">
|
||||
{html_options options=$order_by_options selected=$order_by_options_selected}
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
{'Users'|@translate}
|
||||
<select name="users">
|
||||
{html_options options=$user_options selected=$user_options_selected}
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
{'Number of items'|@translate}
|
||||
<input type="text" name="display" size="2" value="{$DISPLAY}">
|
||||
</label>
|
||||
|
||||
<label>
|
||||
{'Album'|translate}<a href="#" id="removeAlbumFilter" class="icon-cancel-circled"></a>
|
||||
<select
|
||||
data-selectize="categories"
|
||||
data-value="{$category|@json_encode|escape:html}"
|
||||
placeholder="{'No filter on album. Select one or type to search'|translate}"
|
||||
name="cat"
|
||||
style="width:400px"
|
||||
></select>
|
||||
</label>
|
||||
|
||||
<div style="clear:both"></div>
|
||||
|
||||
<p style="margin:10px 0 0 0">
|
||||
<button name="submit" type="submit" class="buttonLike">
|
||||
<i class="icon-filter"></i> {'Submit'|translate}
|
||||
</button>
|
||||
</p>
|
||||
<input type="hidden" name="page" value="rating">
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
|
||||
<table width="99%">
|
||||
<tr class="throw">
|
||||
<td>{'File'|@translate}</td>
|
||||
<td>{'Number of rates'|@translate}</td>
|
||||
<td>{'Rating score'|@translate}</td>
|
||||
<td>{'Average rate'|@translate}</td>
|
||||
<td>{'Sum of rates'|@translate}</td>
|
||||
<td>{'Rate'|@translate}/{'Username'|@translate}/{'Rate date'|@translate}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
{foreach from=$images item=image name=image}
|
||||
<tr valign="top" class="{if $smarty.foreach.image.index is odd}row1{else}row2{/if}">
|
||||
<td><a href="{$image.U_URL}"><img src="{$image.U_THUMB}" alt="{$image.FILE}" title="{$image.FILE}"></a></td>
|
||||
<td><strong>{$image.NB_RATES}/{$image.NB_RATES_TOTAL}</strong></td>
|
||||
<td><strong>{$image.SCORE_RATE}</strong></td>
|
||||
<td><strong>{$image.AVG_RATE}</strong></td>
|
||||
<td style="border-right:1px solid" ><strong>{$image.SUM_RATE}</strong></td>
|
||||
<td>
|
||||
<table style="width:100%">
|
||||
{foreach from=$image.rates item=rate name=rate}
|
||||
<tr>
|
||||
<td>{$rate.rate}</td>
|
||||
<td><b>{$rate.USER}</b></td>
|
||||
<td>{$rate.date}</td>
|
||||
<td><a onclick="return del(this,{$image.id},{$rate.user_id}{if !empty({$rate.anonymous_id})},'{$rate.anonymous_id}'{/if})" class="icon-trash"> </a></td>
|
||||
</tr>
|
||||
{/foreach}{*rates*}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{/foreach}{*images*}
|
||||
</table>
|
||||
{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
|
||||
{footer_script}
|
||||
function del(node,id,uid,aid){
|
||||
var tr = jQuery(node).parents("tr").first().fadeTo(1000, 0.4),
|
||||
data = {
|
||||
image_id: id,
|
||||
user_id: uid
|
||||
};
|
||||
if (aid)
|
||||
data.anonymous_id = aid;
|
||||
|
||||
(new PwgWS('{$ROOT_URL|@escape:javascript}')).callService(
|
||||
'pwg.rates.delete', data,
|
||||
{
|
||||
method: 'POST',
|
||||
onFailure: function(num, text) { tr.stop(); tr.fadeTo(0,1); alert(num + " " + text); },
|
||||
onSuccess: function(result){
|
||||
if (result)
|
||||
tr.remove();
|
||||
else
|
||||
alert(result);
|
||||
}
|
||||
}
|
||||
);
|
||||
return false;
|
||||
}
|
||||
{/footer_script}
|
||||
|
||||
{if !empty($navbar)}{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
|
||||
@@ -0,0 +1,242 @@
|
||||
{combine_script id='jquery.dataTables' load='footer' path='themes/default/js/plugins/jquery.dataTables.js'}
|
||||
{html_style}
|
||||
.sorting { background: url({$ROOT_URL}themes/default/js/plugins/datatables/images/sort_both.png) no-repeat center right; cursor:pointer; }
|
||||
.sorting_asc { background: url({$ROOT_URL}themes/default/js/plugins/datatables/images/sort_asc.png) no-repeat center right; }
|
||||
.sorting_desc { background: url({$ROOT_URL}themes/default/js/plugins/datatables/images/sort_desc.png) no-repeat center right; }
|
||||
|
||||
.sorting, .sorting_asc, .sorting_desc {
|
||||
padding: 3px 18px 3px 10px;
|
||||
}
|
||||
.sorting_asc_disabled { background: url({$ROOT_URL}themes/default/js/plugins/datatables/images/sort_asc_disabled.png) no-repeat center right; }
|
||||
.sorting_desc_disabled { background: url({$ROOT_URL}themes/default/js/plugins/datatables/images/sort_desc_disabled.png) no-repeat center right; }
|
||||
|
||||
.dtBar {
|
||||
text-align:left;
|
||||
padding: 10px 0 10px 20px
|
||||
}
|
||||
.dtBar DIV{
|
||||
display:inline;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.dataTables_paginate A {
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
.ui-tooltip {
|
||||
padding: 8px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
max-width: {3*$TN_WIDTH}px;
|
||||
-webkit-box-shadow: 0 0 5px #aaa;
|
||||
box-shadow: 0 0 5px #aaa;
|
||||
}
|
||||
body .ui-tooltip {
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
{/html_style}
|
||||
{footer_script}
|
||||
$(document).ready(function() {
|
||||
$('h1').append("<span class='badge-number'>{$NB_ELEMENTS}</span>")
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<form action="{$F_ACTION}" method="GET">
|
||||
<fieldset>
|
||||
<noscript>
|
||||
<label>{'Sort by'|@translate}
|
||||
<select name="order_by">
|
||||
{html_options options=$order_by_options selected=$order_by_options_selected}
|
||||
</select>
|
||||
</label>
|
||||
</noscript>
|
||||
<label>{'Number of rates'|@translate}>
|
||||
<input type="text" size="5" name="f_min_rates" value="{$F_MIN_RATES}">
|
||||
</label>
|
||||
<label>{'Consensus deviation'|@translate}
|
||||
<input type="text" size="5" name="consensus_top_number" value="{$CONSENSUS_TOP_NUMBER}">
|
||||
{'Best rated'|@translate}
|
||||
|
||||
</label>
|
||||
|
||||
<div style="clear:both"></div>
|
||||
|
||||
<p style="margin:10px 0 0 0">
|
||||
<button name="submit" type="submit" class="buttonLike">
|
||||
<i class="icon-filter"></i> {'Submit'|translate}
|
||||
</button>
|
||||
</p>
|
||||
<input type="hidden" name="page" value="rating_user">
|
||||
</fieldset>
|
||||
</form>
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
|
||||
{combine_script id='jquery.geoip' load='async' path='admin/themes/default/js/jquery.geoip.js'}
|
||||
{footer_script}
|
||||
jQuery('#rateTable').dataTable({
|
||||
dom : '<"dtBar"filp>rt<"dtBar"ilp>',
|
||||
pageLength: 100,
|
||||
lengthMenu: [ [25, 50, 100, 500, -1], [25, 50, 100, 500, "All"]],
|
||||
sorting: [], //[[1,'desc']],
|
||||
autoWidth: false,
|
||||
sortClasses: false,
|
||||
columnDefs: [
|
||||
{
|
||||
aTargets: ["dtc_user"],
|
||||
sType: "string",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_date"],
|
||||
asSorting: ["desc","asc"],
|
||||
sType: "string",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_stat"],
|
||||
asSorting: ["desc","asc"],
|
||||
bSearchable: false,
|
||||
sType: "numeric",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_rate"],
|
||||
asSorting: ["desc","asc"],
|
||||
bSearchable: false,
|
||||
sType: "html",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_del"],
|
||||
bSortable: false,
|
||||
bSearchable: false,
|
||||
sType: "string",
|
||||
sClass: null
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
var oTable = jQuery('#rateTable').DataTable();
|
||||
|
||||
function uidFromCell(cell){
|
||||
var tr = cell;
|
||||
while ( tr.nodeName != "TR") tr = tr.parentNode;
|
||||
return $(tr).data("usr");
|
||||
}
|
||||
|
||||
{* -----DELETE----- *}
|
||||
$(document).ready( function(){
|
||||
$("#rateTable").on( "click", ".del", function(e) {
|
||||
e.preventDefault();
|
||||
const title_msg = '{'Are you sure you want to delete the ratings of the user "%s"?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
let usr_name = $(this).closest("tr").find(".usr").html();
|
||||
$.confirm({
|
||||
title: title_msg.replace("%s", usr_name),
|
||||
buttons: {
|
||||
confirm: {
|
||||
text: confirm_msg,
|
||||
btnClass: 'btn-red',
|
||||
action: function () {
|
||||
var cell = e.target.parentNode,
|
||||
tr = cell;
|
||||
while ( tr.nodeName != "TR") tr = tr.parentNode;
|
||||
tr = jQuery(tr).fadeTo(1000, 0.4);
|
||||
var data=uidFromCell(cell);
|
||||
(new PwgWS('{$ROOT_URL|@escape:javascript}')).callService(
|
||||
'pwg.rates.delete', { user_id:data.uid, anonymous_id:data.aid},
|
||||
{
|
||||
method: 'POST',
|
||||
onFailure: function(num, text) { tr.stop(); tr.fadeTo(0,1); alert(num + " " + text); },
|
||||
onSuccess: function(result){
|
||||
if (result)
|
||||
oTable.row(tr[0]).remove().draw();
|
||||
else
|
||||
alert(result);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
text: cancel_msg
|
||||
}
|
||||
},
|
||||
...jConfirm_confirm_options
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
{/footer_script}
|
||||
<table id="rateTable">
|
||||
<thead>
|
||||
<tr class="throw">
|
||||
<th class="dtc_user">{'Username'|@translate}</th>
|
||||
<th class="dtc_date">{'Last'|@translate}</th>
|
||||
<th class="dtc_stat">{'Number of rates'|@translate}</th>
|
||||
<th class="dtc_stat">{'Average rate'|@translate}</th>
|
||||
<th class="dtc_stat">{'Variation'|@translate}</th>
|
||||
<th class="dtc_stat">{'Consensus deviation'|@translate|@replace:' ':'<br>'}</th>
|
||||
<th class="dtc_stat">{'Consensus deviation'|@translate|@replace:' ':'<br>'} {$CONSENSUS_TOP_NUMBER}</th>
|
||||
{foreach from=$available_rates item=rate}
|
||||
<th class="dtc_rate">{$rate}</th>
|
||||
{/foreach}
|
||||
<th class="dtc_del"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{foreach from=$ratings item=rating key=user}
|
||||
<tr data-usr='{ldelim}"uid":{$rating.uid},"aid":"{$rating.aid}"}'>
|
||||
{strip}
|
||||
<td class=usr>{$user}</td><td title="First: {$rating.first_date}">{$rating.last_date}</td>
|
||||
<td>{$rating.count}</td><td>{$rating.avg|@number_format:2}</td>
|
||||
<td>{$rating.cv|@number_format:3}</td><td>{$rating.cd|@number_format:3}</td><td>{if !empty($rating.cdtop)}{$rating.cdtop|@number_format:3}{/if}</td>
|
||||
{foreach from=$rating.rates item=rates key=rate}
|
||||
<td>{if !empty($rates)}
|
||||
{capture assign=rate_over}{foreach $rates as $rate_arr}{if $rate_arr@index>29}{break}{/if}<img src="{$image_urls[$rate_arr.id].tn}" alt="thumb-{$rate_arr.id}" width="{$TN_WIDTH}" height="{$TN_WIDTH}">{/foreach}{/capture}
|
||||
<a title="{$rate_over|@htmlspecialchars}">{$rates|@count}</a>
|
||||
{/if}</td>
|
||||
{/foreach}
|
||||
<td><a class="del icon-trash"></a></td>
|
||||
</tr>
|
||||
{/strip}
|
||||
{/foreach}
|
||||
</table>
|
||||
|
||||
{combine_script id='jquery.ui.tooltip' load='footer'}
|
||||
{footer_script require='jquery.ui.tooltip'}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("#rateTable").tooltip({
|
||||
items: ".usr,[title]",
|
||||
content: function(callback) {
|
||||
var t = $(this).attr("title");
|
||||
if (t)
|
||||
return t;
|
||||
var that = $(this),
|
||||
udata = uidFromCell(this);
|
||||
if (!udata.aid)
|
||||
return;
|
||||
that
|
||||
.data("isOver", true)
|
||||
.one("mouseleave", function() {
|
||||
that.removeData("isOver");
|
||||
});
|
||||
|
||||
GeoIp.get( udata.aid + ".1", function(data) {
|
||||
if (!data.fullName) return;
|
||||
var content = data.fullName;
|
||||
if (data.latitude && data.region_name) {
|
||||
content += "<br><img width=300 height=220 src=\"http://maps.googleapis.com/maps/api/staticmap?sensor=false&size=300x220&zoom=6"
|
||||
+ "&markers=size:tiny%7C" + data.latitude + "," + data.longitude
|
||||
+ "\">";
|
||||
}
|
||||
if (that.data("isOver"))
|
||||
callback(content);
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
{/footer_script}
|
||||
@@ -0,0 +1,76 @@
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("#showCreateSite a").click(function(){
|
||||
jQuery("#showCreateSite").hide();
|
||||
jQuery("#createSite").show();
|
||||
});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
const title_msg = '{'Are you sure you want to delete this site?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
$(".delete-site-button").each(function() {
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title_msg,
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{if not empty($remote_output)}
|
||||
<div class="remoteOutput">
|
||||
<ul>
|
||||
{foreach from=$remote_output item=remote_line}
|
||||
<li class="{$remote_line.CLASS}">{$remote_line.CONTENT}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if not empty($sites)}
|
||||
<table class="table2">
|
||||
<tr class="throw">
|
||||
<td>{'Directory'|@translate}</td>
|
||||
<td>{'Actions'|@translate}</td>
|
||||
</tr>
|
||||
{foreach from=$sites item=site name=site}
|
||||
<tr style="text-align:left" class="{if $smarty.foreach.site.index is odd}row1{else}row2{/if}"><td>
|
||||
<a href="{$site.NAME}">{$site.NAME}</a><br>({$site.TYPE}, {$site.CATEGORIES} {'Albums'|@translate}, {$pwg->l10n_dec('%d photo','%d photos',$site.IMAGES)})
|
||||
</td><td>
|
||||
[<a href="{$site.U_SYNCHRONIZE}" title="{'update the database from files'|@translate}">{'Synchronize'|@translate}</a>]
|
||||
{if isset($site.U_DELETE)}
|
||||
[<a class="delete-site-button" href="{$site.U_DELETE}" title="{'delete this site and all its attached elements'|@translate}">{'delete'|@translate}</a>]
|
||||
{/if}
|
||||
{if not empty($site.plugin_links)}
|
||||
<br>
|
||||
{foreach from=$site.plugin_links item=plugin_link}
|
||||
[<a href="{$plugin_link.U_HREF}" title='{$plugin_link.U_HINT}'>{$plugin_link.U_CAPTION}</a>]
|
||||
{/foreach}
|
||||
{/if}
|
||||
</td></tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
{/if}
|
||||
|
||||
<p id="showCreateSite" style="text-align:left;margin-left:1em;">
|
||||
<a href="#">{'create a new site'|@translate}</a>
|
||||
</p>
|
||||
|
||||
<form action="{$F_ACTION}" method="post" id="createSite" style="display:none">
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
<fieldset>
|
||||
<legend>{'create a new site'|@translate}</legend>
|
||||
|
||||
<p style="margin-top:0;"><strong>{'Directory'|@translate}</strong>
|
||||
<br><input type="text" name="galleries_url" id="galleries_url">
|
||||
</p>
|
||||
|
||||
<p class="actionButtons">
|
||||
<input class="submit" type="submit" name="submit" value="{'Submit'|@translate}">
|
||||
</p>
|
||||
</form>
|
||||
@@ -0,0 +1,143 @@
|
||||
{footer_script}
|
||||
$('#syncFiles label').click(function () {
|
||||
if ($("input[value='files']:checked").val()) {
|
||||
$("input[value='files']").closest("li").find("ul").show();
|
||||
} else {
|
||||
$("input[value='files']").closest("li").find("ul").hide();
|
||||
}
|
||||
})
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<div class="selectedAlbum site-url-path">
|
||||
<span class="icon-folder-open selectedAlbum-first">{$SITE_URL}</span>
|
||||
</div>
|
||||
|
||||
{if isset($update_result)}
|
||||
<h3>{$L_RESULT_UPDATE}</h3>
|
||||
<ul>
|
||||
<li class="update_summary_new">{$update_result.NB_NEW_CATEGORIES} {'albums added in the database'|@translate}</li>
|
||||
<li class="update_summary_new">{$update_result.NB_NEW_ELEMENTS} {'photos added in the database'|@translate}</li>
|
||||
<li class="update_summary_del">{$update_result.NB_DEL_CATEGORIES} {'albums deleted in the database'|@translate}</li>
|
||||
<li class="update_summary_del">{$update_result.NB_DEL_ELEMENTS} {'photos deleted from the database'|@translate}</li>
|
||||
<li>{$update_result.NB_UPD_ELEMENTS} {'photos updated in the database'|@translate}</li>
|
||||
<li class="update_summary_err">{$update_result.NB_ERRORS} {'errors during synchronization'|@translate}</li>
|
||||
</ul>
|
||||
{/if}
|
||||
|
||||
{if isset($metadata_result)}
|
||||
<h3>{$L_RESULT_METADATA}</h3>
|
||||
<ul>
|
||||
<li>{$metadata_result.NB_ELEMENTS_DONE} {'photos informations synchronized with files metadata'|@translate}</li>
|
||||
<li>{$metadata_result.NB_ELEMENTS_CANDIDATES} {'photos candidates for metadata synchronization'|@translate}</li>
|
||||
<li>{'Used metadata'|@translate} : {$METADATA_LIST}</li>
|
||||
</ul>
|
||||
{/if}
|
||||
|
||||
|
||||
{if not empty($sync_errors)}
|
||||
<h3>{'Error list'|@translate}</h3>
|
||||
<div class="errors">
|
||||
<ul>
|
||||
{foreach from=$sync_errors item=error}
|
||||
<li>[{$error.ELEMENT}] {$error.LABEL}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
<h3>{'Errors caption'|@translate}</h3>
|
||||
<ul>
|
||||
{foreach from=$sync_error_captions item=caption}
|
||||
<li><strong>{$caption.TYPE}</strong>: {$caption.LABEL}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
{/if}
|
||||
|
||||
{if not empty($sync_infos)}
|
||||
<h3>{'Detailed informations'|@translate}</h3>
|
||||
<div class="infos">
|
||||
<ul>
|
||||
{foreach from=$sync_infos item=info}
|
||||
<li>[{$info.ELEMENT}] {$info.LABEL}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($introduction)}
|
||||
<form action="" method="post" id="update">
|
||||
|
||||
<fieldset id="syncFiles">
|
||||
<legend><span class="icon-docs icon-blue"></span>{'synchronize files structure with database'|@translate}</legend>
|
||||
<ul>
|
||||
<li><label><input type="radio" name="sync" value="" {if empty($introduction.sync)}checked="checked"{/if}> {'nothing'|@translate}</label></li>
|
||||
<li><label><input type="radio" name="sync" value="dirs" {if 'dirs'==$introduction.sync}checked="checked"{/if}> {'only directories'|@translate}</label></li>
|
||||
|
||||
<li><label><input type="radio" name="sync" value="files" {if 'files'==$introduction.sync}checked="checked"{/if}> {'directories + files'|@translate}</label>
|
||||
<ul style="display:none;padding-left:3em">
|
||||
<li><label><input type="checkbox" name="display_info" value="1" {if $introduction.display_info}checked="checked"{/if}> {'display maximum informations (added albums and photos, deleted albums and photos)'|@translate}</label></li>
|
||||
<li><label><input type="checkbox" name="add_to_caddie" value="1" {if $introduction.add_to_caddie}checked="checked"{/if}> {'add new photos to caddie'|@translate}</label></li>
|
||||
<li><label>{'Who can see these photos?'|@translate} <select name="privacy_level">{html_options options=$introduction.privacy_level_options selected=$introduction.privacy_level_selected}</select></label></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="syncMetadata">
|
||||
<legend><span class="icon-hdd icon-red"></span>{'synchronize files metadata with database photos informations'|@translate}</legend>
|
||||
<label><input type="checkbox" name="sync_meta" {if $introduction.sync_meta}checked="checked"{/if}> {'Synchronize metadata'|@translate} ({$METADATA_LIST})</label>
|
||||
<ul style="padding-left:3em">
|
||||
<li>
|
||||
<label><input type="checkbox" name="meta_all" {if $introduction.meta_all}checked="checked"{/if}> {'even already synchronized photos'|@translate}</label>
|
||||
</li>
|
||||
<li>
|
||||
<label><input type="checkbox" name="meta_empty_overrides" {if $introduction.meta_empty_overrides}checked="checked"{/if}> {'overrides existing values with empty ones'|@translate}</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="syncSimulate">
|
||||
<legend><span class="icon-chart-bar icon-green"></span>{'Simulation'|@translate}</legend>
|
||||
<ul><li><label><input type="checkbox" name="simulate" value="1" checked="checked"> {'only perform a simulation (no change in database will be made)'|@translate}</label></li></ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="catSubset">
|
||||
<legend><span class="icon-filter icon-purple"></span>{'reduce to single existing albums'|@translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<select class="categoryList" name="cat" size="10">
|
||||
{html_options options=$category_options selected=$category_options_selected}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li><label><input type="checkbox" name="subcats-included" value="1" {if $introduction.subcats_included}checked="checked"{/if}> {'Search in sub-albums'|@translate}</label></li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if isset($save_error)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-warning">
|
||||
<i class="icon-attention"></i>{$save_error}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit"><i class="icon-exchange"></i> {'Synchronize'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
{/if}{*isset $introduction*}
|
||||
@@ -0,0 +1,58 @@
|
||||
{footer_script}
|
||||
var str_number_page_visited = "{'Page Visited'|@translate}";
|
||||
var str_number_page_visited_with_year = "{'Page Visited in %s'|@translate}";
|
||||
var str_tooltip_format = {
|
||||
"years":"YYYY",
|
||||
"months":"MMMM YYYY",
|
||||
"days":"DD MMM",
|
||||
"hours":"LT"
|
||||
};
|
||||
var str_unit_format = {
|
||||
"day":"dddd",
|
||||
"month":"MMM YYYY"
|
||||
}
|
||||
var str_avg = "{'Average last 12 months'|@translate}";
|
||||
var str_months_tosplit = "{$month_labels}";
|
||||
var str_months = str_months_tosplit.split('~');
|
||||
moment.locale("{$langCode}");
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='chart.js' load='footer' path='themes/default/js/plugins/Chart.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/Chart.min.css"}
|
||||
|
||||
{combine_script id='moment-with-locales.js' path='themes/default/js/plugins/moment-with-locales.min.js'}
|
||||
|
||||
{combine_script id='stats' load='footer' path='admin/themes/default/js/stats.js'}
|
||||
|
||||
<div class="stat-compare-mode">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleCompareMode">
|
||||
<span class="slider round" checked="false"></span>
|
||||
</label>
|
||||
{'Compare mode'|@translate}
|
||||
</div>
|
||||
|
||||
<div id="data"
|
||||
data-hours='{json_encode($lastHours)}'
|
||||
data-days='{json_encode($lastDays)}'
|
||||
data-months='{json_encode($lastMonths)}'
|
||||
data-years='{json_encode($lastYears)}'
|
||||
data-compare-years='{json_encode($compareYears)}'
|
||||
data-month-stats='{json_encode($monthStats)}'
|
||||
></div>
|
||||
<div class="stat-legend-container">
|
||||
<div class="stat-data-selector">
|
||||
<input type="radio" id="hours-selector" name="stat-data-type">
|
||||
<label for="hours-selector" data-value="hours">{"Hour"|@translate}</label>
|
||||
<input type="radio" id="days-selector" name="stat-data-type" checked>
|
||||
<label for="days-selector" data-value="days">{"Day"|@translate}</label>
|
||||
<input type="radio" id="months-selector" name="stat-data-type">
|
||||
<label for="months-selector" data-value="months">{"Month"|@translate}</label>
|
||||
<input type="radio" id="years-selector" name="stat-data-type">
|
||||
<label for="years-selector" data-value="years">{"Year"|@translate}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stat-graph-container">
|
||||
<canvas id="stat-graph" width="400" height="150" role="img"><p>Your browser does not support the canvas element.</p></canvas>
|
||||
</div>
|
||||
@@ -0,0 +1,11 @@
|
||||
{if isset($tabsheet) and count($tabsheet)}
|
||||
<div id="tabsheet">
|
||||
<ul class="tabsheet">
|
||||
{foreach from=$tabsheet key=name item=sheet}
|
||||
<li class="{if ($name == $tabsheet_selected)}selected_tab{else}normal_tab{/if}">
|
||||
<a href="{$sheet.url}"><span>{$sheet.caption}</span></a>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -0,0 +1,263 @@
|
||||
{footer_script}
|
||||
var pwg_token = "{$PWG_TOKEN}";
|
||||
var orphan_tag_names = {$orphan_tag_names_array};
|
||||
var str_delete = '{'Delete tag "%s"?'|@translate}';
|
||||
var str_delete_tags = '{'Delete tags \{%s\}?'|@translate}';
|
||||
var str_yes_delete_confirmation = "{'Yes, delete'|@translate}";
|
||||
var str_no_delete_confirmation = "{"No, I have changed my mind"|@translate}";
|
||||
var str_yes_rename_confirmation = "{'Yes, rename'|@translate}";
|
||||
var str_tag_deleted = '{'Tag "%s" succesfully deleted'|@translate}';
|
||||
var str_tags_deleted = '{'Tags \{%s\} succesfully deleted'|@translate}';
|
||||
var str_already_exist = '{'Tag "%s" already exists'|@translate}';
|
||||
var str_tag_created = '{'Tag "%s" created'|@translate}';
|
||||
var str_tag_renamed = '{'Tag "%s1" renamed in "%s2"'|@translate}';
|
||||
var str_tag_rename = '{'Rename "%s"'|@translate}';
|
||||
var str_delete_orphan_tags = '{'Delete orphan tags ?'|@translate}';
|
||||
var str_orphan_tags = '{'You have %s1 orphan : %s2'|@translate}';
|
||||
var str_delete_them = '{'Delete them'|@translate}';
|
||||
var str_keep_them = '{'Keep them'|@translate}';
|
||||
var str_copy = '{' (copy)'|@translate}';
|
||||
var str_other_copy = '{' (copy %s)'|@translate}';
|
||||
var str_merged_into = '{'Tag(s) \{%s1\} succesfully merged into "%s2"'|@translate}';
|
||||
var str_and_others_tags = '{'and %s others'|@translate}';
|
||||
var str_others_tags_available = '{'%s other tags available...'|@translate}'
|
||||
var str_number_photos = '{'%d photos'}'
|
||||
var str_no_photos = '{'no photo'}'
|
||||
var str_select_all_tag = '{'Select all %d tags'|@translate}';
|
||||
var str_clear_selection = '{'Clear Selection'|@translate}';
|
||||
var str_selection_done = '{'The %d tags on this page are selected'|@translate}';
|
||||
var str_tag_selected = '{'<b>%d</b> tag selected'|@translate}';
|
||||
var str_tags_found = '{'<b>%d</b> tags found'|@translate}';
|
||||
var str_tag_found = '{'<b>%d</b> tag found'|@translate}';
|
||||
|
||||
$(document).ready(function() {
|
||||
$("h1").append('<span class="badge-number">{$total}</span>');
|
||||
});
|
||||
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{combine_script id='tiptip' load='header' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
{combine_script id='tags' load='footer' path='admin/themes/default/js/tags.js'}
|
||||
{combine_script id='jquery.cookie' path='themes/default/js/jquery.cookie.js' load='footer'}
|
||||
|
||||
{footer_script}
|
||||
if (!$.cookie("pwg_tags_per_page")) {
|
||||
$.cookie("pwg_tags_per_page", "100");
|
||||
}
|
||||
{/footer_script}
|
||||
|
||||
<meta http-equiv='cache-control' content='no-cache'>
|
||||
<meta http-equiv='expires' content='0'>
|
||||
<meta http-equiv='pragma' content='no-cache'>
|
||||
|
||||
{function name=tagContent}
|
||||
{function tagContent}
|
||||
<p class='tag-name {($tag_raw_name !== $tag_name) ? 'icon-globe' : ''}' data-rawname="{$tag_raw_name}">{$tag_name}</p>
|
||||
<a class="icon-ellipsis-vert showOptions"></a>
|
||||
<div class="tag-dropdown-block dropdown">
|
||||
<div class="dropdown-content">
|
||||
<div class='tag-dropdown-header'>
|
||||
<b>{$tag_name}</b>
|
||||
<i>{if !$has_image}{'no photo'|@translate}{else}{'%d photos'|@translate:$tag_count}{/if}</i>
|
||||
</div>
|
||||
<a class='dropdown-option icon-eye view' href="{$tag_U_VIEW}" {if !$has_image} style='display:none' {/if}> {'View in gallery'|@translate}</a>
|
||||
<a class='dropdown-option icon-picture manage' href="{$tag_U_EDIT}" {if !$has_image} style='display:none' {/if}> {'Manage photos'|@translate}</a>
|
||||
<a class='dropdown-option icon-pencil edit'> {'Edit'|@translate}</a>
|
||||
<a class='dropdown-option icon-docs duplicate'> {'Duplicate'|@translate}</a>
|
||||
<a class='dropdown-option icon-trash delete'> {'Delete'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
<span class="select-checkbox">
|
||||
<i class="icon-ok"> </i>
|
||||
</span>
|
||||
{/function}
|
||||
{/function}
|
||||
|
||||
<div class="selection-mode-group-manager">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="toggleSelectionMode">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<p>{'Selection mode'|@translate}</p>
|
||||
</div>
|
||||
|
||||
<div id="selection-mode-block" class="in-selection-mode tag-selection">
|
||||
<div class="tag-selection-content">
|
||||
|
||||
<p id="nothing-selected">{'No tags selected, no actions possible.'|@translate}</p>
|
||||
|
||||
<div class="selection-mode-tag">
|
||||
<p>{'Your selection'|@translate}</p>
|
||||
<div class="tag-list" data-list='[]'>
|
||||
|
||||
</div>
|
||||
<div class="selection-other-tags"></div>
|
||||
<button id="MergeSelectionMode" class="icon-object-group unavailable" title="{'At least 2 selected tags are needed to merge'|@translate}">{'Merge'|@translate}</button>
|
||||
<button id="DeleteSelectionMode" class="icon-trash-1">{'Delete'|@translate}</button>
|
||||
</div>
|
||||
|
||||
<div id="MergeOptionsBlock">
|
||||
<p>{'Choose which tag to merge these tags into'|@translate}</p>
|
||||
<p class="ItalicTextInfo">{'The other tags will be removed'|@translate}</p>
|
||||
<div class="MergeOptionsContainer">
|
||||
<select id="MergeOptionsChoices">
|
||||
</select>
|
||||
</div>
|
||||
<button class="icon-ok ConfirmMergeButton">Confirm merge</button>
|
||||
<a id="CancelMerge">Cancel</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='tag-header'>
|
||||
<div id='search-tag'>
|
||||
<div class='search-info'> </div>
|
||||
<span class='icon-search search-icon'> </span>
|
||||
<span class="icon-cancel search-cancel"></span>
|
||||
<input class='search-input' type='text' placeholder='{'Search'|@translate}'>
|
||||
</div>
|
||||
<form id='add-tag' class='not-in-selection-mode'>
|
||||
<span class='icon-cancel-circled'></span>
|
||||
<label class='add-tag-label icon-plus-circled {if $total == 0} head-button-1 {else} head-button-2 {/if}'>
|
||||
<p>{'Add a tag'|@translate}</p>
|
||||
<div class='add-tag-container'>
|
||||
<input type='text' id='add-tag-input' placeholder="{'New tag'|@translate}">
|
||||
<input type='submit' hidden>
|
||||
<span class='icon-plus icon-validate'></span>
|
||||
</div>
|
||||
</label>
|
||||
</form>
|
||||
<div class='selection-controller in-selection-mode'>
|
||||
<p>{'Select'|@translate}</p>
|
||||
<a id="selectAll">{'All'|@translate}</a>
|
||||
<a id="selectNone">{'None'|@translate}</a>
|
||||
<a id="selectInvert">{'Invert'|@translate}</a>
|
||||
</div>
|
||||
{if $warning_tags != ""}
|
||||
<div class='info-warning tag-info icon-attention not-in-selection-mode'><p> {$warning_tags} </p></div>
|
||||
{/if}
|
||||
<div class='info-message tag-info icon-ok not-in-selection-mode' {if $message_tags != ""}style='display:flex'{/if}> <p> {$message_tags} </p> </div>
|
||||
<div class='info-error tag-info icon-cancel not-in-selection-mode'> <p> </p> </div>
|
||||
</div>
|
||||
<div class="pageLoad">
|
||||
<i class='icon-spin6 animate-spin'> </i>
|
||||
</div>
|
||||
|
||||
<div class="tag-select-message">
|
||||
<div></div> <a></a>
|
||||
</div>
|
||||
|
||||
<div id="RenameTag" class="RenameTagPopIn">
|
||||
<div class="RenameTagPopInContainer">
|
||||
<a class="icon-cancel ClosePopIn"></a>
|
||||
|
||||
<div class="AddIconContainer">
|
||||
<span class="AddIcon icon-blue icon-tags"></span>
|
||||
</div>
|
||||
<div class="AddIconTitle">
|
||||
<span>{'Rename "%s"'|@translate}</span>
|
||||
</div>
|
||||
<div class="RenameTagInputContainer">
|
||||
<label class="tag-property-label TagRenameLabelUsername">{'Tag name'|@translate}
|
||||
<input type="text" class="tag-property-input"/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="TagErrors icon-cancel">
|
||||
</div>
|
||||
|
||||
<div class="TagSubmitOptions">
|
||||
<div class="TagSubmit">
|
||||
<span>{'Rename Tag'|@translate}</span>
|
||||
</div>
|
||||
|
||||
<div class="TagLoading">
|
||||
<i class='icon-spin6 animate-spin'></i>
|
||||
</div>
|
||||
|
||||
<div class="TagCancel">
|
||||
<span>{'Cancel'|@translate}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='tag-container' data-tags='{$data|@json_encode|escape:html}' data-per_page={$per_page}>
|
||||
{foreach from=$first_tags item=tag}
|
||||
<div class='tag-box' data-id='{$tag.id}' data-selected='0'>
|
||||
{if isset($tag.counter)}
|
||||
{tagContent
|
||||
tag_name = $tag.name
|
||||
tag_U_VIEW = 'index.php?/tags/%s-%s'|@sprintf:$tag['id']:$tag['url_name']
|
||||
tag_U_EDIT = 'admin.php?page=batch_manager&filter=tag-%s'|@sprintf:$tag['id']
|
||||
has_image = ($tag.counter > 0)
|
||||
tag_count = $tag.counter
|
||||
tag_raw_name = $tag.raw_name
|
||||
}
|
||||
{else}
|
||||
{tagContent
|
||||
tag_name = $tag.name
|
||||
tag_U_VIEW = 'index.php?/tags/%s-%s'|@sprintf:$tag['id']:$tag['url_name']
|
||||
tag_U_EDIT = 'admin.php?page=batch_manager&filter=tag-%s'|@sprintf:$tag['id']
|
||||
has_image = false
|
||||
tag_count = 0
|
||||
tag_raw_name = $tag.raw_name
|
||||
}
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="emptyResearch"> {'No tag found'|@translate} </div>
|
||||
<div class="tag-pagination">
|
||||
<div class="pagination-per-page">
|
||||
<span class="thumbnailsActionsShow" style="font-weight: bold;">{'Display'|@translate}</span>
|
||||
<a id="100"
|
||||
{if !isset($smarty.cookies.pwg_tags_per_page) || !$smarty.cookies.pwg_tags_per_page || $smarty.cookies.pwg_tags_per_page == 100}
|
||||
class="selected"
|
||||
{/if}
|
||||
>100</a>
|
||||
<a id="200"
|
||||
{if isset($smarty.cookies.pwg_tags_per_page) && $smarty.cookies.pwg_tags_per_page == 200}
|
||||
class="selected"
|
||||
{/if}
|
||||
>200</a>
|
||||
<a id="500"
|
||||
{if isset($smarty.cookies.pwg_tags_per_page) && $smarty.cookies.pwg_tags_per_page == 500}
|
||||
class="selected"
|
||||
{/if}
|
||||
>500</a>
|
||||
<a id="1000"
|
||||
{if isset($smarty.cookies.pwg_tags_per_page) && $smarty.cookies.pwg_tags_per_page == 1000}
|
||||
class="selected"
|
||||
{/if}
|
||||
>1000</a>
|
||||
</div>
|
||||
|
||||
<div class="pagination-container">
|
||||
<div class="pagination-arrow left">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
<div class="pagination-item-container">
|
||||
</div>
|
||||
<div class="pagination-arrow rigth">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='tag-template' style='display:none'>
|
||||
{tagContent
|
||||
tag_name='%name%'
|
||||
tag_U_VIEW='%U_VIEW%'
|
||||
tag_U_EDIT='%U_EDIT%'
|
||||
has_image=false
|
||||
tag_count='%count%'
|
||||
tag_raw_name = '%raw_name%'
|
||||
}
|
||||
</div>
|
||||
@@ -0,0 +1,156 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
const title_msg = '{'Are you sure you want to delete this theme?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
$(".delete-theme-button").each(function() {
|
||||
let theme_name = $(this).closest(".themeBox").find(".themeName").attr("title");
|
||||
let title = '{'Are you sure you want to delete the theme "%s"?'|@translate|@escape:'javascript'}';
|
||||
$(this).pwg_jconfirm_follow_href({
|
||||
alert_title: title.replace("%s", theme_name),
|
||||
alert_confirm: confirm_msg,
|
||||
alert_cancel: cancel_msg
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function() {
|
||||
$("a.preview-box").colorbox();
|
||||
|
||||
$(document).mouseup(function (e) {
|
||||
e.stopPropagation();
|
||||
if (!$(event.target).hasClass('showInfo')) {
|
||||
$('.showInfo-dropdown').fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$(window).bind("load", function() {
|
||||
$('.themeBox').each(function() {
|
||||
|
||||
let box = $(this);
|
||||
box.find('.showInfo').on('click', function() {
|
||||
let dropdown = box.find('.showInfo-dropdown');
|
||||
$('.showInfo-dropdown').each(function() {
|
||||
if ($(this) !== dropdown) {
|
||||
$(this).fadeOut();
|
||||
}
|
||||
})
|
||||
box.find('.showInfo-dropdown').fadeToggle();
|
||||
});
|
||||
|
||||
let screenImage = $(this).find(".preview-box img");
|
||||
let imageW = screenImage.innerWidth();
|
||||
let imageH = screenImage.innerHeight();
|
||||
let size = $(this).find(".preview-box").innerWidth();
|
||||
|
||||
if (imageW > imageH) {
|
||||
screenImage.css('height', size+'px');
|
||||
screenImage.css('width', (imageW * size / imageH)+'px');
|
||||
} else {
|
||||
screenImage.css('width', size+'px');
|
||||
screenImage.css('heigth', (imageH * size / imageW)+'px');
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
{/literal}{/footer_script}
|
||||
|
||||
<div id="themesContent">
|
||||
|
||||
{assign var='field_name' value='null'} {* <!-- 'counter' for fieldset management --> *}
|
||||
{foreach from=$tpl_themes item=theme}
|
||||
|
||||
{if $field_name != $theme.STATE}
|
||||
{if $field_name != 'null'}
|
||||
</div>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset>
|
||||
<legend>
|
||||
{if $theme.STATE == 'active'}
|
||||
<span class="icon-purple icon-toggle-on"></span>{'Active Themes'|@translate}
|
||||
{else}
|
||||
<span class="icon-yellow icon-toggle-off"></span>{'Inactive Themes'|@translate}
|
||||
{/if}
|
||||
</legend>
|
||||
<div class="themeBoxes">
|
||||
{assign var='field_name' value=$theme.STATE}
|
||||
{/if}
|
||||
|
||||
{if not empty($theme.AUTHOR)}
|
||||
{if not empty($theme.AUTHOR_URL)}
|
||||
{assign var='author' value="<a href='%s'>%s</a>"|@sprintf:$theme.AUTHOR_URL:$theme.AUTHOR}
|
||||
{else}
|
||||
{assign var='author' value='<u>'|cat:$theme.AUTHOR|cat:'</u>'}
|
||||
{/if}
|
||||
{/if}
|
||||
{if not empty($theme.VISIT_URL)}
|
||||
{assign var='version' value="<a class='externalLink' href='"|cat:$theme.VISIT_URL|cat:"'>"|cat:$theme.VERSION|cat:"</a>"}
|
||||
{else}
|
||||
{assign var='version' value=$theme.VERSION}
|
||||
{/if}
|
||||
|
||||
<div class="themeBox{if isset($theme.IS_DEFAULT) and $theme.IS_DEFAULT} themeDefault{/if}">
|
||||
<div class="themeShot"><a href="{$theme.SCREENSHOT}" class="preview-box" title="{$theme.NAME}"><img src="{$theme.SCREENSHOT}" alt=""></a></div>
|
||||
<div class="themeName" title="{$theme.NAME}">
|
||||
{$theme.NAME} {if isset($theme.IS_DEFAULT) and $theme.IS_DEFAULT}<i class="icon-star" title="{'default'|@translate}"></i>{/if} {if $theme.IS_MOBILE}<i class="icon-mobile" title="{'Mobile'|translate}"></i>{/if}
|
||||
{if $isWebmaster == 1} <a class="icon-ellipsis-v showInfo"></a>{/if}
|
||||
</div>
|
||||
<div class="showInfo-dropdown dropdown">
|
||||
<div class="showInfo-dropdown-header">
|
||||
{if !empty($author)}
|
||||
{'By %s'|@translate:$author} |
|
||||
{/if}
|
||||
{'Version'|@translate} {$version}
|
||||
</div>
|
||||
<div class="showInfo-dropdown-content">
|
||||
{$theme.DESC|@escape:'html'}
|
||||
</div>
|
||||
{if $theme.STATE != "active" and $CONF_ENABLE_EXTENSIONS_INSTALL}
|
||||
{if $theme.DELETABLE}
|
||||
<a class="dropdown-option icon-trash delete-plugin-button delete-theme-button" href="{$delete_baseurl}{$theme.ID}">{'Delete'|@translate}</a>
|
||||
{else}
|
||||
<span class="dropdown-option icon-trash delete-plugin-button"title="{$theme.DELETE_TOOLTIP}">{'Delete'|@translate}</span>
|
||||
{/if}
|
||||
{/if}
|
||||
{if isset($theme.DEACTIVABLE) and $theme.DEACTIVABLE}
|
||||
<a href="{$deactivate_baseurl}{$theme.ID}" class="showInfo-dropdown-action tiptip icon-cancel-circled" title="{'Forbid this theme to users'|@translate}">{'Deactivate'|@translate}</a>
|
||||
{/if}
|
||||
</div>
|
||||
{if $isWebmaster == 1}
|
||||
<div class="themeActions">
|
||||
{if $theme.STATE == 'active'}
|
||||
{if $theme.ADMIN_URI}
|
||||
<a href="{$theme.ADMIN_URI}" class="icon-cog">{'Configuration'|@translate}</a>
|
||||
{else}
|
||||
<div class="pluginUnavailableAction icon-cog tiptip" title="{'N/A'|translate}">{'Configuration'|@translate}</div>
|
||||
{/if}
|
||||
{if isset($theme.IS_DEFAULT) and not $theme.IS_DEFAULT}
|
||||
<a href="{$set_default_baseurl}{$theme.ID}" class="tiptip icon-star" title="{'Set as default theme for unregistered and new users'|@translate}">{'Set as default'|@translate}</a>
|
||||
{else}
|
||||
<span class="tiptip icon-star" title="{'This is already the default theme'|@translate}">{'Set as default'|@translate}</span>
|
||||
{/if}
|
||||
{else}
|
||||
{if $theme.ACTIVABLE}
|
||||
<a href="{$activate_baseurl}{$theme.ID}" title="{'Make this theme available to users'|@translate}" class="icon-plus tiptip">{'Activate'|@translate}</a>
|
||||
{else}
|
||||
<span title="{$theme.ACTIVABLE_TOOLTIP}" class="icon-plus tiptip">{'Activate'|@translate}</span>
|
||||
{/if}
|
||||
{/if}
|
||||
</div> <!-- themeActions -->
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{/foreach}
|
||||
</div> <!-- themeBoxes -->
|
||||
</fieldset>
|
||||
|
||||
</div> <!-- themesContent -->
|
||||
@@ -0,0 +1,35 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{footer_script}{literal}
|
||||
|
||||
$(window).bind("load", function() {
|
||||
$('.themeBox').each(function() {
|
||||
|
||||
let screenImage = $(this).find(".preview-box img");
|
||||
let imageW = screenImage.innerWidth();
|
||||
let imageH = screenImage.innerHeight();
|
||||
let size = $(this).find(".preview-box").innerWidth();
|
||||
|
||||
if (imageW > imageH) {
|
||||
screenImage.css('height', size+'px');
|
||||
screenImage.css('width', (imageW * size / imageH)+'px');
|
||||
} else {
|
||||
screenImage.css('width', size+'px');
|
||||
screenImage.css('heigth', (imageH * size / imageW)+'px');
|
||||
}
|
||||
})
|
||||
})
|
||||
{/literal}{/footer_script}
|
||||
|
||||
{if not empty($new_themes)}
|
||||
<div class="themeBoxes">
|
||||
{foreach from=$new_themes item=theme name=themes_loop}
|
||||
<div class="themeBox">
|
||||
<div class="themeShot"><a href="{$theme.screenshot}" class="preview-box" title="{$theme.name}"><img src="{$theme.screenshot}" onerror="this.src='{$default_screenshot}'"></a></div>
|
||||
<div class="themeName" title="{$theme.name}">{$theme.name}</div>
|
||||
<div class="themeActions"><a href="{$theme.install_url}">{'Install'|@translate}</a></div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div> <!-- themeBoxes -->
|
||||
{else}
|
||||
<p>{'There is no other theme available.'|@translate}</p>
|
||||
{/if}
|
||||
@@ -0,0 +1,195 @@
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
<section class="std_pgs">
|
||||
<form method="post" action="{$F_ACTION}" class="properties" enctype="multipart/form-data">
|
||||
|
||||
<fieldset class="std_pgs_conf">
|
||||
<legend><span class="icon-cog icon-purple"></span>{'Basic settings'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label class="font-checkbox">
|
||||
<span class="icon-check"></span>
|
||||
<input type="checkbox" name="use_standard_pages" {if $use_standard_pages }checked="checked"{/if}>
|
||||
{'Use standard Piwigo template for common pages.'|translate}
|
||||
</label>
|
||||
|
||||
<span class="icon-help-circled tiptip" title="{'When enabled, a common template is used for the login, registration and forgotten password pages, regardless of the theme. Some themes might use these templates even if you uncheck this option'|translate}" style="cursor:help"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
{if $is_standard_pages_used and !$use_standard_pages}
|
||||
<div class="std_pgs_theme_info warnings">
|
||||
<p class="">{'Standard pages aren\'t activated, however you have %d active themes that will still use them. These themes are:'|translate:count($standard_pages_used_by)} </p>
|
||||
<ul>
|
||||
{foreach $standard_pages_used_by as $theme_name}
|
||||
<li>{$theme_name}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<fieldset class="std_pgs_personnalisation_settings">
|
||||
<legend><span class="icon-dice-solid icon-green"></span>{'Personalization settings'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<div class="std_pgs_header_options">
|
||||
<strong>{'Standard pages header'|translate}</strong>
|
||||
<br>
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="std_pgs_display_logo" value="piwigo_logo" {if "piwigo_logo" == $std_pgs_selected_logo}checked="checked"{/if}>
|
||||
{'Use Piwigo logo'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold" id="custom_logo_option">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="std_pgs_display_logo" value="custom_logo" {if "custom_logo" == $std_pgs_selected_logo}checked="checked"{/if}>
|
||||
{'Use custom logo (png, jpeg or svg)'|translate}
|
||||
<div class="custom_logo_preview {if "custom_logo" == $std_pgs_selected_logo}show{else}hide{/if}">
|
||||
{if isset($std_pgs_selected_logo_path)}
|
||||
<div class="change_logo_container">
|
||||
<img src="{$std_pgs_selected_logo_path}">
|
||||
<a href="#" id="change_logo">{'Change logo'|translate}</a>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="use_existing_logo_container {if isset($std_pgs_selected_logo_path)}hide{/if}">
|
||||
<input type="file" size="60" id="std_pgs_logo" name="std_pgs_logo" accept="image/*" />
|
||||
<a href="#" id="use_existing_logo">{'Cancel'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="std_pgs_display_logo" value="gallery_title" {if "gallery_title" == $std_pgs_selected_logo}checked="checked"{/if}>
|
||||
{'Display Gallery title'|translate}
|
||||
</label>
|
||||
|
||||
<label class="font-checkbox no-bold">
|
||||
<span class="icon-dot-circled"></span>
|
||||
<input type="radio" name="std_pgs_display_logo" value="none" {if "none" == $std_pgs_selected_logo}checked="checked"{/if}>
|
||||
{'None'|translate}
|
||||
</label>
|
||||
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="skin_choice">
|
||||
<strong>{'Select a color theme for standard pages'|translate}</strong>
|
||||
|
||||
<div class="std_pgs_previews">
|
||||
<input type="hidden" name="std_pgs_selected_skin" value="{$std_pgs_selected_skin}">
|
||||
<div class="std_pgs_mini_previews">
|
||||
{foreach $std_pgs_skin_options as $std_pgs_skin_option}
|
||||
<img class="{if $std_pgs_selected_skin == $std_pgs_skin_option}selected{/if}" id="{$std_pgs_skin_option}" src="themes/standard_pages/skins/light-{$std_pgs_skin_option}.jpg">
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="std_pgs_selected_preview">
|
||||
<div class="std_pgs_selected_preview_container">
|
||||
<h5>{'Light mode'|translate}</h5>
|
||||
<img id="preview-light" src="themes/standard_pages/skins/light-{$std_pgs_selected_skin}.jpg">
|
||||
</div>
|
||||
<div class="std_pgs_selected_preview_container">
|
||||
<h5>{'Dark mode'|translate}</h5>
|
||||
<img id="preview-dark" src="themes/standard_pages/skins/dark-{$std_pgs_selected_skin}.jpg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<div class="savebar-footer">
|
||||
<div class="savebar-footer-start">
|
||||
</div>
|
||||
<div class="savebar-footer-end">
|
||||
{if isset($save_success)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-message">
|
||||
<i class="icon-ok"></i>{$save_success}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if isset($save_error)}
|
||||
<div class="savebar-footer-block">
|
||||
<div class="badge info-warning">
|
||||
<i class="icon-attention"></i>{$save_error}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="savebar-footer-block">
|
||||
<button class="buttonLike" type="submit" name="submit" {if $isWebmaster != 1}disabled{/if}><i class="icon-floppy"></i> {'Save Settings'|@translate}</button>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{footer_script}
|
||||
|
||||
|
||||
// Update preview when user clicks on mini previews
|
||||
jQuery(".std_pgs_mini_previews img").click(function () {
|
||||
|
||||
//Make selected skin outlined
|
||||
jQuery(".std_pgs_mini_previews img").removeClass('selected');
|
||||
jQuery(this).addClass('selected');
|
||||
|
||||
//Update preview when useer clicks on mini
|
||||
jQuery('input[name=std_pgs_selected_skin]').val(jQuery(this).attr('id'));
|
||||
|
||||
let preview_light_path = "themes/standard_pages/skins/light-"+$(this).attr('id')+".jpg";
|
||||
let preview_dark_path = "themes/standard_pages/skins/dark-"+$(this).attr('id')+".jpg";
|
||||
|
||||
jQuery('.std_pgs_selected_preview img#preview-light').attr("src", preview_light_path);
|
||||
jQuery('.std_pgs_selected_preview img#preview-dark').attr("src", preview_dark_path);
|
||||
});
|
||||
|
||||
jQuery("input[name=std_pgs_display_logo]").click(function () {
|
||||
if('custom_logo' == jQuery(this).val())
|
||||
{
|
||||
// jQuery('#std_pgs_logo').addClass('show').removeClass('hide');
|
||||
jQuery('.custom_logo_preview').addClass('show').removeClass('hide');
|
||||
}
|
||||
else
|
||||
{
|
||||
// jQuery('#std_pgs_logo').addClass('hide').removeClass('show');
|
||||
jQuery('.custom_logo_preview').addClass('hide').removeClass('show');
|
||||
}
|
||||
});
|
||||
|
||||
// Scroll mini to show the selected one
|
||||
jQuery(document).ready(function () {
|
||||
const std_pgs_mini_previews = jQuery('.std_pgs_mini_previews');
|
||||
const selected_mini = std_pgs_mini_previews.find('.selected');
|
||||
|
||||
if (selected_mini.length) {
|
||||
std_pgs_mini_previews.scrollTop(
|
||||
selected_mini.position().top + std_pgs_mini_previews.scrollTop()
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
//Switch between change logo and use existing logo
|
||||
|
||||
jQuery('#change_logo').click(function () {
|
||||
jQuery('.use_existing_logo_container').show();
|
||||
jQuery('.change_logo_container').hide();
|
||||
});
|
||||
jQuery('#use_existing_logo').click(function () {
|
||||
jQuery('.change_logo_container').show();
|
||||
jQuery('.use_existing_logo_container').hide();
|
||||
jQuery('#std_pgs_logo').val('');
|
||||
});
|
||||
|
||||
|
||||
|
||||
{/footer_script}
|
||||
@@ -0,0 +1,237 @@
|
||||
{combine_script id='jquery.ajaxmanager' load='footer' require='jquery' path='themes/default/js/plugins/jquery.ajaxmanager.js'}
|
||||
{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery.jgrowl.css"}
|
||||
|
||||
{footer_script require='jquery.ui.effect-blind,jquery.ajaxmanager,jquery.jgrowl'}
|
||||
var pwg_token = '{$PWG_TOKEN}';
|
||||
var extType = '{$EXT_TYPE}';
|
||||
var confirmMsg = '{'Are you sure?'|@translate|@escape:'javascript'}';
|
||||
var errorHead = '{'ERROR'|@translate|@escape:'javascript'}';
|
||||
var successHead = '{'Update Complete'|@translate|@escape:'javascript'}';
|
||||
var errorMsg = '{'an error happened'|@translate|@escape:'javascript'}';
|
||||
var restoreMsg = '{'Reset ignored updates'|@translate|@escape:'javascript'}';
|
||||
|
||||
{literal}
|
||||
var todo = 0;
|
||||
var queuedManager = $.manageAjax.create('queued', {
|
||||
queue: true,
|
||||
maxRequests: 1,
|
||||
beforeSend: function() { autoupdate_bar_toggle(1); },
|
||||
complete: function() { autoupdate_bar_toggle(-1); }
|
||||
});
|
||||
|
||||
function updateAll() {
|
||||
jQuery('.updateExtension').each( function() {
|
||||
if (jQuery(this).parents('div').css('display') == 'block')
|
||||
jQuery(this).click();
|
||||
});
|
||||
};
|
||||
|
||||
function ignoreAll() {
|
||||
jQuery('.ignoreExtension').each( function() {
|
||||
if (jQuery(this).parents('div').css('display') == 'block')
|
||||
jQuery(this).click();
|
||||
});
|
||||
};
|
||||
|
||||
function resetIgnored() {
|
||||
jQuery.ajax({
|
||||
type: 'GET',
|
||||
url: 'ws.php',
|
||||
dataType: 'json',
|
||||
data: { method: 'pwg.extensions.ignoreUpdate', reset: true, type: extType, pwg_token: pwg_token, format: 'json' },
|
||||
success: function(data) {
|
||||
if (data['stat'] == 'ok') {
|
||||
jQuery(".pluginBox, fieldset").show();
|
||||
jQuery(".pluginBox").attr('data-ignored', 'false')
|
||||
jQuery("#update_all").show();
|
||||
jQuery("#ignore_all").show();
|
||||
jQuery("#up_to_date").hide();
|
||||
jQuery("#reset_ignore").hide();
|
||||
jQuery("#ignored").hide();
|
||||
checkFieldsets();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function checkFieldsets() {
|
||||
var types = new Array('plugins', 'themes', 'languages');
|
||||
var total = 0;
|
||||
var ignored = 0;
|
||||
for (i=0;i<3;i++) {
|
||||
nbExtensions = 0;
|
||||
jQuery("fieldset[data-type="+types[i]+"] .pluginBox").each(function(index) {
|
||||
if (jQuery(this).attr('data-ignored')== 'true')
|
||||
ignored++;
|
||||
else
|
||||
nbExtensions++;
|
||||
});
|
||||
total = total + nbExtensions;
|
||||
if (nbExtensions == 0)
|
||||
jQuery("#"+types[i]).hide();
|
||||
}
|
||||
|
||||
if (total == 0) {
|
||||
jQuery("#update_all").hide();
|
||||
jQuery("#ignore_all").hide();
|
||||
jQuery("#up_to_date").show();
|
||||
}
|
||||
if (ignored > 0) {
|
||||
jQuery("#reset_ignore").val(restoreMsg + ' (' + ignored + ')');
|
||||
}
|
||||
};
|
||||
|
||||
function updateExtension(type, id, revision) {
|
||||
queuedManager.add({
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
url: 'ws.php',
|
||||
data: { method: 'pwg.extensions.update', type: type, id: id, revision: revision, pwg_token: pwg_token, format: 'json' },
|
||||
success: function(data) {
|
||||
if (data['stat'] == 'ok') {
|
||||
jQuery.jGrowl( data['result'], { theme: 'success', header: successHead, life: 4000, sticky: false });
|
||||
jQuery("#"+type+"_"+id).remove();
|
||||
checkFieldsets();
|
||||
} else {
|
||||
jQuery.jGrowl( data['result'], { theme: 'error', header: errorHead, sticky: true });
|
||||
}
|
||||
},
|
||||
error: function(data) {
|
||||
jQuery.jGrowl( errorMsg, { theme: 'error', header: errorHead, sticky: true });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const targetNode = document.getElementById("theAdminPage");
|
||||
|
||||
const config = { attributes: false, childList: true, subtree: true };
|
||||
|
||||
const callback = (mutationList, observer) => {
|
||||
for (const mutation of mutationList) {
|
||||
if (mutation.type === "childList") {
|
||||
let popup = jQuery("#jGrowl").children();
|
||||
for (let i = 0; i < popup.length; i++){
|
||||
if ((jQuery(popup[i])).hasClass("success")){
|
||||
if (! ((jQuery(popup[i]).children(":first")).hasClass("jGrowl-popup-icon icon-ok"))){
|
||||
jQuery(popup[i]).prepend('<div class="jGrowl-popup-icon icon-ok"></div>')
|
||||
}
|
||||
};
|
||||
|
||||
if ((jQuery(popup[i])).hasClass("error")){
|
||||
if (! ((jQuery(popup[i]).children(":first")).hasClass("jGrowl-popup-icon icon-cancel"))){
|
||||
jQuery(popup[i]).prepend('<div class="jGrowl-popup-icon icon-cancel"></div>')
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const observer = new MutationObserver(callback);
|
||||
observer.observe(targetNode, config);
|
||||
|
||||
function ignoreExtension(type, id) {
|
||||
queuedManager.add({
|
||||
type: 'GET',
|
||||
url: 'ws.php',
|
||||
dataType: 'json',
|
||||
data: { method: 'pwg.extensions.ignoreUpdate', type: type, id: id, pwg_token: pwg_token, format: 'json' },
|
||||
success: function(data) {
|
||||
if (data['stat'] == 'ok') {
|
||||
jQuery("#"+type+"_"+id).hide();
|
||||
jQuery("#"+type+"_"+id).attr('data-ignored', 'true')
|
||||
jQuery("#reset_ignore").show();
|
||||
checkFieldsets();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function autoupdate_bar_toggle(i) {
|
||||
todo = todo + i;
|
||||
if ((i == 1 && todo == 1) || (i == -1 && todo == 0))
|
||||
jQuery('.autoupdate_bar').toggle();
|
||||
}
|
||||
|
||||
checkFieldsets();
|
||||
{/literal}
|
||||
{/footer_script}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.confirm' load='footer' require='jquery' path='themes/default/js/plugins/jquery-confirm.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/jquery-confirm.min.css"}
|
||||
{footer_script}
|
||||
|
||||
const are_you_sure_msg = '{'Are you sure?'|@translate|@escape:'javascript'}';
|
||||
const confirm_msg = '{"Yes, I am sure"|@translate}';
|
||||
const cancel_msg = "{"No, I have changed my mind"|@translate}";
|
||||
$("#update_all").click(function() {
|
||||
const title_msg = "{'Are you sure you want to update all extensions?'|@translate}";
|
||||
$.confirm({
|
||||
title: title_msg,
|
||||
buttons: {
|
||||
confirm: {
|
||||
text: confirm_msg,
|
||||
btnClass: 'btn-red',
|
||||
action: function () {
|
||||
updateAll();
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
text: cancel_msg
|
||||
}
|
||||
},
|
||||
...jConfirm_confirm_options
|
||||
});
|
||||
})
|
||||
{/footer_script}
|
||||
|
||||
{if $isWebmaster == 1}
|
||||
|
||||
<div class="autoupdate_bar">
|
||||
<div class="head-button-1 icon-ok-circled" id="update_all">{'Update All'|@translate}</div>
|
||||
<div class="head-button-2 icon-block" id="ignore_all" onClick="ignoreAll(); return false;">{'Ignore All'|@translate}</div>
|
||||
<div class="head-button-2 icon-ccw" id="reset_ignore" onClick="resetIgnored(); return false;" {if !$SHOW_RESET}style="display:none;"{/if}>{'Reset ignored updates'|@translate}</div>
|
||||
</div>
|
||||
<div class="autoupdate_bar" style="display:none;">
|
||||
{'Please wait...'|@translate}<br><img src="admin/themes/default/images/ajax-loader-bar.gif">
|
||||
</div>
|
||||
|
||||
<p id="up_to_date" style="display:none; text-align:left; margin-left:20px;">{'All %s are up to date.'|@sprintf:$EXT_TYPE|@translate}</p>
|
||||
|
||||
{foreach from=$UPDATES_EXTENSION key=type item=updates}
|
||||
{if not empty($updates)}
|
||||
<fieldset id="{$type}" class="pluginContainer pluginUpdateContainer line-form" data-type="{$type}">
|
||||
<legend>
|
||||
{if $type=='plugins'}
|
||||
<span class="icon-puzzle icon-green"></span>{'Plugins'|@translate}
|
||||
{elseif $type=='themes'}
|
||||
<span class="icon-brush icon-blue"></span>{'Themes'|@translate}
|
||||
{elseif $type=='languages'}
|
||||
<span class="icon-language icon-purple"></span>{'Languages'|@translate}
|
||||
{/if}
|
||||
</legend>
|
||||
|
||||
{foreach from=$updates item=extension}
|
||||
<div class="pluginBox pluginMiniBox" id="{$type}_{$extension.EXT_ID}" {if $extension.IGNORED}data-ignored="true" style="display:none;"{/if}>
|
||||
<div class="pluginContent">
|
||||
<div class="pluginName">
|
||||
{$extension.EXT_NAME}
|
||||
</div>
|
||||
<div class="pluginDesc" id="desc_{$extension.ID}">
|
||||
<span class="plugin-version plugin-version-old icon-flow-branch" title="{"Current Version"|@translate}">{$extension.CURRENT_VERSION}</span> <i class="icon-right"></i> <span class="plugin-version icon-flow-branch" title="{"New Version"|@translate}">{$extension.NEW_VERSION}</span>
|
||||
<div class="plugin-revision-info"><span>{$extension.REV_DESC}</span></div>
|
||||
<a href='{$extension.EXT_URL}' target="_blank" class="plugin-update-link icon-info-circled-1">{'More information'|@translate}</a>
|
||||
</div>
|
||||
<div class="pluginActions">
|
||||
<a href="#" onClick="updateExtension('{$type}', '{$extension.EXT_ID}', {$extension.REVISION_ID});" class="updateExtension pluginActionLevel1"> <i class="icon-ok-circled"></i> {'Install'|@translate}</a>
|
||||
<a href="{$extension.URL_DOWNLOAD}" class="pluginActionLevel2"> <i class="icon-download"></i> {'Download'|@translate}</a>
|
||||
<a href="#" onClick="ignoreExtension('{$type}', '{$extension.EXT_ID}'); return false;" class="ignoreExtension pluginActionLevel2"><i class="icon-block"></i>{'Ignore this update'|@translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</fieldset>
|
||||
{/if}
|
||||
{/foreach}
|
||||
{/if}
|
||||
@@ -0,0 +1,193 @@
|
||||
{footer_script}
|
||||
jQuery(document).ready(function() {ldelim}
|
||||
jQuery('input[name="submit"]').click(function() {ldelim}
|
||||
if(!confirm('{'Are you sure?'|@translate}'))
|
||||
return false;
|
||||
jQuery(this).hide();
|
||||
jQuery('.autoupdate_bar').show();
|
||||
});
|
||||
jQuery('[name="understand"]').click(function() {ldelim}
|
||||
jQuery('[name="submit"]').attr('disabled', !this.checked);
|
||||
});
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
{html_head}
|
||||
{literal}
|
||||
<style type="text/css">
|
||||
form { width: 750px; }
|
||||
fieldset { padding-bottom: 30px; }
|
||||
p, form p { text-align: left; margin-left:20px; }
|
||||
li { margin: 5px; }
|
||||
|
||||
.badge-release {
|
||||
padding:5px 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
a.badge-release:hover {
|
||||
text-decoration:none;
|
||||
color: currentColor;
|
||||
}
|
||||
|
||||
.goto-update-page {
|
||||
padding:5px 10px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.goto-update-page:hover {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.update-recommendation {
|
||||
margin-top:30px;
|
||||
}
|
||||
|
||||
.goto-update-guide {
|
||||
background-color: #F0F0F0;
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p.release .errors {margin:0}
|
||||
</style>
|
||||
{/literal}
|
||||
{/html_head}
|
||||
|
||||
{if isset($MINOR_RELEASE_PHP_REQUIRED) and isset($MAJOR_RELEASE_PHP_REQUIRED)}
|
||||
<div class="warnings">
|
||||
<i class="eiw-icon icon-attention"></i>
|
||||
<ul>
|
||||
<li> {'Please upgrade your PHP version before any update.'|translate} </li>
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if isset($PIWIGO_CURRENT_VERSION) and !isset($CONTAINER_VERSION)}
|
||||
<p><i class="icon-info-circled-1"></i> {'Currently running version %s'|translate:$PIWIGO_CURRENT_VERSION}</p>
|
||||
{elseif isset($CONTAINER_VERSION)}
|
||||
<p><i class="icon-info-circled-1"></i> {'Currently running version %s'|translate:$CONTAINER_VERSION} (Docker)</p>
|
||||
{/if}
|
||||
|
||||
{if $STEP == 0}
|
||||
{if $CHECK_VERSION}
|
||||
<p>{'You are running the latest version of Piwigo.'|@translate}</p>
|
||||
{elseif $DEV_VERSION}
|
||||
<p>{'You are running on development sources, no check possible.'|@translate}</p>
|
||||
{else}
|
||||
<p>{'Check for update failed for unknown reasons.'|@translate}</p>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{if $STEP == 1}
|
||||
<fieldset>
|
||||
{if isset($CONTAINER_VERSION)}
|
||||
<legend><span class="icon-ok icon-purple"></span>{'Two container updates are available'|@translate}</legend>
|
||||
{else}
|
||||
<legend><span class="icon-ok icon-purple"></span>{'Two updates are available'|@translate}</legend>
|
||||
{/if}
|
||||
<p class="release release-minor">
|
||||
<a href="{$MINOR_RELEASE_URL}" target="_blank" class="badge-release icon-green icon-tags">{$MINOR_VERSION}</a>
|
||||
{'This is a minor update, with only bug corrections.'|@translate}
|
||||
{if isset($MINOR_RELEASE_PHP_REQUIRED)}
|
||||
<span class="errors icon-block">{'Requires PHP %s'|translate:$MINOR_RELEASE_PHP_REQUIRED}</span>
|
||||
{else}
|
||||
{if isset($CONTAINER_VERSION)}
|
||||
<a href="{$DOCKER_UPDATE_GUIDE_URL}" target="_blank" class="icon-arrows-cw goto-update-page">{'Follow the update guide'|@translate}</a>
|
||||
{else}
|
||||
<a href="admin.php?page=updates&step=2&to={$MINOR_VERSION}" class="icon-arrows-cw goto-update-page">{'Update to Piwigo %s'|@translate:$MINOR_VERSION}</a>
|
||||
{/if}
|
||||
{/if}
|
||||
</p>
|
||||
|
||||
<p class="release release-major">
|
||||
<a href="{if isset($CONTAINER_VERSION)} {$MAJOR_DOCKER_RELEASE_URL} {else} {$MAJOR_RELEASE_URL} {/if}" target="_blank" class="badge-release icon-blue icon-tags">{$MAJOR_VERSION}</a>
|
||||
{'This is a major update, with <a href="%s">new exciting features</a>.'|translate:$MAJOR_RELEASE_URL}
|
||||
{'Some themes and plugins may be not available yet.'|translate}
|
||||
{if isset($MAJOR_RELEASE_PHP_REQUIRED)}
|
||||
<span class="errors icon-block">{'Requires PHP %s'|translate:$MAJOR_RELEASE_PHP_REQUIRED}</span>
|
||||
{else}
|
||||
<a href="admin.php?page=updates&step=3&to={$MAJOR_VERSION}" class="icon-arrows-cw goto-update-page">{'Update to Piwigo %s'|@translate:$MAJOR_VERSION}</a>
|
||||
{/if}
|
||||
</p>
|
||||
<p class="update-recommendation">
|
||||
<span class="icon-info-circled-1"></span>
|
||||
{'You can update to Piwigo %s directly, without upgrading to Piwigo %s (recommended).'|@translate:$MAJOR_VERSION:$MINOR_VERSION}
|
||||
</p>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
{if $STEP == 2}
|
||||
<p>
|
||||
<a href="{$MINOR_RELEASE_URL}" target="_blank" class="badge-release icon-green icon-tags">{$MINOR_VERSION}</a>
|
||||
</p>
|
||||
<p>
|
||||
{'A new version of Piwigo is available.'|@translate}<br>
|
||||
{'This is a minor update, with only bug corrections.'|@translate}
|
||||
</p>
|
||||
<form action="" method="post">
|
||||
<p>
|
||||
{if isset($CONTAINER_VERSION)}
|
||||
<a class="icon-right goto-update-guide" href="{$DOCKER_UPDATE_GUIDE_URL}" target="_blank"> {'Follow the update guide'|@translate}</a>
|
||||
{else}
|
||||
<input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate:$UPGRADE_TO}"{if isset($MINOR_RELEASE_PHP_REQUIRED)} disabled{/if}>
|
||||
{if isset($MINOR_RELEASE_PHP_REQUIRED)}
|
||||
<span class="errors icon-block">{'Requires PHP %s'|translate:$MINOR_RELEASE_PHP_REQUIRED}</span>
|
||||
{/if}
|
||||
{/if}
|
||||
</p>
|
||||
<p class="autoupdate_bar" style="display:none;"> {'Update in progress...'|@translate}<br><img src="admin/themes/default/images/ajax-loader-bar.gif"></p>
|
||||
<p><input type="hidden" name="upgrade_to" value="{$UPGRADE_TO}"></p>
|
||||
</form>
|
||||
{/if}
|
||||
|
||||
{if $STEP == 3}
|
||||
<p>
|
||||
<a href="{if isset($CONTAINER_VERSION)} {$MAJOR_DOCKER_RELEASE_URL} {else} {$MAJOR_RELEASE_URL} {/if}" target="_blank" class="badge-release icon-blue icon-tags">{$MAJOR_VERSION}</a>
|
||||
</p>
|
||||
<p>
|
||||
{'A new version of Piwigo is available.'|@translate}<br>
|
||||
{'This is a major update, with <a href="%s">new exciting features</a>.'|@translate:$MAJOR_RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate}
|
||||
</p>
|
||||
<form action="" method="post">
|
||||
|
||||
{counter assign=i}
|
||||
<fieldset>
|
||||
<legend><span class="icon-floppy icon-red"></span>{'Backup'|@translate}</legend>
|
||||
<p>
|
||||
{'Always have a backup of your database and files.'|translate}
|
||||
{'The best is to have them made automatically on a regular basis.'|translate}
|
||||
{'If anything bad happens during the update, you would be able to restore a backup.'|translate}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
{counter assign=i}
|
||||
<fieldset>
|
||||
<legend><span class="icon-cog icon-purple"></span>{'Update to Piwigo %s'|@translate:$UPGRADE_TO}</legend>
|
||||
{if !empty($missing.plugins)}
|
||||
<p><i>{'Following plugins may not be compatible with the new version of Piwigo:'|@translate}</i></p>
|
||||
<p><ul>{foreach from=$missing.plugins item=plugin}<li><a href="{$plugin.uri}" class="externalLink">{$plugin.name}</a></li>{/foreach}</ul><br></p>
|
||||
{/if}
|
||||
{if !empty($missing.themes)}
|
||||
<p><i>{'Following themes may not be compatible with the new version of Piwigo:'|@translate}</i></p>
|
||||
<p><ul>{foreach from=$missing.themes item=theme}<li><a href="{$theme.uri}" class="externalLink">{$theme.name}</a></li>{/foreach}</ul><br></p>
|
||||
{/if}
|
||||
<p>
|
||||
{if !empty($missing.plugins) or !empty($missing.themes)}
|
||||
<p><label><input type="checkbox" name="understand"> {'I decide to update anyway'|@translate}</label></p>
|
||||
{/if}
|
||||
{if isset($CONTAINER_VERSION)}
|
||||
<p><a class="icon-right goto-update-guide {if !empty($missing.plugins) or !empty($missing.themes)} goto-update-guide-disabled{/if}" href="{$DOCKER_UPDATE_GUIDE_URL}" target="_blank"> {'Follow the update guide'|@translate}</a>
|
||||
{else}
|
||||
<p><input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate:$UPGRADE_TO}" {if !empty($missing.plugins) or !empty($missing.themes) or isset($MAJOR_RELEASE_PHP_REQUIRED)}disabled="disabled"{/if}>
|
||||
{/if}
|
||||
{if isset($MAJOR_RELEASE_PHP_REQUIRED)}
|
||||
<span class="errors icon-block">{'Requires PHP %s'|translate:$MAJOR_RELEASE_PHP_REQUIRED}</span>
|
||||
{/if}
|
||||
</p>
|
||||
<p class="autoupdate_bar" style="display:none;"> {'Update in progress...'|@translate}<br><img src="admin/themes/default/images/ajax-loader-bar.gif"></p>
|
||||
</fieldset>
|
||||
|
||||
<p><input type="hidden" name="upgrade_to" value="{$UPGRADE_TO}"></p>
|
||||
</form>
|
||||
{/if}
|
||||
@@ -0,0 +1,228 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
<html lang="{$lang_info.code}" dir="{$lang_info.direction}">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-script-type" content="text/javascript">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{$ROOT_URL}{$themeconf.icon_dir}/favicon.ico">
|
||||
|
||||
{get_combined_css}
|
||||
{foreach from=$themes item=theme}
|
||||
{if $theme.load_css}
|
||||
{combine_css path="admin/themes/`$theme.id`/theme.css" order=-10}
|
||||
{/if}
|
||||
{/foreach}
|
||||
|
||||
<!--[if IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/fix-ie7.css">
|
||||
<![endif]-->
|
||||
|
||||
<!-- BEGIN get_combined_scripts -->
|
||||
{get_combined_scripts load='header'}
|
||||
<!-- END get_combined_scripts -->
|
||||
|
||||
{literal}
|
||||
<style type="text/css">
|
||||
body {
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 800px;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
padding:0;
|
||||
background-color:transparent !important;
|
||||
border:none;
|
||||
}
|
||||
|
||||
#content {
|
||||
min-height:0;
|
||||
border:none;
|
||||
margin:1em auto;
|
||||
}
|
||||
|
||||
#theHeader {
|
||||
display: block;
|
||||
background:url("admin/themes/default/images/piwigo-orange.svg") no-repeat scroll center 20px transparent;
|
||||
height:100px;
|
||||
background-size: 300px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
margin-top:20px;
|
||||
background-color:#f1f1f1;
|
||||
}
|
||||
|
||||
legend {
|
||||
font-weight:bold;
|
||||
letter-spacing:2px;
|
||||
}
|
||||
|
||||
form fieldset p {
|
||||
text-align:left;
|
||||
margin:10px;
|
||||
}
|
||||
|
||||
.content h2 {
|
||||
display:block;
|
||||
font-size:20px;
|
||||
text-align:center;
|
||||
/* margin-top:5px; */
|
||||
}
|
||||
|
||||
table.table2 {
|
||||
width: 100%;
|
||||
border:0;
|
||||
}
|
||||
|
||||
table.table2 td {
|
||||
text-align: left;
|
||||
padding: 5px 2px;
|
||||
}
|
||||
|
||||
table.table2 td.fieldname {
|
||||
font-weight:normal;
|
||||
}
|
||||
|
||||
table.table2 td.fielddesc {
|
||||
padding-left:10px;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
input[type="submit"], input[type="button"], a.bigButton {
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
letter-spacing:2px;
|
||||
border:none;
|
||||
background-color:#666666;
|
||||
color:#fff;
|
||||
padding:5px;
|
||||
-moz-border-radius:5px;
|
||||
}
|
||||
|
||||
input[type="submit"]:hover, input[type="button"]:hover, a.bigButton:hover {
|
||||
background-color:#ff7700;
|
||||
color:white;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], select {
|
||||
background-color:#ddd;
|
||||
border:2px solid #ccc;
|
||||
-moz-border-radius:5px;
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
input[type="text"]:focus, input[type="password"]:focus, select:focus {
|
||||
background-color:#fff;
|
||||
border:2px solid #ff7700;
|
||||
}
|
||||
|
||||
.sql_content, .infos a {
|
||||
color: #ff3363;
|
||||
}
|
||||
|
||||
.errors {
|
||||
padding-bottom:5px;
|
||||
}
|
||||
|
||||
</style>
|
||||
{/literal}
|
||||
<title>Piwigo {$RELEASE} - {'Upgrade'|@translate}</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="the_page">
|
||||
<div id="theHeader"></div>
|
||||
<div id="content" class="content">
|
||||
|
||||
{if isset($introduction)}
|
||||
<h2>{'Version'|@translate} {$RELEASE} - {'Upgrade'|@translate}</h2>
|
||||
|
||||
{if isset($errors)}
|
||||
<div class="errors">
|
||||
<ul>
|
||||
{foreach from=$errors item=error}
|
||||
<li>{$error}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<form method="POST" action="{$introduction.F_ACTION}" name="upgrade_form">
|
||||
|
||||
<fieldset>
|
||||
<table>
|
||||
<tr>
|
||||
<td>{'Language'|@translate}</td>
|
||||
<td>
|
||||
<select name="language" onchange="document.location = 'upgrade.php?language='+this.options[this.selectedIndex].value;">
|
||||
{html_options options=$language_options selected=$language_selection}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p>{'This page proposes to upgrade your database corresponding to your old version of Piwigo to the current version. The upgrade assistant thinks you are currently running a <strong>release %s</strong> (or equivalent).'|@translate:$introduction.CURRENT_RELEASE}</p>
|
||||
{if isset($login)}
|
||||
<p>{'Only administrator can run upgrade: please sign in below.'|@translate}</p>
|
||||
{/if}
|
||||
|
||||
{if isset($login)}
|
||||
<table>
|
||||
<tr>
|
||||
<td>{'Username'|@translate}</td>
|
||||
<td><input type="text" name="username" id="username" size="20" maxlength="50" style="width: 150px;"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{'Password'|@translate}</td>
|
||||
<td><input type="password" name="password" id="password" style="width: 150px;"></td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
</fieldset>
|
||||
<p style="text-align: center;">
|
||||
<input class="submit" type="submit" name="submit" value="{'Upgrade from version %s to %s'|@translate:$introduction.CURRENT_RELEASE:$RELEASE}">
|
||||
</p>
|
||||
</form>
|
||||
<!--
|
||||
<p style="text-align: center;">
|
||||
<a href="{$introduction.RUN_UPGRADE_URL}">{'Upgrade from version %s to %s'|@translate:$introduction.CURRENT_RELEASE:$RELEASE}</a>
|
||||
</p>
|
||||
-->
|
||||
|
||||
{/if}
|
||||
|
||||
{if isset($upgrade)}
|
||||
<h2>{'Upgrade from version %s to %s'|@translate:$upgrade.VERSION:$RELEASE}</h2>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Statistics'|@translate}</legend>
|
||||
<ul>
|
||||
<li>{'total upgrade time'|@translate} : {$upgrade.TOTAL_TIME}</li>
|
||||
<li>{'total SQL time'|@translate} : {$upgrade.SQL_TIME}</li>
|
||||
<li>{'SQL queries'|@translate} : {$upgrade.NB_QUERIES}</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Upgrade informations'|@translate}</legend>
|
||||
<ul>
|
||||
{foreach from=$infos item=info}
|
||||
<li>{$info}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<p>
|
||||
<a class="bigButton" href="{$button_link}">{$button_label}</a>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
</div> {* content *}
|
||||
<div>{$L_UPGRADE_HELP}</div>
|
||||
</div> {* the_page *}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,578 @@
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
|
||||
{combine_script id='jquery.selectize' load='footer' path='themes/default/js/plugins/selectize.min.js'}
|
||||
{combine_css id='jquery.selectize' path="themes/default/js/plugins/selectize.{$themeconf.colorscheme}.css"}
|
||||
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||
{footer_script}
|
||||
{* <!-- USERS --> *}
|
||||
var usersCache = new UsersCache({
|
||||
serverKey: '{$CACHE_KEYS.users}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
const nb_users = {$nb_users};
|
||||
|
||||
const additional_filt_type = '{$ADDITIONAL_FILT.type}';
|
||||
const additional_filt_value = {if $ADDITIONAL_FILT.type} {$ADDITIONAL_FILT.value} {else} null {/if};
|
||||
|
||||
const color_icons = ["icon-red", "icon-blue", "icon-yellow", "icon-purple", "icon-green"];
|
||||
var activity_page = 1;
|
||||
let current_page_offset = 0;
|
||||
let page_offsets = [0];
|
||||
let actual_page = 1;
|
||||
let end_page = false;
|
||||
let uid_filter;
|
||||
let action_filter;
|
||||
let object_filter;
|
||||
let date_min_filter = '{$ACTIVITY_DATES.min}';
|
||||
let date_max_filter = '{$ACTIVITY_DATES.max}';
|
||||
|
||||
const date_min = '{$ACTIVITY_DATES.min}';
|
||||
const date_max = '{$ACTIVITY_DATES.max}';
|
||||
|
||||
const page_ellipsis = '<span>...</span>'
|
||||
const page_item = '<a data-page="%d">%d</a>';
|
||||
var create_selecter = true;
|
||||
const users_key = "{"Users"|@translate}";
|
||||
|
||||
const line_key = "{'%s line'|translate}";
|
||||
const lines_key = "{'%s lines'|translate}";
|
||||
|
||||
{*<-- Translation keys -->*}
|
||||
|
||||
var actionType_add = "{'add'|translate}";
|
||||
var actionType_delete = "{'deletion'|translate}";
|
||||
var actionType_move = "{'move'|translate}";
|
||||
var actionType_edit = "{'edit'|translate}";
|
||||
var actionType_login = "{'login'|translate}";
|
||||
var actionType_logout = "{'logout'|translate}";
|
||||
|
||||
{* Album keys *}
|
||||
|
||||
var actionInfos_album_added = "{'%d album added'|translate}";
|
||||
var actionInfos_album_deleted = "{'%d album deleted'|translate}";
|
||||
var actionInfos_album_edited = "{'%d album edited'|translate}";
|
||||
var actionInfos_album_moved = "{'%d album moved'|translate}";
|
||||
|
||||
var actionInfos_albums_added = "{'%d albums added'|translate}";
|
||||
var actionInfos_albums_deleted = "{'%d albums deleted'|translate}";
|
||||
var actionInfos_albums_edited = "{'%d albums edited'|translate}";
|
||||
var actionInfos_albums_moved = "{'%d albums moved'|translate}";
|
||||
|
||||
{* User keys *}
|
||||
|
||||
var actionInfos_user_added = "{'%d user added'|translate}";
|
||||
var actionInfos_user_deleted = "{'%d user deleted'|translate}";
|
||||
var actionInfos_user_edited = "{'%d user edited'|translate}";
|
||||
var actionInfos_user_logged_in = "{'%d user logged in'|translate}";
|
||||
var actionInfos_user_logged_out = "{'%d user logged out'|translate}";
|
||||
|
||||
var actionInfos_users_added = "{'%d users added'|translate}";
|
||||
var actionInfos_users_deleted = "{'%d users deleted'|translate}";
|
||||
var actionInfos_users_edited = "{'%d users edited'|translate}";
|
||||
var actionInfos_users_logged_in = "{'%d users logged in'|translate}";
|
||||
var actionInfos_users_logged_out = "{'%d users logged out'|translate}";
|
||||
|
||||
{* Photo keys *}
|
||||
|
||||
var actionInfos_photo_added = "{'%d photo added'|translate}";
|
||||
var actionInfos_photo_deleted = "{'%d photo deleted'|translate}";
|
||||
var actionInfos_photo_edited = "{'%d photo edited'|translate}";
|
||||
var actionInfos_photo_moved = "{'%d photo moved'|translate}";
|
||||
|
||||
var actionInfos_photos_added = "{'%d photos added'|translate}";
|
||||
var actionInfos_photos_deleted = "{'%d photos deleted'|translate}";
|
||||
var actionInfos_photos_edited = "{'%d photos edited'|translate}";
|
||||
var actionInfos_photos_moved = "{'%d photos moved'|translate}";
|
||||
|
||||
{* Group keys *}
|
||||
|
||||
var actionInfos_group_added = "{'%d group added'|translate}";
|
||||
var actionInfos_group_deleted = "{'%d group deleted'|translate}";
|
||||
var actionInfos_group_edited = "{'%d group edited'|translate}";
|
||||
var actionInfos_group_moved = "{'%d group moved'|translate}";
|
||||
|
||||
var actionInfos_groups_added = "{'%d groups added'|translate}";
|
||||
var actionInfos_groups_deleted = "{'%d groups deleted'|translate}";
|
||||
var actionInfos_groups_edited = "{'%d groups edited'|translate}";
|
||||
var actionInfos_groups_moved = "{'%d groups moved'|translate}";
|
||||
|
||||
{* Tags keys *}
|
||||
|
||||
var actionInfos_tag_added = "{'%d tag added'|translate}";
|
||||
var actionInfos_tag_deleted = "{'%d tag deleted'|translate}";
|
||||
var actionInfos_tag_edited = "{'%d tag edited'|translate}";
|
||||
var actionInfos_tag_moved = "{'%d tag moved'|translate}";
|
||||
|
||||
var actionInfos_tags_added = "{'%d tags added'|translate}";
|
||||
var actionInfos_tags_deleted = "{'%d tags deleted'|translate}";
|
||||
var actionInfos_tags_edited = "{'%d tags edited'|translate}";
|
||||
var actionInfos_tags_moved = "{'%d tags moved'|translate}";
|
||||
|
||||
{/footer_script}
|
||||
|
||||
{combine_script id='user_activity' load='async' require='jquery' path='admin/themes/default/js/user_activity.js'}
|
||||
<div class="container">
|
||||
<div>
|
||||
<div class="activity-header">
|
||||
<div class="user_activity_end_options">
|
||||
<a class="download_csv tiptip" title="{'Download all activities'|translate}" href="admin.php?page=user_activity&type=download_logs">
|
||||
<i class="icon-download"> </i>
|
||||
</a>
|
||||
<div id="activityMoreFilters" class="activity-more-filters">
|
||||
<span class="icon-filter"></span>{'Filters'|@translate}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="activityMoreFiltersContent" class="activity-more-filters-content">
|
||||
<div class="activity-select">
|
||||
<span class="activity-select"> {'User'|translate} </span>
|
||||
|
||||
<select class="user-selecter" placeholder="---" single>
|
||||
<option value="none">
|
||||
<span class='username_filter'>---</span>
|
||||
</option>
|
||||
{foreach from=$ulist item=user}
|
||||
<option value="{$user.id}">
|
||||
<span class='username_filter'>{$user.username}</span>
|
||||
<span class='nb_lines_str'>
|
||||
{'(%d)'|translate:$user.nb_lines}
|
||||
</span>
|
||||
</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="activity-select">
|
||||
<span class="activity-select"> {'Action'|translate} </span>
|
||||
|
||||
<select class="action-selecter" placeholder="---" single>
|
||||
<option value="none">
|
||||
<span class='action_filter'>---</span>
|
||||
</option>
|
||||
{foreach from=$ACTIONS item=action}
|
||||
<option value="{$action.value}">
|
||||
<span class='action_filter'>
|
||||
{ucfirst($action.object)|translate}
|
||||
/
|
||||
{if $action.action == 'delete'}
|
||||
{'deletion'|translate : $action.object}
|
||||
{else}
|
||||
{$action.action|translate}
|
||||
{/if}
|
||||
{' (%d)'|translate : $action.counter}
|
||||
</span>
|
||||
</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="activity-select">
|
||||
<span class="activity-select">{'Start-Date'|translate}</span>
|
||||
<input
|
||||
class="activity-date-selecter"
|
||||
type="date"
|
||||
id="date_min_activity"
|
||||
value="{$ACTIVITY_DATES.min}"
|
||||
min="{$ACTIVITY_DATES.min}"
|
||||
max="{$ACTIVITY_DATES.max}"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="activity-select">
|
||||
<span class="activity-select">{'End-Date'|translate}</span>
|
||||
<input
|
||||
class="activity-date-selecter"
|
||||
type="date"
|
||||
id="date_max_activity"
|
||||
value="{$ACTIVITY_DATES.max}"
|
||||
min="{$ACTIVITY_DATES.min}"
|
||||
max="{$ACTIVITY_DATES.max}"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{if $ADDITIONAL_FILT.type}
|
||||
<div class="additional-filters-section">
|
||||
<div class="additional-filters-info">
|
||||
{'Additional filters'|translate}
|
||||
</div>
|
||||
<div class="additional-filters">
|
||||
<div class="activity-filter-container">
|
||||
{if $ADDITIONAL_FILT.type == 'photo'}
|
||||
<span class="icon-picture">{$ADDITIONAL_FILT.name}</span>
|
||||
{else if $ADDITIONAL_FILT.type == 'album'}
|
||||
<span class="icon-folder-open">{$ADDITIONAL_FILT.name}</span>
|
||||
{else}
|
||||
<span class="icon-group">{$ADDITIONAL_FILT.name}</span>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pagination-container">
|
||||
<div class="pagination-arrow left">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
<div class="pagination-item-container">
|
||||
</div>
|
||||
<div class="user-update-spinner icon-spin6 animate-spin"></div>
|
||||
<div class="pagination-arrow rigth">
|
||||
<span class="icon-left-open"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="activity-noresult">
|
||||
{'No results'|translate}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="tab-title">
|
||||
<div class="action-title">
|
||||
{'Action'|translate}
|
||||
</div>
|
||||
|
||||
<div class="date-title">
|
||||
{'Date'|translate}
|
||||
</div>
|
||||
|
||||
<div class="user-title">
|
||||
{'User'|translate}
|
||||
</div>
|
||||
|
||||
<div class="detail-title">
|
||||
{'Details'|translate}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="tab">
|
||||
<div class="loading">
|
||||
<span class="icon-spin6 animate-spin"> </span>
|
||||
</div>
|
||||
<div class="line hide" id="-1">
|
||||
<div class="action-section">
|
||||
<div class="action-type">
|
||||
<span class="action-icon"></span>
|
||||
<span class="action-name"> Edit </span>
|
||||
</div>
|
||||
<div class="action-infos">
|
||||
<span class="action-infos-test"> T </span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="date-section">
|
||||
<span class="icon-clock"> </span>
|
||||
<span class="date-day">1 Janvier 1970</span>
|
||||
<span class="date-hour">a 00:00</span>
|
||||
</div>
|
||||
|
||||
<div class="user-section">
|
||||
<div class="user-pic">
|
||||
</div>
|
||||
<div class="user-name">
|
||||
Username
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail-section">
|
||||
<div class="detail-item detail-item-1">
|
||||
detail 1
|
||||
</div>
|
||||
<div class=" detail-item detail-item-2">
|
||||
detail 2
|
||||
</div>
|
||||
<div class="detail-item detail-item-3">
|
||||
detail 3
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
.container {
|
||||
padding: 0 30px;
|
||||
}
|
||||
|
||||
.container,
|
||||
.tab {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tab-title {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.tab-title div {
|
||||
text-align: left;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
|
||||
margin: 0 20px 10px 0px;
|
||||
|
||||
color: #9e9e9e;
|
||||
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.tab-title div:first-child {
|
||||
margin: 0 0 10px 35px;
|
||||
}
|
||||
|
||||
.tab-title .action-title,
|
||||
.line .action-section {
|
||||
min-width: 320px;
|
||||
max-width: 340px;
|
||||
}
|
||||
.tab-title .action-title {
|
||||
min-width: 298px !important;
|
||||
}
|
||||
|
||||
.tab-title .date-title,
|
||||
.line .date-section {
|
||||
min-width: 280px;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.tab-title .user-title,
|
||||
.line .user-section {
|
||||
min-width: 200px;
|
||||
max-width: 250px;
|
||||
}
|
||||
|
||||
|
||||
.line .action-section,
|
||||
.line .date-section,
|
||||
.line .user-section,
|
||||
.tab-title .action-title,
|
||||
.tab-title .date-title,
|
||||
.tab-title .user-title {
|
||||
text-align: left;
|
||||
{* width: 22%; *}
|
||||
}
|
||||
|
||||
.line .action-section,
|
||||
.line .date-section,
|
||||
.line .user-section {
|
||||
margin: 0 20px 0 0;
|
||||
}
|
||||
|
||||
.line .detail-section,
|
||||
.tab-title .detail-title {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.action-section {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.action-type {
|
||||
margin: 0 10px 0 15px;
|
||||
padding: 3px 10px;
|
||||
border-radius: 20px;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.action-infos {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.action-infos span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.date-section .date-day {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.user-section {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.user-section .user-pic {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
min-width: 30px;
|
||||
|
||||
border-radius: 50%;
|
||||
|
||||
margin-right: 10px;
|
||||
|
||||
display: flex;
|
||||
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
font-weight: 600;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.user-section .user-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Activity Header */
|
||||
|
||||
.activity-header {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div:has(> .activity-header) {
|
||||
margin-bottom: 38px;
|
||||
}
|
||||
|
||||
.activity-select span {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.user-selecter, .action-selecter {
|
||||
width: 230px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.actions-filters{
|
||||
margin-left: 25%;
|
||||
}
|
||||
|
||||
.user_activity_end_options{
|
||||
margin-left: auto;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.activity-noresult{
|
||||
opacity: 0.3;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 32px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.activity-more-filters{
|
||||
margin-left: 14px;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
width:70px;
|
||||
}
|
||||
|
||||
.activity-more-filters.extend-padding{
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.activity-more-filters, .activity-more-filters-content{
|
||||
background-color: #F3F3F3;
|
||||
}
|
||||
|
||||
.activity-more-filters-content{
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
font-weight: normal;
|
||||
padding : 23px 0px 22px 24px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.activity-period-info{
|
||||
margin-bottom : 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.additional-filters-section{
|
||||
margin-left: 5%;
|
||||
}
|
||||
|
||||
.additional-filters-info{
|
||||
margin-bottom : 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.additional-filters{
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.activity-filter-container span::before{
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.activity-filter-container .icon-cancel{
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.activity-date-selecter{
|
||||
display: block;
|
||||
height: 25.5px;
|
||||
width: 130px;
|
||||
margin-top: 10px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Selectize */
|
||||
.selectize-control.single.user-selecter, .selectize-control.single.action-selecter {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.selectize-control.single .selectize-input {
|
||||
height: 30px;
|
||||
padding: 0 10px;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: left;
|
||||
}
|
||||
|
||||
.selectize-input {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.selectize-control.single .selectize-input input{
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.selectize-dropdown {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.cancel-icon {
|
||||
margin: 0 0 0 10px !important;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.loading {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
.action-section::before {
|
||||
margin: 0 -5px 0 10px;
|
||||
opacity: 0.6;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
||||
<h2>{$TITLE}</h2>
|
||||
|
||||
{if isset($categories_because_of_groups) }
|
||||
<fieldset>
|
||||
<legend>{'Albums authorized thanks to group associations'|@translate}</legend>
|
||||
|
||||
<ul>
|
||||
{foreach from=$categories_because_of_groups item=cat }
|
||||
<li>{$cat}</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Other private albums'|@translate}</legend>
|
||||
|
||||
<form method="post" action="{$F_ACTION}">
|
||||
{$DOUBLE_SELECT}
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
</form>
|
||||
</fieldset>
|
||||
Reference in New Issue
Block a user