mirror of
https://github.com/YunoHost-Apps/piwigo_ynh.git
synced 2024-09-03 20:06:03 +02:00
mis a jour piwigo 2.7.4
This commit is contained in:
parent
d056dca453
commit
f09a35287d
685 changed files with 15782 additions and 18179 deletions
|
@ -37,7 +37,7 @@ check_status(ACCESS_GUEST);
|
|||
$title= l10n('About Piwigo');
|
||||
$page['body_id'] = 'theAboutPage';
|
||||
|
||||
trigger_action('loc_begin_about');
|
||||
trigger_notify('loc_begin_about');
|
||||
|
||||
$template->set_filename('about', 'about.tpl');
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
include_once(PHPWG_ROOT_PATH.'admin/include/functions_plugins.inc.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/add_core_tabs.inc.php');
|
||||
|
||||
trigger_action('loc_begin_admin');
|
||||
trigger_notify('loc_begin_admin');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Check Access and exit when user status is not ok |
|
||||
|
@ -244,7 +244,7 @@ if ($nb_photos_in_caddie > 0)
|
|||
// | Plugin menu |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$plugin_menu_links = trigger_event('get_admin_plugin_menu_links', array() );
|
||||
$plugin_menu_links = trigger_change('get_admin_plugin_menu_links', array() );
|
||||
|
||||
function UC_name_compare($a, $b)
|
||||
{
|
||||
|
@ -270,7 +270,6 @@ if (
|
|||
'album', // public/private; lock/unlock, permissions
|
||||
'cat_move',
|
||||
'cat_options', // public/private; lock/unlock
|
||||
'batch_manager', // associate/dissociate; delete; set level
|
||||
'user_list', // group assoc; user level
|
||||
'user_perm',
|
||||
)
|
||||
|
@ -285,7 +284,7 @@ if (
|
|||
// | Include specific page |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
trigger_action('loc_begin_admin_page');
|
||||
trigger_notify('loc_begin_admin_page');
|
||||
include(PHPWG_ROOT_PATH.'admin/'.$page['page'].'.php');
|
||||
|
||||
$template->assign('ACTIVE_MENU', get_active_menu($page['page']));
|
||||
|
@ -299,7 +298,7 @@ $template->assign( 'pwgmenu', pwg_URL() );
|
|||
|
||||
include(PHPWG_ROOT_PATH.'include/page_header.php');
|
||||
|
||||
trigger_action('loc_end_admin');
|
||||
trigger_notify('loc_end_admin');
|
||||
|
||||
flush_page_messages();
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ SELECT id, file, path, representative_ext
|
|||
pwg_mail_group(
|
||||
$_POST['group'],
|
||||
array(
|
||||
'subject' => l10n('[%s] Visit album %s', $conf['gallery_title'], trigger_event('render_category_name', $category['name'], 'admin_cat_list')),
|
||||
'subject' => l10n('[%s] Visit album %s', $conf['gallery_title'], trigger_change('render_category_name', $category['name'], 'admin_cat_list')),
|
||||
// TODO : change this language variable to 'Visit album %s'
|
||||
// TODO : 'language_selected' => ....
|
||||
),
|
||||
|
@ -91,11 +91,11 @@ SELECT id, file, path, representative_ext
|
|||
'filename' => 'cat_group_info',
|
||||
'assign' => array(
|
||||
'IMG_URL' => $img_url,
|
||||
'CAT_NAME' => trigger_event('render_category_name', $category['name'], 'admin_cat_list'),
|
||||
'CAT_NAME' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
|
||||
'LINK' => make_index_url(array(
|
||||
'category' => array(
|
||||
'id' => $category['id'],
|
||||
'name' => trigger_event('render_category_name', $category['name'], 'admin_cat_list'),
|
||||
'name' => trigger_change('render_category_name', $category['name'], 'admin_cat_list'),
|
||||
'permalink' => $category['permalink']
|
||||
)
|
||||
)),
|
||||
|
|
|
@ -43,6 +43,27 @@ check_status(ACCESS_ADMINISTRATOR);
|
|||
|
||||
check_input_parameter('selection', $_POST, true, PATTERN_ID);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | specific actions |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
if (isset($_GET['action']))
|
||||
{
|
||||
if ('empty_caddie' == $_GET['action'])
|
||||
{
|
||||
$query = '
|
||||
DELETE FROM '.CADDIE_TABLE.'
|
||||
WHERE user_id = '.$user['id'].'
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
$_SESSION['page_infos'] = array(
|
||||
l10n('Information data registered in database')
|
||||
);
|
||||
|
||||
redirect(get_root_url().'admin.php?page='.$_GET['page']);
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | initialize current set |
|
||||
|
@ -58,6 +79,19 @@ if (isset($_POST['submitFilter']))
|
|||
if (isset($_POST['filter_prefilter_use']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
|
||||
|
||||
if ('duplicates' == $_POST['filter_prefilter'])
|
||||
{
|
||||
if (isset($_POST['filter_duplicates_date']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['duplicates_date'] = true;
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_duplicates_dimensions']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['duplicates_dimensions'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_category_use']))
|
||||
|
@ -82,62 +116,82 @@ if (isset($_POST['submitFilter']))
|
|||
|
||||
if (isset($_POST['filter_level_use']))
|
||||
{
|
||||
check_input_parameter('filter_level', $_POST, false, '/^\d+$/');
|
||||
|
||||
if (in_array($_POST['filter_level'], $conf['available_permission_levels']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['level'] = $_POST['filter_level'];
|
||||
|
||||
|
||||
if (isset($_POST['filter_level_include_lower']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['level_include_lower'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isset($_POST['filter_dimension_use']))
|
||||
{
|
||||
foreach (array('min_width','max_width','min_height','max_height') as $type)
|
||||
{
|
||||
if ( preg_match('#^[0-9]+$#', $_POST['filter_dimension_'. $type ]) )
|
||||
if (filter_var($_POST['filter_dimension_'.$type], FILTER_VALIDATE_INT) !== false)
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['dimension'][$type] = $_POST['filter_dimension_'. $type ];
|
||||
}
|
||||
}
|
||||
foreach (array('min_ratio','max_ratio') as $type)
|
||||
{
|
||||
if ( preg_match('#^[0-9\.]+$#', $_POST['filter_dimension_'. $type ]) )
|
||||
if (filter_var($_POST['filter_dimension_'.$type], FILTER_VALIDATE_FLOAT) !== false)
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['dimension'][$type] = $_POST['filter_dimension_'. $type ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_filesize_use']))
|
||||
{
|
||||
foreach (array('min','max') as $type)
|
||||
{
|
||||
if (filter_var($_POST['filter_filesize_'.$type], FILTER_VALIDATE_FLOAT) !== false)
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['filesize'][$type] = $_POST['filter_filesize_'. $type ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST['filter_search_use']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['search']['q'] = $_POST['q'];
|
||||
}
|
||||
|
||||
$_SESSION['bulk_manager_filter'] = trigger_change('batch_manager_register_filters', $_SESSION['bulk_manager_filter']);
|
||||
}
|
||||
// filters from url
|
||||
else if (isset($_GET['filter']))
|
||||
elseif (isset($_GET['filter']))
|
||||
{
|
||||
if (!is_array($_GET['filter']))
|
||||
{
|
||||
$_GET['filter'] = explode(',', $_GET['filter']);
|
||||
}
|
||||
|
||||
|
||||
$_SESSION['bulk_manager_filter'] = array();
|
||||
|
||||
|
||||
foreach ($_GET['filter'] as $filter)
|
||||
{
|
||||
list($type, $value) = explode('-', $filter);
|
||||
|
||||
list($type, $value) = explode('-', $filter, 2);
|
||||
|
||||
switch ($type)
|
||||
{
|
||||
case 'prefilter':
|
||||
$_SESSION['bulk_manager_filter']['prefilter'] = $value;
|
||||
break;
|
||||
|
||||
case 'album':
|
||||
|
||||
case 'album': case 'category': case 'cat':
|
||||
if (is_numeric($value))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['category'] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'tag':
|
||||
if (is_numeric($value))
|
||||
{
|
||||
|
@ -145,13 +199,44 @@ else if (isset($_GET['filter']))
|
|||
$_SESSION['bulk_manager_filter']['tag_mode'] = 'AND';
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'level':
|
||||
if (is_numeric($value) && in_array($value, $conf['available_permission_levels']))
|
||||
{
|
||||
$_SESSION['bulk_manager_filter']['level'] = $value;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'search':
|
||||
$_SESSION['bulk_manager_filter']['search']['q'] = $value;
|
||||
break;
|
||||
|
||||
case 'dimension':
|
||||
$dim_map = array('w'=>'width','h'=>'height','r'=>'ratio');
|
||||
foreach (explode('-', $value) as $part)
|
||||
{
|
||||
$values = explode('..', substr($part, 1));
|
||||
if (isset($dim_map[$part[0]]))
|
||||
{
|
||||
$type = $dim_map[$part[0]];
|
||||
list(
|
||||
$_SESSION['bulk_manager_filter']['dimension']['min_'.$type],
|
||||
$_SESSION['bulk_manager_filter']['dimension']['max_'.$type]
|
||||
) = $values;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'filesize':
|
||||
list(
|
||||
$_SESSION['bulk_manager_filter']['filesize']['min'],
|
||||
$_SESSION['bulk_manager_filter']['filesize']['max']
|
||||
) = explode('..', $value);
|
||||
break;
|
||||
|
||||
default:
|
||||
$_SESSION['bulk_manager_filter'] = trigger_change('batch_manager_url_filter', $_SESSION['bulk_manager_filter'], $filter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -177,8 +262,8 @@ SELECT element_id
|
|||
FROM '.CADDIE_TABLE.'
|
||||
WHERE user_id = '.$user['id'].'
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'element_id');
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'element_id');
|
||||
|
||||
break;
|
||||
|
||||
case 'favorites':
|
||||
|
@ -187,8 +272,8 @@ SELECT image_id
|
|||
FROM '.FAVORITES_TABLE.'
|
||||
WHERE user_id = '.$user['id'].'
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'image_id');
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'image_id');
|
||||
|
||||
break;
|
||||
|
||||
case 'last_import':
|
||||
|
@ -204,9 +289,9 @@ SELECT id
|
|||
FROM '.IMAGES_TABLE.'
|
||||
WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 'no_virtual_album':
|
||||
|
@ -215,14 +300,14 @@ SELECT id
|
|||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
;';
|
||||
$all_elements = array_from_query($query, 'id');
|
||||
$all_elements = query2array($query, null, 'id');
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE dir IS NULL
|
||||
;';
|
||||
$virtual_categories = array_from_query($query, 'id');
|
||||
$virtual_categories = query2array($query, null, 'id');
|
||||
if (!empty($virtual_categories))
|
||||
{
|
||||
$query = '
|
||||
|
@ -230,11 +315,11 @@ SELECT id
|
|||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id IN ('.implode(',', $virtual_categories).')
|
||||
;';
|
||||
$linked_to_virtual = array_from_query($query, 'image_id');
|
||||
$linked_to_virtual = query2array($query, null, 'image_id');
|
||||
}
|
||||
|
||||
$filter_sets[] = array_diff($all_elements, $linked_to_virtual);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 'no_album':
|
||||
|
@ -245,8 +330,8 @@ SELECT
|
|||
LEFT JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id
|
||||
WHERE category_id is null
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
|
||||
break;
|
||||
|
||||
case 'no_tag':
|
||||
|
@ -257,44 +342,61 @@ SELECT
|
|||
LEFT JOIN '.IMAGE_TAG_TABLE.' ON id = image_id
|
||||
WHERE tag_id is null
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case 'duplicates':
|
||||
// we could use the group_concat MySQL function to retrieve the list of
|
||||
// image_ids but it would not be compatible with PostgreSQL, so let's
|
||||
// perform 2 queries instead. We hope there are not too many duplicates.
|
||||
$duplicates_on_fields = array('file');
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['duplicates_date']))
|
||||
{
|
||||
$duplicates_on_fields[] = 'date_creation';
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['duplicates_dimensions']))
|
||||
{
|
||||
$duplicates_on_fields[] = 'width';
|
||||
$duplicates_on_fields[] = 'height';
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT file
|
||||
SELECT
|
||||
GROUP_CONCAT(id) AS ids
|
||||
FROM '.IMAGES_TABLE.'
|
||||
GROUP BY file
|
||||
GROUP BY '.implode(',', $duplicates_on_fields).'
|
||||
HAVING COUNT(*) > 1
|
||||
;';
|
||||
$duplicate_files = array_from_query($query, 'file');
|
||||
$array_of_ids_string = query2array($query, null, 'ids');
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE file IN (\''.implode("','", array_map('pwg_db_real_escape_string', $duplicate_files)).'\')
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
$ids = array();
|
||||
|
||||
foreach ($array_of_ids_string as $ids_string)
|
||||
{
|
||||
$ids = array_merge($ids, explode(',', $ids_string));
|
||||
}
|
||||
|
||||
$filter_sets[] = $ids;
|
||||
|
||||
break;
|
||||
|
||||
case 'all_photos':
|
||||
$query = '
|
||||
if ( count($_SESSION['bulk_manager_filter']) == 1 )
|
||||
{// make the query only if this is the only filter
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
'.$conf['order_by'];
|
||||
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
$filter_sets = trigger_change('perform_batch_manager_prefilters', $filter_sets, $_SESSION['bulk_manager_filter']['prefilter']);
|
||||
break;
|
||||
}
|
||||
|
||||
$filter_sets = trigger_event('perform_batch_manager_prefilters', $filter_sets, $_SESSION['bulk_manager_filter']['prefilter']);
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['category']))
|
||||
|
@ -315,7 +417,7 @@ if (isset($_SESSION['bulk_manager_filter']['category']))
|
|||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id IN ('.implode(',', $categories).')
|
||||
;';
|
||||
$filter_sets[] = array_from_query($query, 'image_id');
|
||||
$filter_sets[] = query2array($query, null, 'image_id');
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['level']))
|
||||
|
@ -325,14 +427,14 @@ if (isset($_SESSION['bulk_manager_filter']['level']))
|
|||
{
|
||||
$operator = '<=';
|
||||
}
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE level '.$operator.' '.$_SESSION['bulk_manager_filter']['level'].'
|
||||
'.$conf['order_by'];
|
||||
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
}
|
||||
|
||||
if (!empty($_SESSION['bulk_manager_filter']['tags']))
|
||||
|
@ -374,16 +476,53 @@ if (isset($_SESSION['bulk_manager_filter']['dimension']))
|
|||
// max_ratio is a floor value, so must be a bit increased
|
||||
$where_clause[] = 'width/height < '.($_SESSION['bulk_manager_filter']['dimension']['max_ratio']+0.01);
|
||||
}
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE '.implode(' AND ',$where_clause).'
|
||||
'.$conf['order_by'];
|
||||
|
||||
$filter_sets[] = array_from_query($query, 'id');
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['filesize']))
|
||||
{
|
||||
$where_clauses = array();
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['filesize']['min']))
|
||||
{
|
||||
$where_clause[] = 'filesize >= '.$_SESSION['bulk_manager_filter']['filesize']['min']*1024;
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['filesize']['max']))
|
||||
{
|
||||
$where_clause[] = 'filesize <= '.$_SESSION['bulk_manager_filter']['filesize']['max']*1024;
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE '.implode(' AND ',$where_clause).'
|
||||
'.$conf['order_by'];
|
||||
|
||||
$filter_sets[] = query2array($query, null, 'id');
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['search']) &&
|
||||
strlen($_SESSION['bulk_manager_filter']['search']['q']))
|
||||
{
|
||||
include_once( PHPWG_ROOT_PATH .'include/functions_search.inc.php' );
|
||||
$res = get_quick_search_results_no_cache($_SESSION['bulk_manager_filter']['search']['q'], array('permissions'=>false));
|
||||
if (!empty($res['items']) && !empty($res['qs']['unmatched_terms']))
|
||||
{
|
||||
$template->assign('no_search_results', array_map('htmlspecialchars', $res['qs']['unmatched_terms']) );
|
||||
}
|
||||
$filter_sets[] = $res['items'];
|
||||
}
|
||||
|
||||
$filter_sets = trigger_change('batch_manager_perform_filters', $filter_sets, $_SESSION['bulk_manager_filter']);
|
||||
|
||||
$current_set = array_shift($filter_sets);
|
||||
foreach ($filter_sets as $set)
|
||||
{
|
||||
|
@ -433,17 +572,6 @@ $tabsheet->select($page['tab']);
|
|||
$tabsheet->assign();
|
||||
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | tags |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$query = '
|
||||
SELECT id, name
|
||||
FROM '.TAGS_TABLE.'
|
||||
;';
|
||||
$template->assign('tags', get_taglist($query, false));
|
||||
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | dimensions |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -451,6 +579,7 @@ $template->assign('tags', get_taglist($query, false));
|
|||
$widths = array();
|
||||
$heights = array();
|
||||
$ratios = array();
|
||||
$dimensions = array();
|
||||
|
||||
// get all width, height and ratios
|
||||
$query = '
|
||||
|
@ -481,28 +610,20 @@ if (empty($widths))
|
|||
$ratios = array(1.25, 1.52, 1.78);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$widths = array_unique($widths);
|
||||
sort($widths);
|
||||
|
||||
$heights = array_unique($heights);
|
||||
sort($heights);
|
||||
|
||||
$ratios = array_unique($ratios);
|
||||
sort($ratios);
|
||||
|
||||
$dimensions['widths'] = implode(',', $widths);
|
||||
$dimensions['heights'] = implode(',', $heights);
|
||||
$dimensions['ratios'] = implode(',', $ratios);
|
||||
foreach (array('widths','heights','ratios') as $type)
|
||||
{
|
||||
${$type} = array_unique(${$type});
|
||||
sort(${$type});
|
||||
$dimensions[$type] = implode(',', ${$type});
|
||||
}
|
||||
|
||||
$dimensions['bounds'] = array(
|
||||
'min_width' => $widths[0],
|
||||
'max_width' => $widths[count($widths)-1],
|
||||
'max_width' => end($widths),
|
||||
'min_height' => $heights[0],
|
||||
'max_height' => $heights[count($heights)-1],
|
||||
'max_height' => end($heights),
|
||||
'min_ratio' => $ratios[0],
|
||||
'max_ratio' => $ratios[count($ratios)-1],
|
||||
'max_ratio' => end($ratios),
|
||||
);
|
||||
|
||||
// find ratio categories
|
||||
|
@ -533,13 +654,13 @@ foreach ($ratios as $ratio)
|
|||
}
|
||||
}
|
||||
|
||||
foreach (array_keys($ratio_categories) as $ratio_category)
|
||||
foreach (array_keys($ratio_categories) as $type)
|
||||
{
|
||||
if (count($ratio_categories[$ratio_category]) > 0)
|
||||
if (count($ratio_categories[$type]) > 0)
|
||||
{
|
||||
$dimensions['ratio_'.$ratio_category] = array(
|
||||
'min' => $ratio_categories[$ratio_category][0],
|
||||
'max' => array_pop($ratio_categories[$ratio_category]),
|
||||
$dimensions['ratio_'.$type] = array(
|
||||
'min' => $ratio_categories[$type][0],
|
||||
'max' => end($ratio_categories[$type]),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -555,6 +676,56 @@ foreach (array_keys($dimensions['bounds']) as $type)
|
|||
|
||||
$template->assign('dimensions', $dimensions);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | filesize |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$filesizes = array();
|
||||
$filesize = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
filesize
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE filesize IS NOT NULL
|
||||
GROUP BY filesize
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$filesizes[] = sprintf('%.1f', $row['filesize']/1024);
|
||||
}
|
||||
|
||||
if (empty($filesizes))
|
||||
{ // arbitrary values, only used when no photos on the gallery
|
||||
$filesizes = array(0, 1, 2, 5, 8, 15);
|
||||
}
|
||||
|
||||
$filesizes = array_unique($filesizes);
|
||||
sort($filesizes);
|
||||
|
||||
// add 0.1MB to the last value, to make sure the heavier photo will be in
|
||||
// the result
|
||||
$filesizes[count($filesizes)-1]+= 0.1;
|
||||
|
||||
$filesize['list'] = implode(',', $filesizes);
|
||||
|
||||
$filesize['bounds'] = array(
|
||||
'min' => $filesizes[0],
|
||||
'max' => end($filesizes),
|
||||
);
|
||||
|
||||
// selected=bound if nothing selected
|
||||
foreach (array_keys($filesize['bounds']) as $type)
|
||||
{
|
||||
$filesize['selected'][$type] = isset($_SESSION['bulk_manager_filter']['filesize'][$type])
|
||||
? $_SESSION['bulk_manager_filter']['filesize'][$type]
|
||||
: $filesize['bounds'][$type]
|
||||
;
|
||||
}
|
||||
|
||||
$template->assign('filesize', $filesize);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | open specific mode |
|
||||
|
|
|
@ -40,7 +40,7 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
|
||||
check_status(ACCESS_ADMINISTRATOR);
|
||||
|
||||
trigger_action('loc_begin_element_set_global');
|
||||
trigger_notify('loc_begin_element_set_global');
|
||||
|
||||
check_input_parameter('del_tags', $_POST, true, PATTERN_ID);
|
||||
check_input_parameter('associate', $_POST, false, PATTERN_ID);
|
||||
|
@ -86,7 +86,8 @@ if (isset($_POST['submit']))
|
|||
}
|
||||
|
||||
$action = $_POST['selectAction'];
|
||||
|
||||
$redirect = false;
|
||||
|
||||
if ('remove_from_caddie' == $action)
|
||||
{
|
||||
$query = '
|
||||
|
@ -98,10 +99,10 @@ DELETE
|
|||
pwg_query($query);
|
||||
|
||||
// remove from caddie action available only in caddie so reload content
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
|
||||
if ('add_tags' == $action)
|
||||
else if ('add_tags' == $action)
|
||||
{
|
||||
if (empty($_POST['add_tags']))
|
||||
{
|
||||
|
@ -114,27 +115,33 @@ DELETE
|
|||
|
||||
if ('no_tag' == $page['prefilter'])
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ('del_tags' == $action)
|
||||
else if ('del_tags' == $action)
|
||||
{
|
||||
if (isset($_POST['del_tags']) and count($_POST['del_tags']) > 0)
|
||||
{
|
||||
$query = '
|
||||
if (isset($_POST['del_tags']) and count($_POST['del_tags']) > 0)
|
||||
{
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '.IMAGE_TAG_TABLE.'
|
||||
WHERE image_id IN ('.implode(',', $collection).')
|
||||
AND tag_id IN ('.implode(',', $_POST['del_tags']).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
pwg_query($query);
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['tags']) &&
|
||||
count(array_intersect($_SESSION['bulk_manager_filter']['tags'], $_POST['del_tags'])))
|
||||
{
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
$page['errors'][] = l10n('Select at least one tag');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ('associate' == $action)
|
||||
|
@ -147,54 +154,54 @@ DELETE
|
|||
$_SESSION['page_infos'] = array(
|
||||
l10n('Information data registered in database')
|
||||
);
|
||||
|
||||
|
||||
// let's refresh the page because we the current set might be modified
|
||||
if ('no_album' == $page['prefilter'])
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
|
||||
if ('no_virtual_album' == $page['prefilter'])
|
||||
else if ('no_virtual_album' == $page['prefilter'])
|
||||
{
|
||||
$category_info = get_cat_info($_POST['associate']);
|
||||
if (empty($category_info['dir']))
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ('move' == $action)
|
||||
else if ('move' == $action)
|
||||
{
|
||||
move_images_to_categories($collection, array($_POST['move']));
|
||||
|
||||
$_SESSION['page_infos'] = array(
|
||||
l10n('Information data registered in database')
|
||||
);
|
||||
|
||||
|
||||
// let's refresh the page because we the current set might be modified
|
||||
if ('no_album' == $page['prefilter'])
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
|
||||
if ('no_virtual_album' == $page['prefilter'])
|
||||
else if ('no_virtual_album' == $page['prefilter'])
|
||||
{
|
||||
$category_info = get_cat_info($_POST['move']);
|
||||
if (empty($category_info['dir']))
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SESSION['bulk_manager_filter']['category'])
|
||||
else if (isset($_SESSION['bulk_manager_filter']['category'])
|
||||
and $_POST['move'] != $_SESSION['bulk_manager_filter']['category'])
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ('dissociate' == $action)
|
||||
else if ('dissociate' == $action)
|
||||
{
|
||||
// physical links must not be broken, so we must first retrieve image_id
|
||||
// which create virtual links with the category to "dissociate from".
|
||||
|
@ -224,20 +231,20 @@ DELETE
|
|||
$_SESSION['page_infos'] = array(
|
||||
l10n('Information data registered in database')
|
||||
);
|
||||
|
||||
|
||||
// let's refresh the page because the current set might be modified
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
|
||||
// author
|
||||
if ('author' == $action)
|
||||
else if ('author' == $action)
|
||||
{
|
||||
if (isset($_POST['remove_author']))
|
||||
{
|
||||
$_POST['author'] = null;
|
||||
}
|
||||
|
||||
|
||||
$datas = array();
|
||||
foreach ($collection as $image_id)
|
||||
{
|
||||
|
@ -255,13 +262,13 @@ DELETE
|
|||
}
|
||||
|
||||
// title
|
||||
if ('title' == $action)
|
||||
else if ('title' == $action)
|
||||
{
|
||||
if (isset($_POST['remove_title']))
|
||||
{
|
||||
$_POST['title'] = null;
|
||||
}
|
||||
|
||||
|
||||
$datas = array();
|
||||
foreach ($collection as $image_id)
|
||||
{
|
||||
|
@ -277,21 +284,18 @@ DELETE
|
|||
$datas
|
||||
);
|
||||
}
|
||||
|
||||
// date_creation
|
||||
if ('date_creation' == $action)
|
||||
{
|
||||
$date_creation = sprintf(
|
||||
'%u-%u-%u',
|
||||
$_POST['date_creation_year'],
|
||||
$_POST['date_creation_month'],
|
||||
$_POST['date_creation_day']
|
||||
);
|
||||
|
||||
if (isset($_POST['remove_date_creation']))
|
||||
// date_creation
|
||||
else if ('date_creation' == $action)
|
||||
{
|
||||
if (isset($_POST['remove_date_creation']) || empty($_POST['date_creation']))
|
||||
{
|
||||
$date_creation = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$date_creation = $_POST['date_creation'];
|
||||
}
|
||||
|
||||
$datas = array();
|
||||
foreach ($collection as $image_id)
|
||||
|
@ -308,9 +312,9 @@ DELETE
|
|||
$datas
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// privacy_level
|
||||
if ('level' == $action)
|
||||
else if ('level' == $action)
|
||||
{
|
||||
$datas = array();
|
||||
foreach ($collection as $image_id)
|
||||
|
@ -331,19 +335,19 @@ DELETE
|
|||
{
|
||||
if ($_POST['level'] < $_SESSION['bulk_manager_filter']['level'])
|
||||
{
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// add_to_caddie
|
||||
if ('add_to_caddie' == $action)
|
||||
else if ('add_to_caddie' == $action)
|
||||
{
|
||||
fill_caddie($collection);
|
||||
}
|
||||
|
||||
|
||||
// delete
|
||||
if ('delete' == $action)
|
||||
else if ('delete' == $action)
|
||||
{
|
||||
if (isset($_POST['confirm_deletion']) and 1 == $_POST['confirm_deletion'])
|
||||
{
|
||||
|
@ -356,7 +360,7 @@ DELETE
|
|||
);
|
||||
|
||||
$redirect_url = get_root_url().'admin.php?page='.$_GET['page'];
|
||||
redirect($redirect_url);
|
||||
$redirect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -370,13 +374,13 @@ DELETE
|
|||
}
|
||||
|
||||
// synchronize metadata
|
||||
if ('metadata' == $action)
|
||||
else if ('metadata' == $action)
|
||||
{
|
||||
sync_metadata($collection);
|
||||
$page['infos'][] = l10n('Metadata synchronized from file');
|
||||
}
|
||||
|
||||
if ('delete_derivatives' == $action)
|
||||
else if ('delete_derivatives' == $action && !empty($_POST['del_derivatives_type']))
|
||||
{
|
||||
$query='SELECT path,representative_ext FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $collection).')';
|
||||
|
@ -390,7 +394,7 @@ DELETE
|
|||
}
|
||||
}
|
||||
|
||||
if ('generate_derivatives' == $action)
|
||||
else if ('generate_derivatives' == $action)
|
||||
{
|
||||
if ($_POST['regenerateSuccess'] != '0')
|
||||
{
|
||||
|
@ -402,7 +406,17 @@ DELETE
|
|||
}
|
||||
}
|
||||
|
||||
trigger_action('element_set_global_action', $action, $collection);
|
||||
if (!in_array($action, array('remove_from_caddie','add_to_caddie','delete_derivatives','generate_derivatives')))
|
||||
{
|
||||
invalidate_user_cache();
|
||||
}
|
||||
|
||||
trigger_notify('element_set_global_action', $action, $collection);
|
||||
|
||||
if ($redirect)
|
||||
{
|
||||
redirect($redirect_url);
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -427,7 +441,7 @@ if ($conf['enable_synchronization'])
|
|||
$prefilters[] = array('ID' => 'no_virtual_album', 'NAME' => l10n('With no virtual album'));
|
||||
}
|
||||
|
||||
$prefilters = trigger_event('get_batch_manager_prefilters', $prefilters);
|
||||
$prefilters = trigger_change('get_batch_manager_prefilters', $prefilters);
|
||||
usort($prefilters, 'UC_name_compare');
|
||||
|
||||
$template->assign(
|
||||
|
@ -472,6 +486,8 @@ $template->assign(
|
|||
);
|
||||
|
||||
// tags
|
||||
$filter_tags = array();
|
||||
|
||||
if (!empty($_SESSION['bulk_manager_filter']['tags']))
|
||||
{
|
||||
$query = '
|
||||
|
@ -481,19 +497,11 @@ SELECT
|
|||
FROM '.TAGS_TABLE.'
|
||||
WHERE id IN ('.implode(',', $_SESSION['bulk_manager_filter']['tags']).')
|
||||
;';
|
||||
$template->assign('filter_tags', get_taglist($query));
|
||||
|
||||
$filter_tags = get_taglist($query);
|
||||
}
|
||||
|
||||
// Virtualy associate a picture to a category
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
$categories = array_from_query($query);
|
||||
usort($categories, 'global_rank_compare');
|
||||
display_select_categories($categories, array(), 'category_full_name_options', true);
|
||||
|
||||
display_select_cat_wrapper($query, array(), 'category_parent_options');
|
||||
$template->assign('filter_tags', $filter_tags);
|
||||
|
||||
// in the filter box, which category to select by default
|
||||
$selected_category = array();
|
||||
|
@ -506,24 +514,20 @@ else
|
|||
{
|
||||
// we need to know the category in which the last photo was added
|
||||
$query = '
|
||||
SELECT
|
||||
category_id,
|
||||
id_uppercat
|
||||
FROM '.IMAGES_TABLE.' AS i
|
||||
JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = i.id
|
||||
JOIN '.CATEGORIES_TABLE.' AS c ON category_id = c.id
|
||||
ORDER BY i.id DESC
|
||||
SELECT category_id
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
ORDER BY image_id DESC
|
||||
LIMIT 1
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
if (pwg_db_num_rows($result) > 0)
|
||||
{
|
||||
$row = pwg_db_fetch_assoc($result);
|
||||
$selected_category = array($row['category_id']);
|
||||
$selected_category[] = $row['category_id'];
|
||||
}
|
||||
}
|
||||
|
||||
$template->assign( 'filter_category_selected', $selected_category);
|
||||
$template->assign('filter_category_selected', $selected_category);
|
||||
|
||||
// Dissociate from a category : categories listed for dissociation can only
|
||||
// represent virtual links. We can't create orphans. Links to physical
|
||||
|
@ -532,12 +536,8 @@ if (count($page['cat_elements_id']) > 0)
|
|||
{
|
||||
$query = '
|
||||
SELECT
|
||||
DISTINCT(category_id) AS id,
|
||||
c.name,
|
||||
c.uppercats,
|
||||
c.global_rank
|
||||
DISTINCT(category_id) AS id
|
||||
FROM '.IMAGE_CATEGORY_TABLE.' AS ic
|
||||
JOIN '.CATEGORIES_TABLE.' AS c ON c.id = ic.category_id
|
||||
JOIN '.IMAGES_TABLE.' AS i ON i.id = ic.image_id
|
||||
WHERE ic.image_id IN ('.implode(',', $page['cat_elements_id']).')
|
||||
AND (
|
||||
|
@ -545,40 +545,19 @@ SELECT
|
|||
OR i.storage_category_id IS NULL
|
||||
)
|
||||
;';
|
||||
display_select_cat_wrapper($query, array(), 'dissociate_options', true);
|
||||
|
||||
$template->assign('associated_categories', query2array($query, 'id', 'id'));
|
||||
}
|
||||
|
||||
if (count($page['cat_elements_id']) > 0)
|
||||
{
|
||||
// remove tags
|
||||
$tags = get_common_tags($page['cat_elements_id'], -1);
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'DEL_TAG_SELECTION' => get_html_tag_selection($tags, 'del_tags'),
|
||||
)
|
||||
);
|
||||
$template->assign('associated_tags', get_common_tags($page['cat_elements_id'], -1));
|
||||
}
|
||||
|
||||
// creation date
|
||||
$day =
|
||||
empty($_POST['date_creation_day']) ? date('j') : $_POST['date_creation_day'];
|
||||
|
||||
$month =
|
||||
empty($_POST['date_creation_month']) ? date('n') : $_POST['date_creation_month'];
|
||||
|
||||
$year =
|
||||
empty($_POST['date_creation_year']) ? date('Y') : $_POST['date_creation_year'];
|
||||
|
||||
$month_list = $lang['month'];
|
||||
$month_list[0]='------------';
|
||||
ksort($month_list);
|
||||
$template->assign( array(
|
||||
'month_list' => $month_list,
|
||||
'DATE_CREATION_DAY' => (int)$day,
|
||||
'DATE_CREATION_MONTH'=> (int)$month,
|
||||
'DATE_CREATION_YEAR' => (int)$year,
|
||||
)
|
||||
$template->assign('DATE_CREATION',
|
||||
empty($_POST['date_creation']) ? date('Y-m-d').' 00:00:00' : $_POST['date_creation']
|
||||
);
|
||||
|
||||
// image level options
|
||||
|
@ -664,11 +643,11 @@ if (count($page['cat_elements_id']) > 0)
|
|||
$query = '
|
||||
SELECT id,path,representative_ext,file,filesize,level,name,width,height,rotation
|
||||
FROM '.IMAGES_TABLE;
|
||||
|
||||
|
||||
if ($is_category)
|
||||
{
|
||||
$category_info = get_cat_info($_SESSION['bulk_manager_filter']['category']);
|
||||
|
||||
|
||||
$conf['order_by'] = $conf['order_by_inside_category'];
|
||||
if (!empty($category_info['image_order']))
|
||||
{
|
||||
|
@ -720,14 +699,13 @@ SELECT id,path,representative_ext,file,filesize,level,name,width,height,rotation
|
|||
$template->assign('thumb_params', $thumb_params);
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'nb_thumbs_page' => $nb_thumbs_page,
|
||||
'nb_thumbs_set' => count($page['cat_elements_id']),
|
||||
)
|
||||
);
|
||||
$template->assign(array(
|
||||
'nb_thumbs_page' => $nb_thumbs_page,
|
||||
'nb_thumbs_set' => count($page['cat_elements_id']),
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('tags', 'categories')),
|
||||
));
|
||||
|
||||
trigger_action('loc_end_element_set_global');
|
||||
trigger_notify('loc_end_element_set_global');
|
||||
|
||||
//----------------------------------------------------------- sending html code
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'batch_manager_global');
|
||||
|
|
|
@ -39,7 +39,7 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
// +-----------------------------------------------------------------------+
|
||||
check_status(ACCESS_ADMINISTRATOR);
|
||||
|
||||
trigger_action('loc_begin_element_set_unit');
|
||||
trigger_notify('loc_begin_element_set_unit');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | unit mode form submission |
|
||||
|
@ -76,23 +76,13 @@ SELECT id, date_creation
|
|||
$data['comment'] = strip_tags(@$_POST['description-'.$row['id']]);
|
||||
}
|
||||
|
||||
if (isset($_POST['date_creation_action-'.$row['id']]))
|
||||
if (!empty($_POST['date_creation-'.$row['id']]))
|
||||
{
|
||||
if ('set' == $_POST['date_creation_action-'.$row['id']])
|
||||
{
|
||||
$data['date_creation'] =
|
||||
$_POST['date_creation_year-'.$row['id']]
|
||||
.'-'.$_POST['date_creation_month-'.$row['id']]
|
||||
.'-'.$_POST['date_creation_day-'.$row['id']];
|
||||
}
|
||||
else if ('unset' == $_POST['date_creation_action-'.$row['id']])
|
||||
{
|
||||
$data['date_creation'] = '';
|
||||
}
|
||||
$data['date_creation'] = $_POST['date_creation-'.$row['id']];
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['date_creation'] = $row['date_creation'];
|
||||
$data['date_creation'] = null;
|
||||
}
|
||||
|
||||
$datas[] = $data;
|
||||
|
@ -116,6 +106,7 @@ SELECT id, date_creation
|
|||
);
|
||||
|
||||
$page['infos'][] = l10n('Photo informations updated');
|
||||
invalidate_user_cache();
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -127,15 +118,10 @@ $template->set_filenames(
|
|||
|
||||
$base_url = PHPWG_ROOT_PATH.'admin.php';
|
||||
|
||||
$month_list = $lang['month'];
|
||||
$month_list[0]='------------';
|
||||
ksort($month_list);
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'U_ELEMENTS_PAGE' => $base_url.get_query_string_diff(array('display','start')),
|
||||
'F_ACTION'=>$base_url.get_query_string_diff(array()),
|
||||
'month_list' => $month_list,
|
||||
'F_ACTION' => $base_url.get_query_string_diff(array()),
|
||||
'level_options' => get_privacy_level_options(),
|
||||
)
|
||||
);
|
||||
|
@ -147,14 +133,7 @@ $template->assign(
|
|||
// how many items to display on this page
|
||||
if (!empty($_GET['display']))
|
||||
{
|
||||
if ('all' == $_GET['display'])
|
||||
{
|
||||
$page['nb_images'] = count($page['cat_elements_id']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$page['nb_images'] = intval($_GET['display']);
|
||||
}
|
||||
$page['nb_images'] = intval($_GET['display']);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -192,11 +171,11 @@ if (count($page['cat_elements_id']) > 0)
|
|||
$query = '
|
||||
SELECT *
|
||||
FROM '.IMAGES_TABLE;
|
||||
|
||||
|
||||
if ($is_category)
|
||||
{
|
||||
$category_info = get_cat_info($_SESSION['bulk_manager_filter']['category']);
|
||||
|
||||
|
||||
$conf['order_by'] = $conf['order_by_inside_category'];
|
||||
if (!empty($category_info['image_order']))
|
||||
{
|
||||
|
@ -228,16 +207,6 @@ SELECT *
|
|||
|
||||
$src_image = new SrcImage($row);
|
||||
|
||||
// creation date
|
||||
if (!empty($row['date_creation']))
|
||||
{
|
||||
list($year,$month,$day) = explode('-', $row['date_creation']);
|
||||
}
|
||||
else
|
||||
{
|
||||
list($year,$month,$day) = array('',0,0);
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
|
@ -266,18 +235,19 @@ SELECT
|
|||
'AUTHOR' => htmlspecialchars(@$row['author']),
|
||||
'LEVEL' => !empty($row['level'])?$row['level']:'0',
|
||||
'DESCRIPTION' => htmlspecialchars(@$row['comment']),
|
||||
'DATE_CREATION_YEAR' => $year,
|
||||
'DATE_CREATION_MONTH' => (int)$month,
|
||||
'DATE_CREATION_DAY' => (int)$day,
|
||||
'DATE_CREATION' => $row['date_creation'],
|
||||
'TAGS' => $tag_selection,
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
$template->assign('ELEMENT_IDS', implode(',', $element_ids));
|
||||
$template->assign(array(
|
||||
'ELEMENT_IDS' => implode(',', $element_ids),
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('tags')),
|
||||
));
|
||||
}
|
||||
|
||||
trigger_action('loc_end_element_set_unit');
|
||||
trigger_notify('loc_end_element_set_unit');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | sending html code |
|
||||
|
|
|
@ -33,13 +33,22 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
// +-----------------------------------------------------------------------+
|
||||
check_status(ACCESS_ADMINISTRATOR);
|
||||
|
||||
trigger_action('loc_begin_cat_list');
|
||||
trigger_notify('loc_begin_cat_list');
|
||||
|
||||
if (!empty($_POST) or isset($_GET['delete']))
|
||||
{
|
||||
check_pwg_token();
|
||||
}
|
||||
|
||||
$sort_orders = array(
|
||||
'name ASC' => l10n('Album name, A → Z'),
|
||||
'name DESC' => l10n('Album name, Z → A'),
|
||||
'date_creation DESC' => l10n('Date created, new → old'),
|
||||
'date_creation ASC' => l10n('Date created, old → new'),
|
||||
'date_available DESC' => l10n('Date posted, new → old'),
|
||||
'date_available ASC' => l10n('Date posted, old → new'),
|
||||
);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | functions |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -86,6 +95,77 @@ function save_categories_order($categories)
|
|||
update_global_rank();
|
||||
}
|
||||
|
||||
function get_categories_ref_date($ids, $field='date_available', $minmax='max')
|
||||
{
|
||||
// we need to work on the whole tree under each category, even if we don't
|
||||
// want to sort sub categories
|
||||
$category_ids = get_subcat_ids($ids);
|
||||
|
||||
// search for the reference date of each album
|
||||
$query = '
|
||||
SELECT
|
||||
category_id,
|
||||
'.$minmax.'('.$field.') as ref_date
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
JOIN '.IMAGES_TABLE.' ON image_id = id
|
||||
WHERE category_id IN ('.implode(',', $category_ids).')
|
||||
GROUP BY category_id
|
||||
;';
|
||||
$ref_dates = query2array($query, 'category_id', 'ref_date');
|
||||
|
||||
// the iterate on all albums (having a ref_date or not) to find the
|
||||
// reference_date, with a search on sub-albums
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
uppercats
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $category_ids).')
|
||||
;';
|
||||
$uppercats_of = query2array($query, 'id', 'uppercats');
|
||||
|
||||
foreach (array_keys($uppercats_of) as $cat_id)
|
||||
{
|
||||
// find the subcats
|
||||
$subcat_ids = array();
|
||||
|
||||
foreach ($uppercats_of as $id => $uppercats)
|
||||
{
|
||||
if (preg_match('/(^|,)'.$cat_id.'(,|$)/', $uppercats))
|
||||
{
|
||||
$subcat_ids[] = $id;
|
||||
}
|
||||
}
|
||||
|
||||
$to_compare = array();
|
||||
foreach ($subcat_ids as $id)
|
||||
{
|
||||
if (isset($ref_dates[$id]))
|
||||
{
|
||||
$to_compare[] = $ref_dates[$id];
|
||||
}
|
||||
}
|
||||
|
||||
if (count($to_compare) > 0)
|
||||
{
|
||||
$ref_dates[$cat_id] = 'max' == $minmax ? max($to_compare) : min($to_compare);
|
||||
}
|
||||
else
|
||||
{
|
||||
$ref_dates[$cat_id] = null;
|
||||
}
|
||||
}
|
||||
|
||||
// only return the list of $ids, not the sub-categories
|
||||
$return = array();
|
||||
foreach ($ids as $id)
|
||||
{
|
||||
$return[$id] = $ref_dates[$id];
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | initialization |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -152,6 +232,11 @@ elseif (isset($_POST['submitManualOrder']))
|
|||
}
|
||||
elseif (isset($_POST['submitAutoOrder']))
|
||||
{
|
||||
if (!isset($sort_orders[ $_POST['order_by'] ]))
|
||||
{
|
||||
die('Invalid sort order');
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
|
@ -166,9 +251,22 @@ SELECT id
|
|||
}
|
||||
|
||||
$categories = array();
|
||||
$names = array();
|
||||
$id_uppercats = array();
|
||||
$sort = array();
|
||||
|
||||
list($order_by_field, $order_by_asc) = explode(' ', $_POST['order_by']);
|
||||
|
||||
$order_by_date = false;
|
||||
if (strpos($order_by_field, 'date_') === 0)
|
||||
{
|
||||
$order_by_date = true;
|
||||
|
||||
$ref_dates = get_categories_ref_date(
|
||||
$category_ids,
|
||||
$order_by_field,
|
||||
'ASC' == $order_by_asc ? 'min' : 'max'
|
||||
);
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT id, name, id_uppercat
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
|
@ -177,19 +275,28 @@ SELECT id, name, id_uppercat
|
|||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
if ($order_by_date)
|
||||
{
|
||||
$sort[] = $ref_dates[ $row['id'] ];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sort[] = $row['name'];
|
||||
}
|
||||
|
||||
$categories[] = array(
|
||||
'id' => $row['id'],
|
||||
'id_uppercat' => $row['id_uppercat'],
|
||||
);
|
||||
$names[] = $row['name'];
|
||||
}
|
||||
|
||||
array_multisort(
|
||||
$names,
|
||||
$sort,
|
||||
SORT_REGULAR,
|
||||
'asc' == $_POST['ascdesc'] ? SORT_ASC : SORT_DESC,
|
||||
'ASC' == $order_by_asc ? SORT_ASC : SORT_DESC,
|
||||
$categories
|
||||
);
|
||||
|
||||
save_categories_order($categories);
|
||||
|
||||
$page['infos'][] = l10n('Albums automatically sorted');
|
||||
|
@ -218,11 +325,14 @@ if (isset($_GET['parent_id']))
|
|||
{
|
||||
$form_action.= '&parent_id='.$_GET['parent_id'];
|
||||
}
|
||||
$sort_orders_checked = array_keys($sort_orders);
|
||||
|
||||
$template->assign(array(
|
||||
'CATEGORIES_NAV'=>$navigation,
|
||||
'F_ACTION'=>$form_action,
|
||||
'PWG_TOKEN' => get_pwg_token(),
|
||||
'sort_orders' => $sort_orders,
|
||||
'sort_order_checked' => array_shift($sort_orders_checked),
|
||||
));
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -324,7 +434,7 @@ foreach ($categories as $category)
|
|||
$tpl_cat =
|
||||
array(
|
||||
'NAME' =>
|
||||
trigger_event(
|
||||
trigger_change(
|
||||
'render_category_name',
|
||||
$category['name'],
|
||||
'admin_cat_list'
|
||||
|
@ -363,7 +473,7 @@ foreach ($categories as $category)
|
|||
$template->append('categories', $tpl_cat);
|
||||
}
|
||||
|
||||
trigger_action('loc_end_cat_list');
|
||||
trigger_notify('loc_end_cat_list');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | sending html code |
|
||||
|
|
|
@ -103,7 +103,7 @@ SELECT galleries_url
|
|||
// +-----------------------------------------------------------------------+
|
||||
check_status(ACCESS_ADMINISTRATOR);
|
||||
|
||||
trigger_action('loc_begin_cat_modify');
|
||||
trigger_notify('loc_begin_cat_modify');
|
||||
|
||||
//---------------------------------------------------------------- verification
|
||||
if ( !isset( $_GET['cat_id'] ) || !is_numeric( $_GET['cat_id'] ) )
|
||||
|
@ -132,11 +132,25 @@ if (isset($_POST['submit']))
|
|||
$data,
|
||||
array('id' => $data['id'])
|
||||
);
|
||||
if (isset($_POST['apply_commentable_on_sub']))
|
||||
{
|
||||
$subcats = get_subcat_ids(array('id' => $data['id']));
|
||||
$query = '
|
||||
UPDATE '.CATEGORIES_TABLE.'
|
||||
SET commentable = \''.$data['commentable'].'\'
|
||||
WHERE id IN ('.implode(',', $subcats).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
// retrieve cat infos before continuing (following updates are expensive)
|
||||
$cat_info = get_cat_info($_GET['cat_id']);
|
||||
|
||||
if ($cat_info['visible'] != get_boolean( $_POST['visible'] ) )
|
||||
if ($_POST['visible']=='true_sub')
|
||||
{
|
||||
set_cat_visible(array($_GET['cat_id']), true, true);
|
||||
}
|
||||
elseif ($cat_info['visible'] != get_boolean( $_POST['visible'] ) )
|
||||
{
|
||||
set_cat_visible(array($_GET['cat_id']), $_POST['visible']);
|
||||
}
|
||||
|
@ -288,12 +302,11 @@ else
|
|||
|
||||
$intro.= '<br>'.l10n('Numeric identifier : %d', $category['id']);
|
||||
|
||||
$template->assign('INTRO', $intro);
|
||||
|
||||
$template->assign(
|
||||
'U_MANAGE_RANKS',
|
||||
$base_url.'element_set_ranks&cat_id='.$category['id']
|
||||
);
|
||||
$template->assign(array(
|
||||
'INTRO' => $intro,
|
||||
'U_MANAGE_RANKS' => $base_url.'element_set_ranks&cat_id='.$category['id'],
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('categories')),
|
||||
));
|
||||
|
||||
if ($category['is_virtual'])
|
||||
{
|
||||
|
@ -366,24 +379,10 @@ SELECT id,representative_ext,path
|
|||
|
||||
if ($category['is_virtual'])
|
||||
{
|
||||
// the category can be moved in any category but in itself, in any
|
||||
// sub-category
|
||||
$unmovables = get_subcat_ids(array($category['id']));
|
||||
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id NOT IN ('.implode(',', $unmovables).')
|
||||
;';
|
||||
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
empty($category['id_uppercat']) ? array() : array($category['id_uppercat']),
|
||||
'move_cat_options'
|
||||
);
|
||||
$template->assign('parent_category', empty($category['id_uppercat']) ? array() : array($category['id_uppercat']));
|
||||
}
|
||||
|
||||
trigger_action('loc_end_cat_modify');
|
||||
trigger_notify('loc_end_cat_modify');
|
||||
|
||||
//----------------------------------------------------------- sending html code
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'album_properties');
|
||||
|
|
|
@ -298,7 +298,11 @@ SELECT user_id, group_id
|
|||
// +-----------------------------------------------------------------------+
|
||||
// | sending html code |
|
||||
// +-----------------------------------------------------------------------+
|
||||
$template->assign(array('PWG_TOKEN' => get_pwg_token(), 'INHERIT' => $conf['inheritance_by_default']));
|
||||
$template->assign(array(
|
||||
'PWG_TOKEN' => get_pwg_token(),
|
||||
'INHERIT' => $conf['inheritance_by_default'],
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('groups', 'users')),
|
||||
));
|
||||
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'cat_perm');
|
||||
?>
|
||||
|
|
|
@ -57,7 +57,7 @@ if (!empty($_POST))
|
|||
{
|
||||
include_once( PHPWG_ROOT_PATH .'include/functions_comment.inc.php' );
|
||||
check_input_parameter('comments', $_POST, true, PATTERN_ID);
|
||||
|
||||
|
||||
if (isset($_POST['validate']))
|
||||
{
|
||||
validate_user_comment($_POST['comments']);
|
||||
|
@ -98,6 +98,8 @@ $template->assign(
|
|||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
|
||||
|
||||
$my_base_url = get_root_url().'admin.php?page=';
|
||||
|
||||
$tabsheet = new tabsheet();
|
||||
$tabsheet->set_id('comments');
|
||||
$tabsheet->select('');
|
||||
|
@ -167,7 +169,8 @@ SELECT
|
|||
c.content,
|
||||
i.path,
|
||||
i.representative_ext,
|
||||
validated
|
||||
validated,
|
||||
c.anonymous_id
|
||||
FROM '.COMMENTS_TABLE.' AS c
|
||||
INNER JOIN '.IMAGES_TABLE.' AS i
|
||||
ON i.id = c.image_id
|
||||
|
@ -186,7 +189,7 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||
'path'=>$row['path'],
|
||||
)
|
||||
);
|
||||
if (empty($row['author_id']))
|
||||
if (empty($row['author_id']))
|
||||
{
|
||||
$author_name = $row['author'];
|
||||
}
|
||||
|
@ -200,10 +203,11 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||
'U_PICTURE' => get_root_url().'admin.php?page=photo-'.$row['image_id'],
|
||||
'ID' => $row['id'],
|
||||
'TN_SRC' => $thumb,
|
||||
'AUTHOR' => trigger_event('render_comment_author', $author_name),
|
||||
'DATE' => format_date($row['date'], true),
|
||||
'CONTENT' => trigger_event('render_comment_content',$row['content']),
|
||||
'AUTHOR' => trigger_change('render_comment_author', $author_name),
|
||||
'DATE' => format_date($row['date'], array('day_name','day','month','year','time')),
|
||||
'CONTENT' => trigger_change('render_comment_content',$row['content']),
|
||||
'IS_PENDING' => ('false' == $row['validated']),
|
||||
'IP' => $row['anonymous_id'],
|
||||
)
|
||||
);
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ $comments_checkboxes = array(
|
|||
'email_admin_on_comment_deletion',
|
||||
'comments_author_mandatory',
|
||||
'comments_email_mandatory',
|
||||
'comments_enable_website',
|
||||
);
|
||||
|
||||
$display_checkboxes = array(
|
||||
|
@ -298,7 +299,7 @@ if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings
|
|||
}
|
||||
|
||||
//----------------------------------------------------- template initialization
|
||||
$template->set_filename('config', 'configuration.tpl');
|
||||
$template->set_filename('config', 'configuration_' . $page['section'] . '.tpl');
|
||||
|
||||
// TabSheet
|
||||
$tabsheet = new tabsheet();
|
||||
|
@ -418,7 +419,8 @@ switch ($page['section'])
|
|||
load_profile_in_template(
|
||||
$action,
|
||||
'',
|
||||
$edit_user
|
||||
$edit_user,
|
||||
'GUEST_'
|
||||
);
|
||||
$template->assign('default', array());
|
||||
break;
|
||||
|
@ -487,7 +489,7 @@ switch ($page['section'])
|
|||
$tpl_var = array();
|
||||
|
||||
$tpl_var['must_square'] = ($type==IMG_SQUARE ? true : false);
|
||||
$tpl_var['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB)? true : false;
|
||||
$tpl_var['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB || $type==$conf['derivative_default_size'])? true : false;
|
||||
|
||||
if ($params = @$enabled[$type])
|
||||
{
|
||||
|
|
|
@ -156,7 +156,7 @@ SELECT *
|
|||
;';
|
||||
$category = pwg_db_fetch_assoc(pwg_query($query));
|
||||
|
||||
if ($category['image_order']=='rank')
|
||||
if ($category['image_order']=='rank ASC')
|
||||
{
|
||||
$image_order_choice = 'rank';
|
||||
}
|
||||
|
|
|
@ -46,6 +46,8 @@ $tabsheet->set_id('help');
|
|||
$tabsheet->select($selected);
|
||||
$tabsheet->assign();
|
||||
|
||||
trigger_notify('loc_end_help');
|
||||
|
||||
$template->set_filenames(array('help' => 'help.tpl'));
|
||||
|
||||
$template->assign(
|
||||
|
|
|
@ -73,24 +73,16 @@ $search = array();
|
|||
if (isset($_POST['submit']))
|
||||
{
|
||||
// dates
|
||||
if (!empty($_POST['start_year']))
|
||||
if (!empty($_POST['start']))
|
||||
{
|
||||
$search['fields']['date-after'] = sprintf(
|
||||
'%d-%02d-%02d',
|
||||
$_POST['start_year'],
|
||||
$_POST['start_month'],
|
||||
$_POST['start_day']
|
||||
);
|
||||
check_input_parameter('start', $_POST, false, '/^\d{4}-\d{2}-\d{2}$/');
|
||||
$search['fields']['date-after'] = $_POST['start'];
|
||||
}
|
||||
|
||||
if (!empty($_POST['end_year']))
|
||||
if (!empty($_POST['end']))
|
||||
{
|
||||
$search['fields']['date-before'] = sprintf(
|
||||
'%d-%02d-%02d',
|
||||
$_POST['end_year'],
|
||||
$_POST['end_month'],
|
||||
$_POST['end_day']
|
||||
);
|
||||
check_input_parameter('end', $_POST, false, '/^\d{4}-\d{2}-\d{2}$/');
|
||||
$search['fields']['date-before'] = $_POST['end'];
|
||||
}
|
||||
|
||||
if (empty($_POST['types']))
|
||||
|
@ -99,10 +91,11 @@ if (isset($_POST['submit']))
|
|||
}
|
||||
else
|
||||
{
|
||||
check_input_parameter('types', $_POST, true, '/^('.implode('|', $types).')$/');
|
||||
$search['fields']['types'] = $_POST['types'];
|
||||
}
|
||||
|
||||
$search['fields']['user'] = $_POST['user'];
|
||||
$search['fields']['user'] = intval($_POST['user']);
|
||||
|
||||
if (!empty($_POST['image_id']))
|
||||
{
|
||||
|
@ -127,6 +120,8 @@ if (isset($_POST['submit']))
|
|||
);
|
||||
}
|
||||
|
||||
check_input_parameter('display_thumbnail', $_POST, false, '/^('.implode('|', array_keys($display_thumbnails)).')$/');
|
||||
|
||||
$search['fields']['display_thumbnail'] = $_POST['display_thumbnail'];
|
||||
// Display choise are also save to one cookie
|
||||
if (!empty($_POST['display_thumbnail'])
|
||||
|
@ -152,8 +147,9 @@ if (isset($_POST['submit']))
|
|||
INSERT INTO '.SEARCH_TABLE.'
|
||||
(rules)
|
||||
VALUES
|
||||
(\''.serialize($search).'\')
|
||||
(\''.pwg_db_real_escape_string(serialize($search)).'\')
|
||||
;';
|
||||
|
||||
pwg_query($query);
|
||||
|
||||
$search_id = pwg_db_insert_id(SEARCH_TABLE);
|
||||
|
@ -225,7 +221,8 @@ INSERT INTO '.SEARCH_TABLE.'
|
|||
);
|
||||
}
|
||||
|
||||
$data = trigger_event('get_history', array(), $page['search'], $types);
|
||||
/*TODO - no need to get a huge number of rows from db (should take only what needed for display + SQL_CALC_FOUND_ROWS*/
|
||||
$data = trigger_change('get_history', array(), $page['search'], $types);
|
||||
usort($data, 'history_compare');
|
||||
|
||||
$page['nb_lines'] = count($data);
|
||||
|
@ -284,7 +281,7 @@ SELECT id, uppercats
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id IN ('.implode(',', array_keys($category_ids)).')
|
||||
;';
|
||||
$uppercats_of = simple_hash_from_query($query, 'id', 'uppercats');
|
||||
$uppercats_of = query2array($query, 'id', 'uppercats');
|
||||
|
||||
$name_of_category = array();
|
||||
|
||||
|
@ -309,27 +306,7 @@ SELECT
|
|||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', array_keys($image_ids)).')
|
||||
;';
|
||||
// $label_of_image = simple_hash_from_query($query, 'id', 'label');
|
||||
$label_of_image = array();
|
||||
$filesize_of_image = array();
|
||||
$file_of_image = array();
|
||||
$path_of_image = array();
|
||||
$representative_ext_of_image = array();
|
||||
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$label_of_image[ $row['id'] ] = trigger_event('render_element_description', $row['label']);
|
||||
|
||||
if (isset($row['filesize']))
|
||||
{
|
||||
$filesize_of_image[ $row['id'] ] = $row['filesize'];
|
||||
}
|
||||
|
||||
$file_of_image[ $row['id'] ] = $row['file'];
|
||||
$path_of_image[ $row['id'] ] = $row['path'];
|
||||
$representative_ext_of_image[ $row['id'] ] = $row['representative_ext'];
|
||||
}
|
||||
$image_infos = query2array($query, 'id');
|
||||
}
|
||||
|
||||
if ($has_tags > 0)
|
||||
|
@ -345,7 +322,7 @@ SELECT
|
|||
$result = pwg_query($query);
|
||||
while ($row=pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$name_of_tag[ $row['id'] ] = '<a href="'.make_index_url( array('tags'=>array($row))).'">'.trigger_event("render_tag_name", $row['name'], $row).'</a>';
|
||||
$name_of_tag[ $row['id'] ] = '<a href="'.make_index_url( array('tags'=>array($row))).'">'.trigger_change("render_tag_name", $row['name'], $row).'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,10 +337,7 @@ SELECT
|
|||
{
|
||||
if (isset($line['image_type']) and $line['image_type'] == 'high')
|
||||
{
|
||||
if (isset($filesize_of_image[$line['image_id']]))
|
||||
{
|
||||
$summary['total_filesize'] += $filesize_of_image[$line['image_id']];
|
||||
}
|
||||
$summary['total_filesize'] += @intval($image_infos[$line['image_id']]['filesize']);
|
||||
}
|
||||
|
||||
if ($line['user_id'] == $conf['guest_id'])
|
||||
|
@ -421,13 +395,13 @@ SELECT
|
|||
)
|
||||
);
|
||||
|
||||
if (isset($file_of_image[$line['image_id']]))
|
||||
if (isset($image_infos[$line['image_id']]))
|
||||
{
|
||||
$element = array(
|
||||
'id' => $line['image_id'],
|
||||
'file' => $file_of_image[$line['image_id']],
|
||||
'path' => $path_of_image[$line['image_id']],
|
||||
'representative_ext' => $representative_ext_of_image[$line['image_id']],
|
||||
'file' => $image_infos[$line['image_id']]['file'],
|
||||
'path' => $image_infos[$line['image_id']]['path'],
|
||||
'representative_ext' => $image_infos[$line['image_id']]['representative_ext'],
|
||||
);
|
||||
$thumbnail_display = $page['search']['fields']['display_thumbnail'];
|
||||
}
|
||||
|
@ -438,9 +412,9 @@ SELECT
|
|||
|
||||
$image_title = '('.$line['image_id'].')';
|
||||
|
||||
if (isset($label_of_image[$line['image_id']]))
|
||||
if (isset($image_infos[$line['image_id']]['label']))
|
||||
{
|
||||
$image_title.= ' '.$label_of_image[$line['image_id']];
|
||||
$image_title.= ' '.trigger_change('render_element_description', $image_infos[$line['image_id']]['label']);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -573,20 +547,12 @@ if (isset($page['search']))
|
|||
{
|
||||
if (isset($page['search']['fields']['date-after']))
|
||||
{
|
||||
$tokens = explode('-', $page['search']['fields']['date-after']);
|
||||
|
||||
$form['start_year'] = (int)$tokens[0];
|
||||
$form['start_month'] = (int)$tokens[1];
|
||||
$form['start_day'] = (int)$tokens[2];
|
||||
$form['start'] = $page['search']['fields']['date-after'];
|
||||
}
|
||||
|
||||
if (isset($page['search']['fields']['date-before']))
|
||||
{
|
||||
$tokens = explode('-', $page['search']['fields']['date-before']);
|
||||
|
||||
$form['end_year'] = (int)$tokens[0];
|
||||
$form['end_month'] = (int)$tokens[1];
|
||||
$form['end_day'] = (int)$tokens[2];
|
||||
$form['end'] = $page['search']['fields']['date-before'];
|
||||
}
|
||||
|
||||
$form['types'] = $page['search']['fields']['types'];
|
||||
|
@ -610,9 +576,7 @@ else
|
|||
{
|
||||
// by default, at page load, we want the selected date to be the current
|
||||
// date
|
||||
$form['start_year'] = $form['end_year'] = date('Y');
|
||||
$form['start_month'] = $form['end_month'] = date('n');
|
||||
$form['start_day'] = $form['end_day'] = date('j');
|
||||
$form['start'] = $form['end'] = date('Y-m-d');
|
||||
$form['types'] = $types;
|
||||
// Hoverbox by default
|
||||
$form['display_thumbnail'] =
|
||||
|
@ -620,25 +584,13 @@ else
|
|||
}
|
||||
|
||||
|
||||
$month_list = $lang['month'];
|
||||
$month_list[0]='------------';
|
||||
ksort($month_list);
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'IMAGE_ID' => @$form['image_id'],
|
||||
'FILENAME' => @$form['filename'],
|
||||
'IP' => @$form['ip'],
|
||||
|
||||
'month_list' => $month_list,
|
||||
|
||||
'START_DAY_SELECTED' => @$form['start_day'],
|
||||
'START_MONTH_SELECTED' => @$form['start_month'],
|
||||
'START_YEAR' => @$form['start_year'],
|
||||
|
||||
'END_DAY_SELECTED' => @$form['end_day'],
|
||||
'END_MONTH_SELECTED' => @$form['end_month'],
|
||||
'END_YEAR' => @$form['end_year'],
|
||||
'START' => @$form['start'],
|
||||
'END' => @$form['end'],
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -659,7 +611,7 @@ SELECT
|
|||
;';
|
||||
$template->assign(
|
||||
array(
|
||||
'user_options' => simple_hash_from_query($query, 'id','username'),
|
||||
'user_options' => query2array($query, 'id','username'),
|
||||
'user_options_selected' => array(@$form['user'])
|
||||
)
|
||||
);
|
||||
|
@ -672,4 +624,4 @@ $template->assign('display_thumbnail_selected', $form['display_thumbnail']);
|
|||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'history');
|
||||
?>
|
||||
?>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
add_event_handler('tabsheet_before_select', 'add_core_tabs', 0, 2);
|
||||
add_event_handler('tabsheet_before_select', 'add_core_tabs', 0);
|
||||
|
||||
function add_core_tabs($sheets, $tab_id)
|
||||
{
|
||||
|
@ -34,20 +34,20 @@ function add_core_tabs($sheets, $tab_id)
|
|||
$sheets['permissions'] = array('caption' => '<span class="icon-lock"></span>'.l10n('Permissions'), 'url' => $admin_album_base_url.'-permissions');
|
||||
$sheets['notification'] = array('caption' => '<span class="icon-mail-alt"></span>'.l10n('Notification'), 'url' => $admin_album_base_url.'-notification');
|
||||
break;
|
||||
|
||||
|
||||
case 'albums':
|
||||
global $my_base_url;
|
||||
$sheets['list'] = array('caption' => '<span class="icon-menu"></span>'.l10n('List'), 'url' => $my_base_url.'cat_list');
|
||||
$sheets['move'] = array('caption' => '<span class="icon-move"></span>'.l10n('Move'), 'url' => $my_base_url.'cat_move');
|
||||
$sheets['permalinks'] = array('caption' => '<span class="icon-link"></span>'.l10n('Permalinks'), 'url' => $my_base_url.'permalinks');
|
||||
break;
|
||||
|
||||
|
||||
case 'batch_manager':
|
||||
global $manager_link;
|
||||
$sheets['global'] = array('caption' => l10n('global mode'), 'url' => $manager_link.'global');
|
||||
$sheets['unit'] = array('caption' => l10n('unit mode'), 'url' => $manager_link.'unit');
|
||||
break;
|
||||
|
||||
|
||||
case 'cat_options':
|
||||
global $link_start, $conf;
|
||||
$sheets['status'] = array('caption' => '<span class="icon-lock"></span>'.l10n('Public / Private'), 'url' => $link_start.'cat_options&section=status');
|
||||
|
@ -57,17 +57,20 @@ function add_core_tabs($sheets, $tab_id)
|
|||
if ($conf['allow_random_representative'])
|
||||
$sheets['representative'] = array('caption' => l10n('Representative'), 'url' => $link_start.'cat_options&section=representative');
|
||||
break;
|
||||
|
||||
|
||||
case 'comments':
|
||||
$sheets[''] = array('caption' => l10n('User comments'), 'url' => '');
|
||||
global $my_base_url;
|
||||
$sheets[''] = array('caption' => l10n('User comments'), 'url' => $my_base_url.'comments');
|
||||
break;
|
||||
|
||||
case 'users':
|
||||
$sheets[''] = array('caption' => '<span class="icon-users"> </span>'.l10n('User list'), 'url' => '');
|
||||
global $my_base_url;
|
||||
$sheets[''] = array('caption' => '<span class="icon-users"> </span>'.l10n('User list'), 'url' => $my_base_url.'user_list');
|
||||
break;
|
||||
|
||||
case 'groups':
|
||||
$sheets[''] = array('caption' => '<span class="icon-group"> </span>'.l10n('Groups'), 'url' => '');
|
||||
global $my_base_url;
|
||||
$sheets[''] = array('caption' => '<span class="icon-group"> </span>'.l10n('Groups'), 'url' => $my_base_url.'group_list');
|
||||
break;
|
||||
|
||||
case 'configuration':
|
||||
|
@ -79,7 +82,7 @@ function add_core_tabs($sheets, $tab_id)
|
|||
$sheets['comments'] = array('caption' => l10n('Comments'), 'url' => $conf_link.'comments');
|
||||
$sheets['default'] = array('caption' => l10n('Guest Settings'), 'url' => $conf_link.'default');
|
||||
break;
|
||||
|
||||
|
||||
case 'help':
|
||||
global $help_link;
|
||||
$sheets['add_photos'] = array('caption' => l10n('Add Photos'), 'url' => $help_link.'add_photos');
|
||||
|
@ -88,33 +91,33 @@ function add_core_tabs($sheets, $tab_id)
|
|||
$sheets['virtual_links'] = array('caption' => l10n('Virtual Links'), 'url' => $help_link.'virtual_links');
|
||||
$sheets['misc'] = array('caption' => l10n('Miscellaneous'), 'url' => $help_link.'misc');
|
||||
break;
|
||||
|
||||
|
||||
case 'history':
|
||||
global $link_start;
|
||||
$sheets['stats'] = array('caption' => '<span class="icon-signal"></span>'.l10n('Statistics'), 'url' => $link_start.'stats');
|
||||
$sheets['history'] = array('caption' => '<span class="icon-search"></span>'.l10n('Search'), 'url' => $link_start.'history');
|
||||
break;
|
||||
|
||||
|
||||
case 'languages':
|
||||
global $my_base_url;
|
||||
$sheets['installed'] = array('caption' => '<span class="icon-language"></span>'.l10n('Installed Languages'), 'url' => $my_base_url.'&tab=installed');
|
||||
$sheets['update'] = array('caption' => '<span class="icon-arrows-cw"></span>'.l10n('Check for updates'), 'url' => $my_base_url.'&tab=update');
|
||||
$sheets['new'] = array('caption' => '<span class="icon-plus-circled"></span>'.l10n('Add New Language'), 'url' => $my_base_url.'&tab=new');
|
||||
break;
|
||||
|
||||
|
||||
case 'nbm':
|
||||
global $base_url;
|
||||
$sheets['param'] = array('caption' => l10n('Parameter'), 'url' => $base_url.'?page=notification_by_mail&mode=param');
|
||||
$sheets['subscribe'] = array('caption' => l10n('Subscribe'), 'url' => $base_url.'?page=notification_by_mail&mode=subscribe');
|
||||
$sheets['send'] = array('caption' => l10n('Send'), 'url' => $base_url.'?page=notification_by_mail&mode=send');
|
||||
break;
|
||||
|
||||
|
||||
case 'photo':
|
||||
global $admin_photo_base_url;
|
||||
$sheets['properties'] = array('caption' => l10n('Properties'), 'url' => $admin_photo_base_url.'-properties');
|
||||
$sheets['coi'] = array('caption' => '<span class="icon-crop"></span>'.l10n('Center of interest'), 'url' => $admin_photo_base_url.'-coi');
|
||||
break;
|
||||
|
||||
|
||||
case 'photos_add':
|
||||
global $conf;
|
||||
$sheets['direct'] = array('caption' => '<span class="icon-upload"></span>'.l10n('Web Form'), 'url' => PHOTOS_ADD_BASE_URL.'&section=direct');
|
||||
|
@ -122,33 +125,33 @@ function add_core_tabs($sheets, $tab_id)
|
|||
if ($conf['enable_synchronization'])
|
||||
$sheets['ftp'] = array('caption' => '<span class="icon-exchange"></span>'.l10n('FTP + Synchronization'), 'url' => PHOTOS_ADD_BASE_URL.'&section=ftp');
|
||||
break;
|
||||
|
||||
|
||||
case 'plugins':
|
||||
global $my_base_url;
|
||||
$sheets['installed'] = array('caption' => '<span class="icon-equalizer"></span>'.l10n('Plugin list'), 'url' => $my_base_url.'&tab=installed');
|
||||
$sheets['update'] = array('caption' => '<span class="icon-arrows-cw"></span>'.l10n('Check for updates'), 'url' => $my_base_url.'&tab=update');
|
||||
$sheets['new'] = array('caption' => '<span class="icon-plus-circled"></span>'.l10n('Other plugins'), 'url' => $my_base_url.'&tab=new');
|
||||
break;
|
||||
|
||||
|
||||
case 'rating':
|
||||
$sheets['rating'] = array('caption' => l10n('Photos'), 'url' => get_root_url().'admin.php?page=rating');
|
||||
$sheets['rating_user'] = array('caption' => l10n('Users'), 'url' => get_root_url().'admin.php?page=rating_user');
|
||||
break;
|
||||
|
||||
|
||||
case 'themes':
|
||||
global $my_base_url;
|
||||
$sheets['installed'] = array('caption' => '<span class="icon-brush"></span>'.l10n('Installed Themes'), 'url' => $my_base_url.'&tab=installed');
|
||||
$sheets['update'] = array('caption' => '<span class="icon-arrows-cw"></span>'.l10n('Check for updates'), 'url' => $my_base_url.'&tab=update');
|
||||
$sheets['new'] = array('caption' => '<span class="icon-plus-circled"></span>'.l10n('Add New Theme'), 'url' => $my_base_url.'&tab=new');
|
||||
break;
|
||||
|
||||
|
||||
case 'updates':
|
||||
global $my_base_url;
|
||||
$sheets['pwg'] = array('caption' => l10n('Piwigo Update'), 'url' => $my_base_url);
|
||||
$sheets['ext'] = array('caption' => l10n('Extensions Update'), 'url' => $my_base_url.'&tab=ext');
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return $sheets;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ class check_integrity
|
|||
$this->retrieve_list = array();
|
||||
$this->build_ignore_list = array();
|
||||
|
||||
trigger_action('list_check_integrity', $this);
|
||||
trigger_notify('list_check_integrity', $this);
|
||||
|
||||
// Information
|
||||
if (count($this->retrieve_list) > 0)
|
||||
|
|
|
@ -62,7 +62,7 @@ foreach ($pderivatives as $type => &$pderivative)
|
|||
$pderivative['minh'] = $pderivative['minw'] = $pderivative['w'];
|
||||
$pderivative['crop'] = 100;
|
||||
}
|
||||
$pderivative['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB)? true : false;
|
||||
$pderivative['must_enable'] = ($type==IMG_SQUARE || $type==IMG_THUMB || $type==$conf['derivative_default_size'])? true : false;
|
||||
$pderivative['enabled'] = isset($pderivative['enabled']) || $pderivative['must_enable'] ? true : false;
|
||||
|
||||
if (isset($pderivative['crop']))
|
||||
|
|
|
@ -41,7 +41,7 @@ SELECT id
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE site_id = '.$id.'
|
||||
;';
|
||||
$category_ids = array_from_query($query, 'id');
|
||||
$category_ids = query2array($query, null, 'id');
|
||||
delete_categories($category_ids);
|
||||
|
||||
// destruction of the site
|
||||
|
@ -83,7 +83,7 @@ SELECT id
|
|||
WHERE storage_category_id IN (
|
||||
'.wordwrap(implode(', ', $ids), 80, "\n").')
|
||||
;';
|
||||
$element_ids = array_from_query($query, 'id');
|
||||
$element_ids = query2array($query, null, 'id');
|
||||
delete_elements($element_ids);
|
||||
|
||||
// now, should we delete photos that are virtually linked to the category?
|
||||
|
@ -95,7 +95,7 @@ SELECT
|
|||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id IN ('.implode(',', $ids).')
|
||||
;';
|
||||
$image_ids_linked = array_from_query($query, 'image_id');
|
||||
$image_ids_linked = query2array($query, null, 'image_id');
|
||||
|
||||
if (count($image_ids_linked) > 0)
|
||||
{
|
||||
|
@ -108,7 +108,7 @@ SELECT
|
|||
WHERE image_id IN ('.implode(',', $image_ids_linked).')
|
||||
AND category_id NOT IN ('.implode(',', $ids).')
|
||||
;';
|
||||
$image_ids_not_orphans = array_from_query($query, 'image_id');
|
||||
$image_ids_not_orphans = query2array($query, null, 'image_id');
|
||||
$image_ids_to_delete = array_diff($image_ids_linked, $image_ids_not_orphans);
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
|
|||
WHERE cat_id IN ('.implode(',',$ids).')';
|
||||
pwg_query($query);
|
||||
|
||||
trigger_action('delete_categories', $ids);
|
||||
trigger_notify('delete_categories', $ids);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -250,7 +250,7 @@ function delete_elements($ids, $physical_deletion=false)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
trigger_action('begin_delete_elements', $ids);
|
||||
trigger_notify('begin_delete_elements', $ids);
|
||||
|
||||
if ($physical_deletion)
|
||||
{
|
||||
|
@ -260,7 +260,7 @@ function delete_elements($ids, $physical_deletion=false)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$ids_str = wordwrap(implode(', ', $ids), 80, "\n");
|
||||
|
||||
// destruction of the comments on the image
|
||||
|
@ -319,13 +319,13 @@ SELECT
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE representative_picture_id IN ('. $ids_str .')
|
||||
;';
|
||||
$category_ids = array_from_query($query, 'id');
|
||||
$category_ids = query2array($query, null, 'id');
|
||||
if (count($category_ids) > 0)
|
||||
{
|
||||
update_category($category_ids);
|
||||
}
|
||||
|
||||
trigger_action('delete_elements', $ids);
|
||||
trigger_notify('delete_elements', $ids);
|
||||
return count($ids);
|
||||
}
|
||||
|
||||
|
@ -383,7 +383,7 @@ DELETE FROM '.USERS_TABLE.'
|
|||
;';
|
||||
pwg_query($query);
|
||||
|
||||
trigger_action('delete_user', $user_id);
|
||||
trigger_notify('delete_user', $user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -401,12 +401,7 @@ function delete_orphan_tags()
|
|||
$orphan_tag_ids[] = $tag['id'];
|
||||
}
|
||||
|
||||
$query = '
|
||||
DELETE
|
||||
FROM '.TAGS_TABLE.'
|
||||
WHERE id IN ('.implode(',', $orphan_tag_ids).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
delete_tags($orphan_tag_ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,7 +418,7 @@ SELECT
|
|||
LEFT JOIN '.IMAGE_TAG_TABLE.' ON id = tag_id
|
||||
WHERE tag_id IS NULL
|
||||
;';
|
||||
return array_from_query($query);
|
||||
return query2array($query);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -463,7 +458,7 @@ SELECT DISTINCT c.id
|
|||
AND '.sprintf($where_cats, 'c.id').'
|
||||
AND i.id IS NULL
|
||||
;';
|
||||
$wrong_representant = array_from_query($query, 'id');
|
||||
$wrong_representant = query2array($query, null, 'id');
|
||||
|
||||
if (count($wrong_representant) > 0)
|
||||
{
|
||||
|
@ -488,7 +483,7 @@ SELECT DISTINCT id
|
|||
WHERE representative_picture_id IS NULL
|
||||
AND '.sprintf($where_cats, 'category_id').'
|
||||
;';
|
||||
$to_rand = array_from_query($query, 'id');
|
||||
$to_rand = query2array($query, null, 'id');
|
||||
if (count($to_rand) > 0)
|
||||
{
|
||||
set_random_representant($to_rand);
|
||||
|
@ -510,7 +505,7 @@ SELECT
|
|||
WHERE id IS NULL
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
$orphan_image_ids = array_from_query($query, 'image_id');
|
||||
$orphan_image_ids = query2array($query, null, 'image_id');
|
||||
|
||||
if (count($orphan_image_ids) > 0)
|
||||
{
|
||||
|
@ -534,22 +529,28 @@ DELETE
|
|||
*/
|
||||
function get_fs_directories($path, $recursive = true)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$dirs = array();
|
||||
$path = rtrim($path, '/');
|
||||
|
||||
$exclude_folders = array_merge(
|
||||
$conf['sync_exclude_folders'],
|
||||
array(
|
||||
'.', '..', '.svn',
|
||||
'thumbnail', 'pwg_high',
|
||||
'pwg_representative',
|
||||
)
|
||||
);
|
||||
$exclude_folders = array_flip($exclude_folders);
|
||||
|
||||
if (is_dir($path))
|
||||
{
|
||||
if ($contents = opendir($path))
|
||||
{
|
||||
while (($node = readdir($contents)) !== false)
|
||||
{
|
||||
if ($node != '.'
|
||||
and $node != '..'
|
||||
and $node != '.svn'
|
||||
and $node != 'thumbnail'
|
||||
and $node != 'pwg_high'
|
||||
and $node != 'pwg_representative'
|
||||
and is_dir($path.'/'.$node))
|
||||
if (is_dir($path.'/'.$node) and !isset($exclude_folders[$node]))
|
||||
{
|
||||
$dirs[] = $path.'/'.$node;
|
||||
if ($recursive)
|
||||
|
@ -613,9 +614,7 @@ SELECT id, id_uppercat, uppercats, rank, global_rank
|
|||
str_replace(',', '.', $cat['uppercats'] )
|
||||
);
|
||||
|
||||
if ( $cat['rank_changed']
|
||||
or $new_global_rank!=$cat['global_rank']
|
||||
)
|
||||
if ($cat['rank_changed'] or $new_global_rank !== $cat['global_rank'])
|
||||
{
|
||||
$datas[] = array(
|
||||
'id' => $id,
|
||||
|
@ -643,8 +642,9 @@ SELECT id, id_uppercat, uppercats, rank, global_rank
|
|||
*
|
||||
* @param int[] $categories
|
||||
* @param boolean|string $value
|
||||
* @param boolean $unlock_child optional default false
|
||||
*/
|
||||
function set_cat_visible($categories, $value)
|
||||
function set_cat_visible($categories, $value, $unlock_child = false)
|
||||
{
|
||||
if ( ($value = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) === null )
|
||||
{
|
||||
|
@ -655,11 +655,14 @@ function set_cat_visible($categories, $value)
|
|||
// unlocking a category => all its parent categories become unlocked
|
||||
if ($value)
|
||||
{
|
||||
$uppercats = get_uppercat_ids($categories);
|
||||
$cats = get_uppercat_ids($categories);
|
||||
if ($unlock_child) {
|
||||
$cats = array_merge($cats, get_subcat_ids($categories));
|
||||
}
|
||||
$query = '
|
||||
UPDATE '.CATEGORIES_TABLE.'
|
||||
SET visible = \'true\'
|
||||
WHERE id IN ('.implode(',', $uppercats).')';
|
||||
WHERE id IN ('.implode(',', $cats).')';
|
||||
pwg_query($query);
|
||||
}
|
||||
// locking a category => all its child categories become locked
|
||||
|
@ -699,12 +702,12 @@ UPDATE '.CATEGORIES_TABLE.'
|
|||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
|
||||
|
||||
// make a category private => all its child categories become private
|
||||
if ($value == 'private')
|
||||
{
|
||||
$subcats = get_subcat_ids($categories);
|
||||
|
||||
|
||||
$query = '
|
||||
UPDATE '.CATEGORIES_TABLE.'
|
||||
SET status = \'private\'
|
||||
|
@ -738,16 +741,15 @@ UPDATE '.CATEGORIES_TABLE.'
|
|||
// A5 permission removed to U2
|
||||
// A6 permission removed to U4
|
||||
// A7 no permission removed
|
||||
//
|
||||
//
|
||||
// 1) we must extract "top albums": A2, A5 and A6
|
||||
// 2) for each top album, decide which album is the reference for permissions
|
||||
// 3) remove all inconsistant permissions from sub-albums of each top-album
|
||||
|
||||
// step 1, search top albums
|
||||
$all_categories = array();
|
||||
$top_categories = array();
|
||||
$parent_ids = array();
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
|
@ -758,18 +760,13 @@ SELECT
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $categories).')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$all_categories[] = $row;
|
||||
}
|
||||
|
||||
$all_categories = query2array($query);
|
||||
usort($all_categories, 'global_rank_compare');
|
||||
|
||||
foreach ($all_categories as $cat)
|
||||
{
|
||||
$is_top = true;
|
||||
|
||||
|
||||
if (!empty($cat['id_uppercat']))
|
||||
{
|
||||
foreach (explode(',', $cat['uppercats']) as $id_uppercat)
|
||||
|
@ -794,7 +791,7 @@ SELECT
|
|||
}
|
||||
|
||||
// step 2, search the reference album for permissions
|
||||
//
|
||||
//
|
||||
// to find the reference of each top album, we will need the parent albums
|
||||
$parent_cats = array();
|
||||
|
||||
|
@ -807,11 +804,7 @@ SELECT
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE id IN ('.implode(',', $parent_ids).')
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$parent_cats[$row['id']] = $row;
|
||||
}
|
||||
$parent_cats= query2array($query, 'id');
|
||||
}
|
||||
|
||||
$tables = array(
|
||||
|
@ -842,7 +835,7 @@ SELECT '.$field.'
|
|||
FROM '.$table.'
|
||||
WHERE cat_id = '.$ref_cat_id.'
|
||||
;';
|
||||
$ref_access = array_from_query($query, $field);
|
||||
$ref_access = query2array($query, null, $field);
|
||||
|
||||
if (count($ref_access) == 0)
|
||||
{
|
||||
|
@ -948,14 +941,14 @@ SELECT id, dir
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE dir IS NOT NULL
|
||||
;';
|
||||
$cat_dirs = simple_hash_from_query($query, 'id', 'dir');
|
||||
$cat_dirs = query2array($query, 'id', 'dir');
|
||||
|
||||
// caching galleries_url
|
||||
$query = '
|
||||
SELECT id, galleries_url
|
||||
FROM '.SITES_TABLE.'
|
||||
;';
|
||||
$galleries_url = simple_hash_from_query($query, 'id', 'galleries_url');
|
||||
$galleries_url = query2array($query, 'id', 'galleries_url');
|
||||
|
||||
// categories : id, site_id, uppercats
|
||||
$query = '
|
||||
|
@ -965,7 +958,7 @@ SELECT id, uppercats, site_id
|
|||
AND id IN (
|
||||
'.wordwrap(implode(', ', $cat_ids), 80, "\n").')
|
||||
;';
|
||||
$categories = array_from_query($query);
|
||||
$categories = query2array($query);
|
||||
|
||||
// filling $cat_fulldirs
|
||||
$cat_dirs_callback = create_function('$m', 'global $cat_dirs; return $cat_dirs[$m[1]];');
|
||||
|
@ -1025,14 +1018,13 @@ function get_fs($path, $recursive = true)
|
|||
{
|
||||
$extension = get_extension($node);
|
||||
|
||||
// if (in_array($extension, $conf['picture_ext']))
|
||||
if (isset($conf['flip_picture_ext'][$extension]))
|
||||
{
|
||||
if (basename($path) == 'thumbnail')
|
||||
{
|
||||
$fs['thumbnails'][] = $path.'/'.$node;
|
||||
}
|
||||
else if (basename($path) == 'pwg_representative')
|
||||
elseif (basename($path) == 'pwg_representative')
|
||||
{
|
||||
$fs['representatives'][] = $path.'/'.$node;
|
||||
}
|
||||
|
@ -1041,13 +1033,12 @@ function get_fs($path, $recursive = true)
|
|||
$fs['elements'][] = $path.'/'.$node;
|
||||
}
|
||||
}
|
||||
// else if (in_array($extension, $conf['file_ext']))
|
||||
else if (isset($conf['flip_file_ext'][$extension]))
|
||||
elseif (isset($conf['flip_file_ext'][$extension]))
|
||||
{
|
||||
$fs['elements'][] = $path.'/'.$node;
|
||||
}
|
||||
}
|
||||
else if (is_dir($path.'/'.$node) and $node != 'pwg_high' and $recursive)
|
||||
elseif (is_dir($path.'/'.$node) and $node != 'pwg_high' and $recursive)
|
||||
{
|
||||
$subdirs[] = $node;
|
||||
}
|
||||
|
@ -1088,13 +1079,13 @@ function sync_users()
|
|||
SELECT '.$conf['user_fields']['id'].' AS id
|
||||
FROM '.USERS_TABLE.'
|
||||
;';
|
||||
$base_users = array_from_query($query, 'id');
|
||||
$base_users = query2array($query, null, 'id');
|
||||
|
||||
$query = '
|
||||
SELECT user_id
|
||||
FROM '.USER_INFOS_TABLE.'
|
||||
;';
|
||||
$infos_users = array_from_query($query, 'user_id');
|
||||
$infos_users = query2array($query, null, 'user_id');
|
||||
|
||||
// users present in $base_users and not in $infos_users must be added
|
||||
$to_create = array_diff($base_users, $infos_users);
|
||||
|
@ -1123,7 +1114,7 @@ SELECT DISTINCT user_id
|
|||
FROM '.$table.'
|
||||
;';
|
||||
$to_delete = array_diff(
|
||||
array_from_query($query, 'user_id'),
|
||||
query2array($query, null, 'user_id'),
|
||||
$base_users
|
||||
);
|
||||
|
||||
|
@ -1148,7 +1139,7 @@ function update_uppercats()
|
|||
SELECT id, id_uppercat, uppercats
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
$cat_map = hash_from_query($query, 'id');
|
||||
$cat_map = query2array($query, 'id');
|
||||
|
||||
$datas = array();
|
||||
foreach ($cat_map as $id => $cat)
|
||||
|
@ -1185,7 +1176,7 @@ SELECT DISTINCT(storage_category_id)
|
|||
FROM '.IMAGES_TABLE.'
|
||||
WHERE storage_category_id IS NOT NULL
|
||||
;';
|
||||
$cat_ids = array_from_query($query, 'storage_category_id');
|
||||
$cat_ids = query2array($query, null, 'storage_category_id');
|
||||
$fulldirs = get_fulldirs($cat_ids);
|
||||
|
||||
foreach ($cat_ids as $cat_id)
|
||||
|
@ -1422,7 +1413,7 @@ SELECT id, uppercats, global_rank, visible, status
|
|||
FROM '.GROUP_ACCESS_TABLE.'
|
||||
WHERE cat_id = '.$insert['id_uppercat'].'
|
||||
;';
|
||||
$granted_grps = array_from_query($query, 'group_id');
|
||||
$granted_grps = query2array($query, null, 'group_id');
|
||||
$inserts = array();
|
||||
foreach ($granted_grps as $granted_grp)
|
||||
{
|
||||
|
@ -1438,10 +1429,10 @@ SELECT id, uppercats, global_rank, visible, status
|
|||
FROM '.USER_ACCESS_TABLE.'
|
||||
WHERE cat_id = '.$insert['id_uppercat'].'
|
||||
;';
|
||||
$granted_users = array_from_query($query, 'user_id');
|
||||
$granted_users = query2array($query, null, 'user_id');
|
||||
add_permission_on_category($inserted_id, array_unique(array_merge(get_admins(), array($user['id']), $granted_users)));
|
||||
}
|
||||
else if ('private' == $insert['status'])
|
||||
elseif ('private' == $insert['status'])
|
||||
{
|
||||
add_permission_on_category($inserted_id, array_unique(array_merge(get_admins(), array($user['id']))));
|
||||
}
|
||||
|
@ -1562,25 +1553,31 @@ SELECT id
|
|||
FROM '.TAGS_TABLE.'
|
||||
WHERE name = \''.$tag_name.'\'
|
||||
;';
|
||||
if (count($existing_tags = array_from_query($query, 'id')) == 0)
|
||||
if (count($existing_tags = query2array($query, null, 'id')) == 0)
|
||||
{
|
||||
// search existing by case insensitive name
|
||||
$url_name = trigger_change('render_tag_url', $tag_name);
|
||||
// search existing by url name
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.TAGS_TABLE.'
|
||||
WHERE CONVERT(name, CHAR) = \''.$tag_name.'\'
|
||||
;';
|
||||
if (count($existing_tags = array_from_query($query, 'id')) == 0)
|
||||
{
|
||||
$url_name = trigger_event('render_tag_url', $tag_name);
|
||||
// search existing by url name
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.TAGS_TABLE.'
|
||||
WHERE url_name = \''.$url_name.'\'
|
||||
;';
|
||||
if (count($existing_tags = array_from_query($query, 'id')) == 0)
|
||||
if (count($existing_tags = query2array($query, null, 'id')) == 0)
|
||||
{
|
||||
// search by extended description (plugin sub name)
|
||||
$sub_name_where = trigger_change('get_tag_name_like_where', array(), $tag_name);
|
||||
if (count($sub_name_where))
|
||||
{
|
||||
$query = '
|
||||
SELECT id
|
||||
FROM '.TAGS_TABLE.'
|
||||
WHERE '.implode(' OR ', $sub_name_where).'
|
||||
;';
|
||||
$existing_tags = query2array($query, null, 'id');
|
||||
}
|
||||
|
||||
if (count($existing_tags) == 0)
|
||||
{// finally create the tag
|
||||
mass_inserts(
|
||||
TAGS_TABLE,
|
||||
array('name', 'url_name'),
|
||||
|
@ -1690,7 +1687,7 @@ SELECT
|
|||
GROUP BY category_id
|
||||
;';
|
||||
|
||||
$current_rank_of = simple_hash_from_query(
|
||||
$current_rank_of = query2array(
|
||||
$query,
|
||||
'category_id',
|
||||
'max_rank'
|
||||
|
@ -1796,7 +1793,7 @@ SELECT image_id
|
|||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id IN ('.implode(',', $sources).')
|
||||
;';
|
||||
$images = array_from_query($query, 'image_id');
|
||||
$images = query2array($query, null, 'image_id');
|
||||
|
||||
associate_images_to_categories($images, $destinations);
|
||||
}
|
||||
|
@ -1840,7 +1837,7 @@ UPDATE '.USER_CACHE_TABLE.'
|
|||
SET need_update = \'true\';';
|
||||
pwg_query($query);
|
||||
}
|
||||
trigger_action('invalidate_user_cache', $full);
|
||||
trigger_notify('invalidate_user_cache', $full);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1967,7 +1964,7 @@ SELECT id
|
|||
FROM '.TAGS_TABLE.'
|
||||
WHERE name = \''.$tag_name.'\'
|
||||
;';
|
||||
$existing_tags = array_from_query($query, 'id');
|
||||
$existing_tags = query2array($query, null, 'id');
|
||||
|
||||
if (count($existing_tags) == 0)
|
||||
{
|
||||
|
@ -1975,7 +1972,7 @@ SELECT id
|
|||
TAGS_TABLE,
|
||||
array(
|
||||
'name' => $tag_name,
|
||||
'url_name' => trigger_event('render_tag_url', $tag_name),
|
||||
'url_name' => trigger_change('render_tag_url', $tag_name),
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -2059,7 +2056,8 @@ function fetchRemote($src, &$dest, $get_data=array(), $post_data=array(), $user_
|
|||
is_resource($dest) or $dest = '';
|
||||
|
||||
// Try curl to read remote file
|
||||
if (function_exists('curl_init'))
|
||||
// TODO : remove all these @
|
||||
if (function_exists('curl_init') && function_exists('curl_exec'))
|
||||
{
|
||||
$ch = @curl_init();
|
||||
@curl_setopt($ch, CURLOPT_URL, $src);
|
||||
|
@ -2324,7 +2322,7 @@ function get_taglist($query, $only_user_language=true)
|
|||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$raw_name = $row['name'];
|
||||
$name = trigger_event('render_tag_name', $raw_name, $row);
|
||||
$name = trigger_change('render_tag_name', $raw_name, $row);
|
||||
|
||||
$taglist[] = array(
|
||||
'name' => $name,
|
||||
|
@ -2333,7 +2331,7 @@ function get_taglist($query, $only_user_language=true)
|
|||
|
||||
if (!$only_user_language)
|
||||
{
|
||||
$alt_names = trigger_event('get_tag_alt_names', array(), $raw_name);
|
||||
$alt_names = trigger_change('get_tag_alt_names', array(), $raw_name);
|
||||
|
||||
foreach( array_diff( array_unique($alt_names), array($name) ) as $alt)
|
||||
{
|
||||
|
@ -2448,13 +2446,13 @@ SELECT id
|
|||
WHERE id IN ('.implode(',', $cat_ids).')
|
||||
AND status = \'private\'
|
||||
;';
|
||||
$private_cats = array_from_query($query, 'id');
|
||||
$private_cats = query2array($query, null, 'id');
|
||||
|
||||
if (count($private_cats) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$inserts = array();
|
||||
foreach ($private_cats as $cat_id)
|
||||
{
|
||||
|
@ -2466,7 +2464,7 @@ SELECT id
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mass_inserts(
|
||||
USER_ACCESS_TABLE,
|
||||
array('user_id','cat_id'),
|
||||
|
@ -2497,7 +2495,7 @@ SELECT
|
|||
WHERE status in (\''.implode("','", $status_list).'\')
|
||||
;';
|
||||
|
||||
return array_from_query($query, 'user_id');
|
||||
return query2array($query, null, 'user_id');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2700,7 +2698,7 @@ function deltree($path, $trash_path=null)
|
|||
}
|
||||
}
|
||||
closedir($fh);
|
||||
|
||||
|
||||
if (@rmdir($path))
|
||||
{
|
||||
return true;
|
||||
|
@ -2727,4 +2725,54 @@ function deltree($path, $trash_path=null)
|
|||
}
|
||||
}
|
||||
|
||||
?>
|
||||
/**
|
||||
* Returns keys to identify the state of main tables. A key consists of the
|
||||
* last modification timestamp and the total of items (separated by a _).
|
||||
* Additionally returns the hash of root path.
|
||||
* Used to invalidate LocalStorage cache on admin pages.
|
||||
*
|
||||
* @param string|string[] list of keys to retrieve (categories,groups,images,tags,users)
|
||||
* @return string[]
|
||||
*/
|
||||
function get_admin_client_cache_keys($requested=array())
|
||||
{
|
||||
$tables = array(
|
||||
'categories' => CATEGORIES_TABLE,
|
||||
'groups' => GROUPS_TABLE,
|
||||
'images' => IMAGES_TABLE,
|
||||
'tags' => TAGS_TABLE,
|
||||
'users' => USER_INFOS_TABLE
|
||||
);
|
||||
|
||||
if (!is_array($requested))
|
||||
{
|
||||
$requested = array($requested);
|
||||
}
|
||||
if (empty($requested))
|
||||
{
|
||||
$requested = array_keys($tables);
|
||||
}
|
||||
else
|
||||
{
|
||||
$requested = array_intersect($requested, array_keys($tables));
|
||||
}
|
||||
|
||||
$keys = array(
|
||||
'_hash' => md5(get_absolute_root_url()),
|
||||
);
|
||||
|
||||
foreach ($requested as $item)
|
||||
{
|
||||
$query = '
|
||||
SELECT CONCAT(
|
||||
UNIX_TIMESTAMP(MAX(lastmodified)),
|
||||
"_",
|
||||
COUNT(*)
|
||||
)
|
||||
FROM '. $tables[$item] .'
|
||||
;';
|
||||
list($keys[$item]) = pwg_db_fetch_row(pwg_query($query));
|
||||
}
|
||||
|
||||
return $keys;
|
||||
}
|
|
@ -21,8 +21,17 @@
|
|||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* @package functions\admin\history
|
||||
*/
|
||||
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
|
||||
|
||||
/**
|
||||
* Init tabsheet for history pages
|
||||
* @ignore
|
||||
*/
|
||||
function history_tabsheet()
|
||||
{
|
||||
global $page, $link_start;
|
||||
|
@ -34,11 +43,22 @@ function history_tabsheet()
|
|||
$tabsheet->assign();
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback used to sort history entries
|
||||
*/
|
||||
function history_compare($a, $b)
|
||||
{
|
||||
return strcmp($a['date'].$a['time'], $b['date'].$b['time']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform history search.
|
||||
*
|
||||
* @param array $data - used in trigger_change
|
||||
* @param array $search
|
||||
* @param string[] $types
|
||||
* @param array
|
||||
*/
|
||||
function get_history($data, $search, $types)
|
||||
{
|
||||
if (isset($search['fields']['filename']))
|
||||
|
@ -51,9 +71,9 @@ SELECT
|
|||
;';
|
||||
$search['image_ids'] = array_from_query($query, 'id');
|
||||
}
|
||||
|
||||
|
||||
// echo '<pre>'; print_r($search); echo '</pre>';
|
||||
|
||||
|
||||
$clauses = array();
|
||||
|
||||
if (isset($search['fields']['date-after']))
|
||||
|
@ -69,7 +89,7 @@ SELECT
|
|||
if (isset($search['fields']['types']))
|
||||
{
|
||||
$local_clauses = array();
|
||||
|
||||
|
||||
foreach ($types as $type) {
|
||||
if (in_array($type, $search['fields']['types'])) {
|
||||
$clause = 'image_type ';
|
||||
|
@ -81,11 +101,11 @@ SELECT
|
|||
{
|
||||
$clause.= "= '".$type."'";
|
||||
}
|
||||
|
||||
|
||||
$local_clauses[] = $clause;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (count($local_clauses) > 0)
|
||||
{
|
||||
$clauses[] = implode(' OR ', $local_clauses);
|
||||
|
@ -102,7 +122,7 @@ SELECT
|
|||
{
|
||||
$clauses[] = 'image_id = '.$search['fields']['image_id'];
|
||||
}
|
||||
|
||||
|
||||
if (isset($search['fields']['filename']))
|
||||
{
|
||||
if (count($search['image_ids']) == 0)
|
||||
|
@ -120,7 +140,7 @@ SELECT
|
|||
{
|
||||
$clauses[] = 'IP LIKE "'.$search['fields']['ip'].'"';
|
||||
}
|
||||
|
||||
|
||||
$clauses = prepend_append_array_items($clauses, '(', ')');
|
||||
|
||||
$where_separator =
|
||||
|
@ -128,7 +148,7 @@ SELECT
|
|||
"\n AND ",
|
||||
$clauses
|
||||
);
|
||||
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
date,
|
||||
|
@ -156,7 +176,7 @@ SELECT
|
|||
return $data;
|
||||
}
|
||||
|
||||
add_event_handler('get_history', 'get_history', EVENT_HANDLER_PRIORITY_NEUTRAL, 3);
|
||||
trigger_action('functions_history_included');
|
||||
add_event_handler('get_history', 'get_history');
|
||||
trigger_notify('functions_history_included');
|
||||
|
||||
?>
|
|
@ -22,16 +22,19 @@
|
|||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* loads an sql file and executes all queries
|
||||
*
|
||||
* @package functions\admin\install
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Loads a SQL file and executes all queries.
|
||||
* Before executing a query, $replaced is... replaced by $replacing. This is
|
||||
* useful when the SQL file contains generic words. Drop table queries are
|
||||
* not executed.
|
||||
*
|
||||
* @param string filepath
|
||||
* @param string replaced
|
||||
* @param string replacing
|
||||
* @return void
|
||||
* @param string $filepath
|
||||
* @param string $replaced
|
||||
* @param string $replacing
|
||||
*/
|
||||
function execute_sqlfile($filepath, $replaced, $replacing, $dblayer)
|
||||
{
|
||||
|
@ -70,8 +73,6 @@ function execute_sqlfile($filepath, $replaced, $replacing, $dblayer)
|
|||
|
||||
/**
|
||||
* Automatically activate all core themes in the "themes" directory.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function activate_core_themes()
|
||||
{
|
||||
|
@ -86,6 +87,30 @@ function activate_core_themes()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically activate some core plugins
|
||||
*/
|
||||
function activate_core_plugins()
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/plugins.class.php');
|
||||
|
||||
$plugins = new plugins();
|
||||
|
||||
foreach($plugins->fs_plugins as $plugin_id => $fs_plugin)
|
||||
{
|
||||
if (in_array($plugin_id, array('TakeATour')))
|
||||
{
|
||||
$plugins->perform_action('activate', $plugin_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to database during installation. Uses $_POST.
|
||||
*
|
||||
* @param array &$infos - populated with infos
|
||||
* @param array &$errors - populated with errors
|
||||
*/
|
||||
function install_db_connect(&$infos, &$errors)
|
||||
{
|
||||
try
|
||||
|
@ -99,4 +124,5 @@ function install_db_connect(&$infos, &$errors)
|
|||
$errors[] = l10n($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -21,9 +21,21 @@
|
|||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
/**
|
||||
* @package functions\admin\metadata
|
||||
*/
|
||||
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'/include/functions_metadata.inc.php');
|
||||
|
||||
|
||||
/**
|
||||
* Returns IPTC metadata to sync from a file, depending on IPTC mapping.
|
||||
* @toto : clean code (factorize foreach)
|
||||
*
|
||||
* @param string $file
|
||||
* @return array
|
||||
*/
|
||||
function get_sync_iptc_data($file)
|
||||
{
|
||||
global $conf;
|
||||
|
@ -80,6 +92,12 @@ function get_sync_iptc_data($file)
|
|||
return $iptc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns EXIF metadata to sync from a file, depending on EXIF mapping.
|
||||
*
|
||||
* @param string $file
|
||||
* @return array
|
||||
*/
|
||||
function get_sync_exif_data($file)
|
||||
{
|
||||
global $conf;
|
||||
|
@ -110,7 +128,11 @@ function get_sync_exif_data($file)
|
|||
return $exif;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all potential file metadata fields, including IPTC and EXIF.
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
function get_sync_metadata_attributes()
|
||||
{
|
||||
global $conf;
|
||||
|
@ -139,6 +161,12 @@ function get_sync_metadata_attributes()
|
|||
return array_unique($update_fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all metadata of a file.
|
||||
*
|
||||
* @param array $infos - (path[, representative_ext])
|
||||
* @return array - includes data provided in $infos
|
||||
*/
|
||||
function get_sync_metadata($infos)
|
||||
{
|
||||
global $conf;
|
||||
|
@ -178,7 +206,12 @@ function get_sync_metadata($infos)
|
|||
return $infos;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sync all metadata of a list of images.
|
||||
* Metadata are fetched from original files and saved in database.
|
||||
*
|
||||
* @param int[] $ids
|
||||
*/
|
||||
function sync_metadata($ids)
|
||||
{
|
||||
global $conf;
|
||||
|
@ -255,13 +288,13 @@ SELECT id, path, representative_ext
|
|||
}
|
||||
|
||||
/**
|
||||
* returns an array associating element id (images.id) with its complete
|
||||
* Returns an array associating element id (images.id) with its complete
|
||||
* path in the filesystem
|
||||
*
|
||||
* @param int id_uppercat
|
||||
* @param int site_id
|
||||
* @param boolean recursive ?
|
||||
* @param boolean only newly added files ?
|
||||
* @param int $category_id
|
||||
* @param int $site_id
|
||||
* @param boolean $recursive
|
||||
* @param boolean $only_new
|
||||
* @return array
|
||||
*/
|
||||
function get_filelist($category_id = '', $site_id=1, $recursive = false,
|
||||
|
@ -317,4 +350,5 @@ SELECT id, path, representative_ext
|
|||
;';
|
||||
return hash_from_query($query, 'id');
|
||||
}
|
||||
|
||||
?>
|
|
@ -75,9 +75,8 @@ function deactivate_non_standard_plugins()
|
|||
global $page;
|
||||
|
||||
$standard_plugins = array(
|
||||
'admin_multi_view',
|
||||
'c13y_upgrade',
|
||||
'event_tracer',
|
||||
'AdminTools',
|
||||
'TakeATour',
|
||||
'language_switch',
|
||||
'LocalFilesEditor'
|
||||
);
|
||||
|
|
|
@ -25,8 +25,8 @@ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
|||
include_once(PHPWG_ROOT_PATH.'admin/include/image.class.php');
|
||||
|
||||
// add default event handler for image and thumbnail resize
|
||||
add_event_handler('upload_image_resize', 'pwg_image_resize', EVENT_HANDLER_PRIORITY_NEUTRAL, 7);
|
||||
add_event_handler('upload_thumbnail_resize', 'pwg_image_resize', EVENT_HANDLER_PRIORITY_NEUTRAL, 9);
|
||||
add_event_handler('upload_image_resize', 'pwg_image_resize');
|
||||
add_event_handler('upload_thumbnail_resize', 'pwg_image_resize');
|
||||
|
||||
function get_upload_form_config()
|
||||
{
|
||||
|
@ -126,7 +126,7 @@ function save_upload_form_config($data, &$errors=array(), &$form_errors=array())
|
|||
$upload_form_config[$field]['error_message'],
|
||||
$min, $max
|
||||
);
|
||||
|
||||
|
||||
$form_errors[$field] = '['.$min.' .. '.$max.']';
|
||||
}
|
||||
}
|
||||
|
@ -219,6 +219,7 @@ SELECT
|
|||
$file_path = $upload_dir.'/'.$filename_wo_ext.'.';
|
||||
|
||||
list($width, $height, $type) = getimagesize($source_filepath);
|
||||
|
||||
if (IMAGETYPE_PNG == $type)
|
||||
{
|
||||
$file_path.= 'png';
|
||||
|
@ -232,10 +233,27 @@ SELECT
|
|||
$is_tiff = true;
|
||||
$file_path.= 'tif';
|
||||
}
|
||||
else
|
||||
elseif (IMAGETYPE_JPEG == $type)
|
||||
{
|
||||
$file_path.= 'jpg';
|
||||
}
|
||||
elseif (isset($conf['upload_form_all_types']) and $conf['upload_form_all_types'])
|
||||
{
|
||||
$original_extension = strtolower(get_extension($original_filename));
|
||||
|
||||
if (in_array($original_extension, $conf['file_ext']))
|
||||
{
|
||||
$file_path.= $original_extension;
|
||||
}
|
||||
else
|
||||
{
|
||||
die('unexpected file type');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
die('forbidden file type');
|
||||
}
|
||||
|
||||
prepare_directory($upload_dir);
|
||||
}
|
||||
|
@ -260,19 +278,19 @@ SELECT
|
|||
$representative_file_path.= $representative_ext;
|
||||
|
||||
prepare_directory(dirname($representative_file_path));
|
||||
|
||||
|
||||
$exec = $conf['ext_imagick_dir'].'convert';
|
||||
|
||||
if ('jpg' == $conf['tiff_representative_ext'])
|
||||
{
|
||||
$exec .= ' -quality 98';
|
||||
}
|
||||
|
||||
|
||||
$exec .= ' "'.realpath($file_path).'"';
|
||||
|
||||
$dest = pathinfo($representative_file_path);
|
||||
$exec .= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
|
||||
|
||||
|
||||
$exec .= ' 2>&1';
|
||||
@exec($exec, $returnarray);
|
||||
|
||||
|
@ -286,7 +304,7 @@ SELECT
|
|||
'-0.'.$representative_ext,
|
||||
$representative_file_abspath
|
||||
);
|
||||
|
||||
|
||||
if (file_exists($first_file_abspath))
|
||||
{
|
||||
rename($first_file_abspath, $representative_file_abspath);
|
||||
|
@ -294,6 +312,62 @@ SELECT
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// generate pwg_representative in case of video
|
||||
//
|
||||
$ffmpeg_video_exts = array( // extensions tested with FFmpeg
|
||||
'wmv','mov','mkv','mp4','mpg','flv','asf','xvid','divx','mpeg',
|
||||
'avi','rm',
|
||||
);
|
||||
|
||||
if (isset($original_extension) and in_array($original_extension, $ffmpeg_video_exts))
|
||||
{
|
||||
$representative_file_path = dirname($file_path).'/pwg_representative/';
|
||||
$representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
|
||||
|
||||
$representative_ext = 'jpg';
|
||||
$representative_file_path.= $representative_ext;
|
||||
|
||||
prepare_directory(dirname($representative_file_path));
|
||||
|
||||
$second = 1;
|
||||
|
||||
$ffmpeg = $conf['ffmpeg_dir'].'ffmpeg';
|
||||
$ffmpeg.= ' -i "'.$file_path.'"';
|
||||
$ffmpeg.= ' -an -ss '.$second;
|
||||
$ffmpeg.= ' -t 1 -r 1 -y -vcodec mjpeg -f mjpeg';
|
||||
$ffmpeg.= ' "'.$representative_file_path.'"';
|
||||
|
||||
// file_put_contents('/tmp/ffmpeg.log', "\n==== ".date('c')."\n".__FUNCTION__.' : '.$ffmpeg."\n", FILE_APPEND);
|
||||
|
||||
@exec($ffmpeg);
|
||||
|
||||
if (!file_exists($representative_file_path))
|
||||
{
|
||||
$representative_ext = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($original_extension) and 'pdf' == $original_extension and pwg_image::get_library() == 'ext_imagick')
|
||||
{
|
||||
$representative_file_path = dirname($file_path).'/pwg_representative/';
|
||||
$representative_file_path.= get_filename_wo_extension(basename($file_path)).'.';
|
||||
|
||||
$representative_ext = 'jpg';
|
||||
$representative_file_path.= $representative_ext;
|
||||
|
||||
prepare_directory(dirname($representative_file_path));
|
||||
|
||||
$exec = $conf['ext_imagick_dir'].'convert';
|
||||
$exec.= ' -quality 98';
|
||||
$exec.= ' "'.realpath($file_path).'"[0]';
|
||||
|
||||
$dest = pathinfo($representative_file_path);
|
||||
$exec.= ' "'.realpath($dest['dirname']).'/'.$dest['basename'].'"';
|
||||
$exec.= ' 2>&1';
|
||||
@exec($exec, $returnarray);
|
||||
}
|
||||
|
||||
if (pwg_image::get_library() != 'gd')
|
||||
{
|
||||
if ($conf['original_resize'])
|
||||
|
@ -322,7 +396,7 @@ SELECT
|
|||
// width/height of "multisizes"
|
||||
$rotation_angle = pwg_image::get_rotation_angle($file_path);
|
||||
$rotation = pwg_image::get_rotation_code_from_angle($rotation_angle);
|
||||
|
||||
|
||||
$file_infos = pwg_image_infos($file_path);
|
||||
|
||||
if (isset($image_id))
|
||||
|
@ -411,9 +485,9 @@ SELECT
|
|||
// in case we are on uploadify.php, we have to replace the false path
|
||||
$thumb_url = preg_replace('#admin/include/i#', 'i', DerivativeImage::thumb_url($image_infos));
|
||||
unset_make_full_url();
|
||||
|
||||
|
||||
fetchRemote($thumb_url, $dest);
|
||||
|
||||
|
||||
|
||||
return $image_id;
|
||||
}
|
||||
|
@ -476,7 +550,18 @@ function pwg_image_infos($path)
|
|||
|
||||
function is_valid_image_extension($extension)
|
||||
{
|
||||
return in_array(strtolower($extension), array('jpg', 'jpeg', 'png', 'gif'));
|
||||
global $conf;
|
||||
|
||||
if (isset($conf['upload_form_all_types']) and $conf['upload_form_all_types'])
|
||||
{
|
||||
$extensions = $conf['file_ext'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$extensions = $conf['picture_ext'];
|
||||
}
|
||||
|
||||
return array_unique(array_map('strtolower', $extensions));
|
||||
}
|
||||
|
||||
function file_upload_error_message($error_code)
|
||||
|
|
|
@ -64,7 +64,7 @@ class pwg_image
|
|||
{
|
||||
$this->source_filepath = $source_filepath;
|
||||
|
||||
trigger_action('load_image_library', array(&$this) );
|
||||
trigger_notify('load_image_library', array(&$this) );
|
||||
|
||||
if (is_object($this->image))
|
||||
{
|
||||
|
@ -241,7 +241,7 @@ class pwg_image
|
|||
|
||||
$rotation = 0;
|
||||
|
||||
$exif = exif_read_data($source_filepath);
|
||||
$exif = @exif_read_data($source_filepath);
|
||||
|
||||
if (isset($exif['Orientation']) and preg_match('/^\s*(\d)/', $exif['Orientation'], $matches))
|
||||
{
|
||||
|
@ -547,6 +547,9 @@ class image_ext_imagick implements imageInterface
|
|||
|
||||
function crop($width, $height, $x, $y)
|
||||
{
|
||||
$this->width = $width;
|
||||
$this->height = $height;
|
||||
|
||||
$this->add_command('crop', $width.'x'.$height.'+'.$x.'+'.$y);
|
||||
return true;
|
||||
}
|
||||
|
@ -583,6 +586,9 @@ class image_ext_imagick implements imageInterface
|
|||
|
||||
function resize($width, $height)
|
||||
{
|
||||
$this->width = $width;
|
||||
$this->height = $height;
|
||||
|
||||
$this->add_command('filter', 'Lanczos');
|
||||
$this->add_command('resize', $width.'x'.$height.'!');
|
||||
return true;
|
||||
|
|
|
@ -158,24 +158,24 @@ UPDATE '.USER_INFOS_TABLE.'
|
|||
);
|
||||
$plg_data = implode( '', file($path.'/common.lang.php') );
|
||||
|
||||
if ( preg_match("|Language Name: (.*)|", $plg_data, $val) )
|
||||
if (preg_match("|Language Name:\\s*(.+)|", $plg_data, $val))
|
||||
{
|
||||
$language['name'] = trim( $val[1] );
|
||||
$language['name'] = convert_charset($language['name'], 'utf-8', $target_charset);
|
||||
}
|
||||
if (preg_match("|Version: (.*)|", $plg_data, $val))
|
||||
if (preg_match("|Version:\\s*([\\w.-]+)|", $plg_data, $val))
|
||||
{
|
||||
$language['version'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Language URI: (.*)|", $plg_data, $val) )
|
||||
if (preg_match("|Language URI:\\s*(https?:\\/\\/.+)|", $plg_data, $val))
|
||||
{
|
||||
$language['uri'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author: (.*)|", $plg_data, $val) )
|
||||
if (preg_match("|Author:\\s*(.+)|", $plg_data, $val))
|
||||
{
|
||||
$language['author'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
|
||||
if (preg_match("|Author URI:\\s*(https?:\\/\\/.+)|", $plg_data, $val))
|
||||
{
|
||||
$language['author uri'] = trim($val[1]);
|
||||
}
|
||||
|
@ -184,6 +184,7 @@ UPDATE '.USER_INFOS_TABLE.'
|
|||
list( , $extension) = explode('extension_view.php?eid=', $language['uri']);
|
||||
if (is_numeric($extension)) $language['extension'] = $extension;
|
||||
}
|
||||
|
||||
// IMPORTANT SECURITY !
|
||||
$language = array_map('htmlspecialchars', $language);
|
||||
$this->fs_languages[$file] = $language;
|
||||
|
|
|
@ -21,40 +21,10 @@
|
|||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Uploaded photos |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
if (isset($page['thumbnails']))
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'thumbnails' => $page['thumbnails'],
|
||||
)
|
||||
);
|
||||
|
||||
// only display the batch link if we have more than 1 photo
|
||||
if (count($page['thumbnails']) > 1)
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'batch_link' => $page['batch_link'],
|
||||
'batch_label' => sprintf(
|
||||
l10n('Manage this set of %d photos'),
|
||||
count($page['thumbnails'])
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Photo selection |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$uploadify_path = PHPWG_ROOT_PATH.'admin/include/uploadify';
|
||||
|
||||
$upload_max_filesize = min(
|
||||
get_ini_size('upload_max_filesize'),
|
||||
get_ini_size('post_max_size')
|
||||
|
@ -72,7 +42,6 @@ else
|
|||
$template->assign(
|
||||
array(
|
||||
'F_ADD_ACTION'=> PHOTOS_ADD_BASE_URL,
|
||||
'uploadify_path' => $uploadify_path,
|
||||
'upload_max_filesize' => $upload_max_filesize,
|
||||
'upload_max_filesize_shorthand' => $upload_max_filesize_shorthand,
|
||||
)
|
||||
|
@ -117,47 +86,24 @@ if ($conf['original_resize'])
|
|||
}
|
||||
|
||||
|
||||
$upload_modes = array('html', 'multiple');
|
||||
$upload_mode = isset($conf['upload_mode']) ? $conf['upload_mode'] : 'multiple';
|
||||
|
||||
if (isset($_GET['upload_mode']) and $upload_mode != $_GET['upload_mode'] and in_array($_GET['upload_mode'], $upload_modes))
|
||||
{
|
||||
$upload_mode = $_GET['upload_mode'];
|
||||
conf_update_param('upload_mode', $upload_mode);
|
||||
}
|
||||
|
||||
// what is the upload switch mode
|
||||
$index_of_upload_mode = array_flip($upload_modes);
|
||||
$upload_mode_index = $index_of_upload_mode[$upload_mode];
|
||||
$upload_switch = $upload_modes[ ($upload_mode_index + 1) % 2 ];
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'upload_mode' => $upload_mode,
|
||||
'form_action' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&processed=1',
|
||||
'switch_url' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_switch,
|
||||
'upload_id' => md5(rand()),
|
||||
'session_id' => session_id(),
|
||||
'form_action' => PHOTOS_ADD_BASE_URL,
|
||||
'pwg_token' => get_pwg_token(),
|
||||
'another_upload_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode,
|
||||
)
|
||||
);
|
||||
|
||||
$upload_file_types = 'jpeg, png, gif';
|
||||
$unique_exts = array_unique(
|
||||
array_map(
|
||||
'strtolower',
|
||||
$conf['upload_form_all_types'] ? $conf['file_ext'] : $conf['picture_ext']
|
||||
)
|
||||
);
|
||||
|
||||
if (pwg_image::get_library() == 'ext_imagick')
|
||||
{
|
||||
$upload_file_types.= ', tiff';
|
||||
$template->assign('tif_enabled', true);
|
||||
}
|
||||
|
||||
if ('html' == $upload_mode)
|
||||
{
|
||||
$upload_file_types.= ', zip';
|
||||
}
|
||||
$template->assign(
|
||||
array(
|
||||
'upload_file_types' => $upload_file_types,
|
||||
'upload_file_types' => implode(', ', $unique_exts),
|
||||
'file_exts' => implode(',', $unique_exts),
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -217,16 +163,7 @@ SELECT category_id
|
|||
}
|
||||
|
||||
// existing album
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
$selected_category,
|
||||
'category_options'
|
||||
);
|
||||
$template->assign('selected_category', $selected_category);
|
||||
|
||||
|
||||
// image level options
|
||||
|
@ -256,11 +193,10 @@ if (!function_exists('gd_info'))
|
|||
$setup_errors[] = l10n('GD library is missing');
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'setup_errors'=> $setup_errors,
|
||||
)
|
||||
);
|
||||
$template->assign(array(
|
||||
'setup_errors'=> $setup_errors,
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('categories')),
|
||||
));
|
||||
|
||||
// Warnings
|
||||
if (isset($_GET['hide_warnings']))
|
||||
|
@ -288,7 +224,7 @@ if (!isset($_SESSION['upload_hide_warnings']))
|
|||
$template->assign(
|
||||
array(
|
||||
'setup_warnings' => $setup_warnings,
|
||||
'hide_warnings_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&hide_warnings=1'
|
||||
'hide_warnings_link' => PHOTOS_ADD_BASE_URL.'&hide_warnings=1'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,242 +0,0 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
|
||||
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | This program is free software; you can redistribute it and/or modify |
|
||||
// | it under the terms of the GNU General Public License as published by |
|
||||
// | the Free Software Foundation |
|
||||
// | |
|
||||
// | This program is distributed in the hope that it will be useful, but |
|
||||
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||
// | General Public License for more details. |
|
||||
// | |
|
||||
// | You should have received a copy of the GNU General Public License |
|
||||
// | along with this program; if not, write to the Free Software |
|
||||
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
||||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
|
||||
if (isset($_GET['processed']))
|
||||
{
|
||||
// echo '<pre>POST'."\n"; print_r($_POST); echo '</pre>';
|
||||
// echo '<pre>FILES'."\n"; print_r($_FILES); echo '</pre>';
|
||||
// echo '<pre>SESSION'."\n"; print_r($_SESSION); echo '</pre>';
|
||||
// exit();
|
||||
|
||||
// sometimes, you have submitted the form but you have nothing in $_POST
|
||||
// and $_FILES. This may happen when you have an HTML upload and you
|
||||
// exceeded the post_max_size (but not the upload_max_size)
|
||||
if (!isset($_POST['submit_upload']))
|
||||
{
|
||||
$page['errors'][] = l10n(
|
||||
'The uploaded files exceed the post_max_size directive in php.ini: %sB',
|
||||
ini_get('post_max_size')
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$category_id = $_POST['category'];
|
||||
}
|
||||
|
||||
if (isset($_POST['onUploadError']) and is_array($_POST['onUploadError']) and count($_POST['onUploadError']) > 0)
|
||||
{
|
||||
foreach ($_POST['onUploadError'] as $error)
|
||||
{
|
||||
$page['errors'][] = $error;
|
||||
}
|
||||
}
|
||||
|
||||
$image_ids = array();
|
||||
|
||||
if (isset($_FILES) and !empty($_FILES['image_upload']))
|
||||
{
|
||||
$starttime = get_moment();
|
||||
|
||||
foreach ($_FILES['image_upload']['error'] as $idx => $error)
|
||||
{
|
||||
if (UPLOAD_ERR_OK == $error)
|
||||
{
|
||||
$images_to_add = array();
|
||||
|
||||
$extension = pathinfo($_FILES['image_upload']['name'][$idx], PATHINFO_EXTENSION);
|
||||
if ('zip' == strtolower($extension))
|
||||
{
|
||||
$upload_dir = $conf['upload_dir'].'/buffer';
|
||||
prepare_directory($upload_dir);
|
||||
|
||||
$temporary_archive_name = date('YmdHis').'-'.generate_key(10);
|
||||
$archive_path = $upload_dir.'/'.$temporary_archive_name.'.zip';
|
||||
|
||||
move_uploaded_file(
|
||||
$_FILES['image_upload']['tmp_name'][$idx],
|
||||
$archive_path
|
||||
);
|
||||
|
||||
define('PCLZIP_TEMPORARY_DIR', $upload_dir.'/');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
|
||||
$zip = new PclZip($archive_path);
|
||||
if ($list = $zip->listContent())
|
||||
{
|
||||
$indexes_to_extract = array();
|
||||
|
||||
foreach ($list as $node)
|
||||
{
|
||||
if (1 == $node['folder'])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_valid_image_extension(pathinfo($node['filename'], PATHINFO_EXTENSION)))
|
||||
{
|
||||
$indexes_to_extract[] = $node['index'];
|
||||
|
||||
$images_to_add[] = array(
|
||||
'source_filepath' => $upload_dir.'/'.$temporary_archive_name.'/'.$node['filename'],
|
||||
'original_filename' => basename($node['filename']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($indexes_to_extract) > 0)
|
||||
{
|
||||
$zip->extract(
|
||||
PCLZIP_OPT_PATH, $upload_dir.'/'.$temporary_archive_name,
|
||||
PCLZIP_OPT_BY_INDEX, $indexes_to_extract,
|
||||
PCLZIP_OPT_ADD_TEMP_FILE_ON
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (is_valid_image_extension($extension))
|
||||
{
|
||||
$images_to_add[] = array(
|
||||
'source_filepath' => $_FILES['image_upload']['tmp_name'][$idx],
|
||||
'original_filename' => $_FILES['image_upload']['name'][$idx],
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($images_to_add as $image_to_add)
|
||||
{
|
||||
$image_id = add_uploaded_file(
|
||||
$image_to_add['source_filepath'],
|
||||
$image_to_add['original_filename'],
|
||||
array($category_id),
|
||||
$_POST['level']
|
||||
);
|
||||
|
||||
$image_ids[] = $image_id;
|
||||
|
||||
// TODO: if $image_id is not an integer, something went wrong
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$error_message = file_upload_error_message($error);
|
||||
|
||||
$page['errors'][] = l10n(
|
||||
'Error on file "%s" : %s',
|
||||
$_FILES['image_upload']['name'][$idx],
|
||||
$error_message
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$endtime = get_moment();
|
||||
$elapsed = ($endtime - $starttime) * 1000;
|
||||
// printf('%.2f ms', $elapsed);
|
||||
|
||||
} // if (!empty($_FILES))
|
||||
|
||||
if (isset($_POST['upload_id']))
|
||||
{
|
||||
// we're on a multiple upload, with uploadify and so on
|
||||
if (isset($_SESSION['uploads_error'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
foreach ($_SESSION['uploads_error'][ $_POST['upload_id'] ] as $error)
|
||||
{
|
||||
$page['errors'][] = $error;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SESSION['uploads'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
$image_ids = $_SESSION['uploads'][ $_POST['upload_id'] ];
|
||||
}
|
||||
}
|
||||
|
||||
$page['thumbnails'] = array();
|
||||
foreach ($image_ids as $image_id)
|
||||
{
|
||||
// we could return the list of properties from the add_uploaded_file
|
||||
// function, but I like the "double check". And it costs nothing
|
||||
// compared to the upload process.
|
||||
$thumbnail = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
file,
|
||||
path
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$image_id.'
|
||||
;';
|
||||
$image_infos = pwg_db_fetch_assoc(pwg_query($query));
|
||||
|
||||
$thumbnail['file'] = $image_infos['file'];
|
||||
|
||||
$thumbnail['src'] = DerivativeImage::thumb_url($image_infos);
|
||||
|
||||
// TODO: when implementing this plugin in Piwigo core, we should have
|
||||
// a function get_image_name($name, $file) (if name is null, then
|
||||
// compute a temporary name from filename) that would be also used in
|
||||
// picture.php. UPDATE: in fact, "get_name_from_file($file)" already
|
||||
// exists and is used twice (batch_manager_unit + comments, but not in
|
||||
// picture.php I don't know why) with the same pattern if
|
||||
// (empty($name)) {$name = get_name_from_file($file)}, a clean
|
||||
// function get_image_name($name, $file) would be better
|
||||
$thumbnail['title'] = get_name_from_file($image_infos['file']);
|
||||
|
||||
$thumbnail['link'] = get_root_url().'admin.php?page=photo-'.$image_id.'&cat_id='.$category_id;
|
||||
|
||||
$page['thumbnails'][] = $thumbnail;
|
||||
}
|
||||
|
||||
if (!empty($page['thumbnails']))
|
||||
{
|
||||
$page['infos'][] = l10n('%d photos uploaded', count($page['thumbnails']));
|
||||
|
||||
if (0 != $_POST['level'])
|
||||
{
|
||||
$page['infos'][] = l10n(
|
||||
'Privacy level set to "%s"',
|
||||
l10n(sprintf('Level %d', $_POST['level']))
|
||||
);
|
||||
}
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id = '.$category_id.'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
$category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=album-');
|
||||
|
||||
// information
|
||||
$page['infos'][] = l10n(
|
||||
'Album "%s" now contains %d photos',
|
||||
'<em>'.$category_name.'</em>',
|
||||
$count
|
||||
);
|
||||
|
||||
$page['batch_link'] = PHOTOS_ADD_BASE_URL.'&batch='.implode(',', $image_ids);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -55,6 +55,7 @@ class DummyPlugin_maintain extends PluginMaintain
|
|||
return plugin_uninstall($this->plugin_id);
|
||||
}
|
||||
}
|
||||
function update($old_version, $new_version, &$errors=array()) {}
|
||||
}
|
||||
|
||||
|
||||
|
@ -63,7 +64,7 @@ class plugins
|
|||
var $fs_plugins = array();
|
||||
var $db_plugins_by_id = array();
|
||||
var $server_plugins = array();
|
||||
var $default_plugins = array('LocalFilesEditor', 'language_switch', 'c13y_upgrade', 'admin_multi_view');
|
||||
var $default_plugins = array('LocalFilesEditor', 'language_switch', 'TakeATour', 'AdminTools');
|
||||
|
||||
/**
|
||||
* Initialize $fs_plugins and $db_plugins_by_id
|
||||
|
@ -85,28 +86,28 @@ class plugins
|
|||
*/
|
||||
private static function build_maintain_class($plugin_id)
|
||||
{
|
||||
$file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain.inc.php';
|
||||
$file_to_include = PHPWG_PLUGINS_PATH . $plugin_id . '/maintain';
|
||||
$classname = $plugin_id.'_maintain';
|
||||
|
||||
if (file_exists($file_to_include))
|
||||
// 2.7 pattern (OO only)
|
||||
if (file_exists($file_to_include.'.class.php'))
|
||||
{
|
||||
include_once($file_to_include);
|
||||
include_once($file_to_include.'.class.php');
|
||||
return new $classname($plugin_id);
|
||||
}
|
||||
|
||||
// before 2.7 pattern (OO or procedural)
|
||||
if (file_exists($file_to_include.'.inc.php'))
|
||||
{
|
||||
include_once($file_to_include.'.inc.php');
|
||||
|
||||
if (class_exists($classname))
|
||||
{
|
||||
$plugin_maintain = new $classname($plugin_id);
|
||||
return new $classname($plugin_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$plugin_maintain = new DummyPlugin_maintain($plugin_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$plugin_maintain = new DummyPlugin_maintain($plugin_id);
|
||||
}
|
||||
|
||||
return $plugin_maintain;
|
||||
return new DummyPlugin_maintain($plugin_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -115,14 +116,17 @@ class plugins
|
|||
* @param string - plugin id
|
||||
* @param array - errors
|
||||
*/
|
||||
function perform_action($action, $plugin_id)
|
||||
function perform_action($action, $plugin_id, $options=array())
|
||||
{
|
||||
if (isset($this->db_plugins_by_id[$plugin_id]))
|
||||
{
|
||||
$crt_db_plugin = $this->db_plugins_by_id[$plugin_id];
|
||||
}
|
||||
|
||||
$plugin_maintain = self::build_maintain_class($plugin_id);
|
||||
|
||||
if ($action !== 'update')
|
||||
{ // wait for files to be updated
|
||||
$plugin_maintain = self::build_maintain_class($plugin_id);
|
||||
}
|
||||
|
||||
$errors = array();
|
||||
|
||||
|
@ -146,6 +150,31 @@ INSERT INTO '. PLUGINS_TABLE .' (id,version)
|
|||
}
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
$previous_version = $this->fs_plugins[$plugin_id]['version'];
|
||||
$errors[0] = $this->extract_plugin_files('upgrade', $options['revision'], $plugin_id);
|
||||
|
||||
if ($errors[0] === 'ok')
|
||||
{
|
||||
$this->get_fs_plugin($plugin_id); // refresh plugins list
|
||||
$new_version = $this->fs_plugins[$plugin_id]['version'];
|
||||
|
||||
$plugin_maintain = self::build_maintain_class($plugin_id);
|
||||
$plugin_maintain->update($previous_version, $new_version, $errors);
|
||||
|
||||
if ($new_version != 'auto')
|
||||
{
|
||||
$query = '
|
||||
UPDATE '. PLUGINS_TABLE .'
|
||||
SET version=\''. $new_version .'\'
|
||||
WHERE id=\''. $plugin_id .'\'
|
||||
;';
|
||||
pwg_query($query);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'activate':
|
||||
if (!isset($crt_db_plugin))
|
||||
{
|
||||
|
@ -167,8 +196,7 @@ INSERT INTO '. PLUGINS_TABLE .' (id,version)
|
|||
{
|
||||
$query = '
|
||||
UPDATE '. PLUGINS_TABLE .'
|
||||
SET state=\'active\',
|
||||
version=\''. $this->fs_plugins[$plugin_id]['version'] .'\'
|
||||
SET state=\'active\'
|
||||
WHERE id=\''. $plugin_id .'\'
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
@ -187,7 +215,7 @@ UPDATE '. PLUGINS_TABLE .'
|
|||
WHERE id=\''. $plugin_id .'\'
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
|
||||
$plugin_maintain->deactivate();
|
||||
break;
|
||||
|
||||
|
@ -206,7 +234,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
WHERE id=\''. $plugin_id .'\'
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
|
||||
$plugin_maintain->uninstall();
|
||||
break;
|
||||
|
||||
|
@ -235,7 +263,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
|
||||
/**
|
||||
* Get plugins defined in the plugin directory
|
||||
*/
|
||||
*/
|
||||
function get_fs_plugins()
|
||||
{
|
||||
$dir = opendir(PHPWG_PLUGINS_PATH);
|
||||
|
@ -243,63 +271,82 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
{
|
||||
if ($file!='.' and $file!='..')
|
||||
{
|
||||
$path = PHPWG_PLUGINS_PATH.$file;
|
||||
if (is_dir($path) and !is_link($path)
|
||||
and preg_match('/^[a-zA-Z0-9-_]+$/', $file )
|
||||
and file_exists($path.'/main.inc.php')
|
||||
)
|
||||
if (preg_match('/^[a-zA-Z0-9-_]+$/', $file))
|
||||
{
|
||||
$plugin = array(
|
||||
'name'=>$file,
|
||||
'version'=>'0',
|
||||
'uri'=>'',
|
||||
'description'=>'',
|
||||
'author'=>'',
|
||||
);
|
||||
$plg_data = implode( '', file($path.'/main.inc.php') );
|
||||
|
||||
if ( preg_match("|Plugin Name: (.*)|", $plg_data, $val) )
|
||||
{
|
||||
$plugin['name'] = trim( $val[1] );
|
||||
}
|
||||
if (preg_match("|Version: (.*)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['version'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Plugin URI: (.*)|", $plg_data, $val) )
|
||||
{
|
||||
$plugin['uri'] = trim($val[1]);
|
||||
}
|
||||
if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
|
||||
{
|
||||
$plugin['description'] = trim($desc);
|
||||
}
|
||||
elseif ( preg_match("|Description: (.*)|", $plg_data, $val) )
|
||||
{
|
||||
$plugin['description'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author: (.*)|", $plg_data, $val) )
|
||||
{
|
||||
$plugin['author'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
|
||||
{
|
||||
$plugin['author uri'] = trim($val[1]);
|
||||
}
|
||||
if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
|
||||
{
|
||||
list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
|
||||
if (is_numeric($extension)) $plugin['extension'] = $extension;
|
||||
}
|
||||
// IMPORTANT SECURITY !
|
||||
$plugin = array_map('htmlspecialchars', $plugin);
|
||||
$this->fs_plugins[$file] = $plugin;
|
||||
$this->get_fs_plugin($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load metadata of a plugin in `fs_plugins` array
|
||||
* @from 2.7
|
||||
* @param $plugin_id
|
||||
* @return false|array
|
||||
*/
|
||||
function get_fs_plugin($plugin_id)
|
||||
{
|
||||
$path = PHPWG_PLUGINS_PATH.$plugin_id;
|
||||
|
||||
if (is_dir($path) and !is_link($path)
|
||||
and file_exists($path.'/main.inc.php')
|
||||
)
|
||||
{
|
||||
$plugin = array(
|
||||
'name'=>$plugin_id,
|
||||
'version'=>'0',
|
||||
'uri'=>'',
|
||||
'description'=>'',
|
||||
'author'=>'',
|
||||
);
|
||||
$plg_data = file_get_contents($path.'/main.inc.php', null, null, 0, 2048);
|
||||
|
||||
if (preg_match("|Plugin Name:\\s*(.+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['name'] = trim( $val[1] );
|
||||
}
|
||||
if (preg_match("|Version:\\s*([\\w.-]+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['version'] = trim($val[1]);
|
||||
}
|
||||
if (preg_match("|Plugin URI:\\s*(https?:\\/\\/.+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['uri'] = trim($val[1]);
|
||||
}
|
||||
if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
|
||||
{
|
||||
$plugin['description'] = trim($desc);
|
||||
}
|
||||
elseif (preg_match("|Description:\\s*(.+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['description'] = trim($val[1]);
|
||||
}
|
||||
if (preg_match("|Author:\\s*(.+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['author'] = trim($val[1]);
|
||||
}
|
||||
if (preg_match("|Author URI:\\s*(https?:\\/\\/.+)|", $plg_data, $val))
|
||||
{
|
||||
$plugin['author uri'] = trim($val[1]);
|
||||
}
|
||||
if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
|
||||
{
|
||||
list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
|
||||
if (is_numeric($extension)) $plugin['extension'] = $extension;
|
||||
}
|
||||
|
||||
// IMPORTANT SECURITY !
|
||||
$plugin = array_map('htmlspecialchars', $plugin);
|
||||
$this->fs_plugins[$plugin_id] = $plugin;
|
||||
|
||||
return $plugin;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort fs_plugins
|
||||
*/
|
||||
|
@ -326,7 +373,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
function get_versions_to_check($version=PHPWG_VERSION)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
|
||||
$versions_to_check = array();
|
||||
$url = PEM_URL . '/api/get_version_list.php?category_id='. $conf['pem_plugins_category'] .'&format=php';
|
||||
if (fetchRemote($url, $result) and $pem_versions = @unserialize($result))
|
||||
|
@ -423,7 +470,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
global $conf;
|
||||
|
||||
// Plugins to check
|
||||
|
@ -477,7 +524,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sort $server_plugins
|
||||
*/
|
||||
|
@ -509,7 +556,7 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
* @param string - archive URL
|
||||
* @param string - plugin id or extension id
|
||||
*/
|
||||
function extract_plugin_files($action, $revision, $dest)
|
||||
function extract_plugin_files($action, $revision, $dest, &$plugin_id=null)
|
||||
{
|
||||
if ($archive = tempnam( PHPWG_PLUGINS_PATH, 'zip'))
|
||||
{
|
||||
|
@ -541,13 +588,14 @@ DELETE FROM '. PLUGINS_TABLE .'
|
|||
$root = dirname($main_filepath); // main.inc.php path in archive
|
||||
if ($action == 'upgrade')
|
||||
{
|
||||
$extract_path = PHPWG_PLUGINS_PATH . $dest;
|
||||
$plugin_id = $dest;
|
||||
}
|
||||
else
|
||||
{
|
||||
$extract_path = PHPWG_PLUGINS_PATH
|
||||
. ($root == '.' ? 'extension_' . $dest : basename($root));
|
||||
$plugin_id = ($root == '.' ? 'extension_' . $dest : basename($root));
|
||||
}
|
||||
$extract_path = PHPWG_PLUGINS_PATH . $plugin_id;
|
||||
|
||||
if($result = $zip->extract(PCLZIP_OPT_PATH, $extract_path,
|
||||
PCLZIP_OPT_REMOVE_PATH, $root,
|
||||
PCLZIP_OPT_REPLACE_NEWER))
|
||||
|
|
|
@ -88,7 +88,7 @@ class tabsheet
|
|||
*/
|
||||
function select($name)
|
||||
{
|
||||
$this->sheets = trigger_event('tabsheet_before_select', $this->sheets, $this->uniqid);
|
||||
$this->sheets = trigger_change('tabsheet_before_select', $this->sheets, $this->uniqid);
|
||||
if (!array_key_exists($name, $this->sheets))
|
||||
{
|
||||
$keys = array_keys($this->sheets);
|
||||
|
|
|
@ -86,19 +86,11 @@ class themes
|
|||
|
||||
if (class_exists($classname))
|
||||
{
|
||||
$theme_maintain = new $classname($theme_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
$theme_maintain = new DummyTheme_maintain($theme_id);
|
||||
return new $classname($theme_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$theme_maintain = new DummyTheme_maintain($theme_id);
|
||||
}
|
||||
|
||||
return $theme_maintain;
|
||||
|
||||
return new DummyTheme_maintain($theme_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -383,17 +375,17 @@ SELECT
|
|||
'author' => '',
|
||||
'mobile' => false,
|
||||
);
|
||||
$theme_data = implode( '', file($path.'/themeconf.inc.php') );
|
||||
$theme_data = implode('', file($path.'/themeconf.inc.php'));
|
||||
|
||||
if ( preg_match("|Theme Name: (.*)|", $theme_data, $val) )
|
||||
if (preg_match("|Theme Name:\\s*(.+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['name'] = trim( $val[1] );
|
||||
}
|
||||
if (preg_match("|Version: (.*)|", $theme_data, $val))
|
||||
if (preg_match("|Version:\\s*([\\w.-]+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['version'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Theme URI: (.*)|", $theme_data, $val) )
|
||||
if (preg_match("|Theme URI:\\s*(https?:\\/\\/.+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['uri'] = trim($val[1]);
|
||||
}
|
||||
|
@ -401,15 +393,15 @@ SELECT
|
|||
{
|
||||
$theme['description'] = trim($desc);
|
||||
}
|
||||
elseif ( preg_match("|Description: (.*)|", $theme_data, $val) )
|
||||
elseif (preg_match("|Description:\\s*(.+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['description'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author: (.*)|", $theme_data, $val) )
|
||||
if (preg_match("|Author:\\s*(.+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['author'] = trim($val[1]);
|
||||
}
|
||||
if ( preg_match("|Author URI: (.*)|", $theme_data, $val) )
|
||||
if (preg_match("|Author URI:\\s*(https?:\\/\\/.+)|", $theme_data, $val))
|
||||
{
|
||||
$theme['author uri'] = trim($val[1]);
|
||||
}
|
||||
|
|
|
@ -44,8 +44,8 @@ class updates
|
|||
{
|
||||
$this->types = array($page);
|
||||
}
|
||||
$this->default_themes = array('clear', 'dark', 'Sylvia', 'elegant');
|
||||
$this->default_plugins = array('admin_multi_view', 'c13y_upgrade', 'language_switch', 'LocalFilesEditor');
|
||||
$this->default_themes = array('clear', 'dark', 'Sylvia', 'elegant', 'smartpocket');
|
||||
$this->default_plugins = array('AdminTools', 'TakeATour', 'language_switch', 'LocalFilesEditor');
|
||||
|
||||
foreach ($this->types as $type)
|
||||
{
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 778 B |
File diff suppressed because one or more lines are too long
|
@ -1,119 +0,0 @@
|
|||
/*
|
||||
Uploadify v3.0.0
|
||||
Copyright (c) 2010 Ronnie Garcia
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
.uploadify {margin:0 auto 10px auto}
|
||||
|
||||
.uploadifyButton {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
color: #eeeeee;
|
||||
padding: 8px 0;
|
||||
text-align: center;
|
||||
height: 14px;
|
||||
width: 100%;
|
||||
background-color: #464646;
|
||||
-webkit-border-radius:5px;
|
||||
-moz-border-radius:5px;
|
||||
border-radius:5px;
|
||||
letter-spacing:2px;
|
||||
}
|
||||
.uploadify:hover .uploadifyButton {
|
||||
color:#fff;
|
||||
background-color: #333;
|
||||
cursor:pointer;
|
||||
}
|
||||
.uploadifyQueueItem {
|
||||
background-color: #F5F5F5;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
font: 11px Verdana, Geneva, sans-serif;
|
||||
margin-top: 5px;
|
||||
max-width: 350px;
|
||||
padding: 10px;
|
||||
}
|
||||
.uploadifyQueueItem .cancel {
|
||||
float: right;
|
||||
}
|
||||
.uploadifyQueueItem .fileName, .uploadifyQueueItem .data {
|
||||
float: left;
|
||||
}
|
||||
.uploadifyQueue .completed {
|
||||
background-color: #E5E5E5;
|
||||
}
|
||||
.uploadifyProgress {
|
||||
background-color: #E5E5E5;
|
||||
margin-top: 25px;
|
||||
height: 3px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
.uploadifyProgressBar {
|
||||
background-color: #0099FF;
|
||||
height: 3px;
|
||||
width: 1px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
}
|
||||
.uploadifyError {
|
||||
background-color: #FDE5DD !important;
|
||||
}
|
||||
|
||||
|
||||
/* Piwigo specific */
|
||||
#fileQueue {
|
||||
width: 420px;
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
margin: 0 auto 10px auto;
|
||||
padding: 5px 0 10px 0;
|
||||
}
|
||||
|
||||
.uploadifyQueueItem {
|
||||
border: 1px solid #666;
|
||||
background-color: #444;
|
||||
color:#999;
|
||||
margin: 5px auto 0 auto;
|
||||
padding: 10px;
|
||||
width: 350px;
|
||||
|
||||
}
|
||||
.uploadifyError {
|
||||
border: 2px solid #FBCBBC !important;
|
||||
background-color: #FDE5DD !important;
|
||||
}
|
||||
.uploadifyQueueItem .cancel {
|
||||
float: right;
|
||||
}
|
||||
.uploadifyProgress {
|
||||
background-color: #333;
|
||||
border: 1px solid #666;
|
||||
width: 100%;
|
||||
}
|
||||
.uploadifyProgressBar {
|
||||
background-color: #FF3363;
|
||||
width: 1px;
|
||||
height: 3px;
|
||||
}
|
|
@ -1,100 +0,0 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
|
||||
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | This program is free software; you can redistribute it and/or modify |
|
||||
// | it under the terms of the GNU General Public License as published by |
|
||||
// | the Free Software Foundation |
|
||||
// | |
|
||||
// | This program is distributed in the hope that it will be useful, but |
|
||||
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||
// | General Public License for more details. |
|
||||
// | |
|
||||
// | You should have received a copy of the GNU General Public License |
|
||||
// | along with this program; if not, write to the Free Software |
|
||||
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
||||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
define('PHPWG_ROOT_PATH','../../../');
|
||||
define('IN_ADMIN', true);
|
||||
|
||||
$_COOKIE['pwg_id'] = $_POST['session_id'];
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/functions_upload.inc.php');
|
||||
|
||||
check_pwg_token();
|
||||
|
||||
ob_start();
|
||||
echo '$_FILES'."\n";
|
||||
print_r($_FILES);
|
||||
echo '$_POST'."\n";
|
||||
print_r($_POST);
|
||||
echo '$user'."\n";
|
||||
print_r($user);
|
||||
$tmp = ob_get_contents();
|
||||
ob_end_clean();
|
||||
// error_log($tmp, 3, "/tmp/php-".date('YmdHis').'-'.sprintf('%020u', rand()).".log");
|
||||
|
||||
if ($_FILES['Filedata']['error'] !== UPLOAD_ERR_OK)
|
||||
{
|
||||
$error_message = file_upload_error_message($_FILES['Filedata']['error']);
|
||||
|
||||
add_upload_error(
|
||||
$_POST['upload_id'],
|
||||
sprintf(
|
||||
l10n('Error on file "%s" : %s'),
|
||||
$_FILES['Filedata']['name'],
|
||||
$error_message
|
||||
)
|
||||
);
|
||||
|
||||
echo "File Size Error";
|
||||
exit();
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
$image_id = add_uploaded_file(
|
||||
$_FILES['Filedata']['tmp_name'],
|
||||
$_FILES['Filedata']['name'],
|
||||
array($_POST['category_id']),
|
||||
$_POST['level']
|
||||
);
|
||||
|
||||
$_SESSION['uploads'][ $_POST['upload_id'] ][] = $image_id;
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
path
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$image_id.'
|
||||
;';
|
||||
$image_infos = pwg_db_fetch_assoc(pwg_query($query));
|
||||
|
||||
$thumbnail_url = preg_replace('#^'.PHPWG_ROOT_PATH.'#', './', DerivativeImage::thumb_url($image_infos));
|
||||
|
||||
$return = array(
|
||||
'image_id' => $image_id,
|
||||
'category_id' => $_POST['category_id'],
|
||||
'thumbnail_url' => $thumbnail_url,
|
||||
);
|
||||
|
||||
$output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
if (!empty($output))
|
||||
{
|
||||
add_upload_error($_POST['upload_id'], $output);
|
||||
$return['error_message'] = $output;
|
||||
}
|
||||
|
||||
echo json_encode($return);
|
||||
?>
|
Binary file not shown.
|
@ -1,32 +0,0 @@
|
|||
// this file must be in UTF-8 format
|
||||
|
||||
var uploadifyLang = new Array();
|
||||
|
||||
uploadifyLang['buttonText'] = 'SELECT FILES';
|
||||
uploadifyLang['fileTypeDesc'] = 'All Files (*.*)';
|
||||
uploadifyLang['replaceMsg1'] = 'The file named';
|
||||
uploadifyLang['replaceMsg2'] = 'is already in the queue';
|
||||
uploadifyLang['replaceMsg3'] = 'Do you want to replace the existing item in the queue?';
|
||||
uploadifyLang['existsMsg1'] = 'A file with the name';
|
||||
uploadifyLang['existsMsg2'] = 'already exists on the server';
|
||||
uploadifyLang['existsMsg3'] = 'Would you like to replace the existing file?';
|
||||
uploadifyLang['errorMsg1'] = 'Some files were not added to the queue:';
|
||||
uploadifyLang['errorMsg2'] = 'The number of files selected exceeds the remaining upload limit';
|
||||
uploadifyLang['errorMsg3'] = 'The number of files selected exceeds the queue size limit';
|
||||
uploadifyLang['errorMsg4'] = 'The file';
|
||||
uploadifyLang['errorMsg5'] = 'exceeds the size limit';
|
||||
uploadifyLang['errorMsg6'] = 'is empty';
|
||||
uploadifyLang['errorMsg7'] = 'is not an accepted file type';
|
||||
uploadifyLang['errorString1'] = 'Error';
|
||||
uploadifyLang['errorString2'] = 'HTTP Error';
|
||||
uploadifyLang['errorString3'] = 'Missing Upload URL';
|
||||
uploadifyLang['errorString4'] = 'IO Error';
|
||||
uploadifyLang['errorString5'] = 'Security Error';
|
||||
uploadifyLang['errorString6'] = 'The upload limit has been reached';
|
||||
uploadifyLang['errorString7'] = 'Exceeds Upload Limit';
|
||||
uploadifyLang['errorString8'] = 'Failed';
|
||||
uploadifyLang['errorString9'] = 'File ID Not Found';
|
||||
uploadifyLang['errorString10'] = 'Validation Error';
|
||||
uploadifyLang['errorString11'] = 'Cancelled';
|
||||
uploadifyLang['errorString12'] = 'Stopped';
|
||||
uploadifyLang['uploadComplete'] = 'Complete';
|
|
@ -146,6 +146,7 @@ DELETE
|
|||
{
|
||||
$template->delete_compiled_templates();
|
||||
FileCombiner::clear_combined_files();
|
||||
$persistent_cache->purge(true);
|
||||
break;
|
||||
}
|
||||
case 'derivatives':
|
||||
|
@ -219,7 +220,7 @@ else
|
|||
$advanced_features = array();
|
||||
|
||||
//$advanced_features is array of array composed of CAPTION & URL
|
||||
$advanced_features = trigger_event(
|
||||
$advanced_features = trigger_change(
|
||||
'get_admin_advanced_features_links',
|
||||
$advanced_features
|
||||
);
|
||||
|
|
|
@ -253,7 +253,7 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
|
|||
}
|
||||
|
||||
$customize_mail_content =
|
||||
trigger_event('nbm_render_global_customize_mail_content', $customize_mail_content);
|
||||
trigger_change('nbm_render_global_customize_mail_content', $customize_mail_content);
|
||||
|
||||
|
||||
// Prepare message after change language
|
||||
|
@ -340,7 +340,7 @@ function do_action_send_mail_notification($action = 'list_to_send', $check_key_l
|
|||
}
|
||||
|
||||
$nbm_user_customize_mail_content =
|
||||
trigger_event('nbm_render_user_customize_mail_content',
|
||||
trigger_change('nbm_render_user_customize_mail_content',
|
||||
$customize_mail_content, $nbm_user);
|
||||
if (!empty($nbm_user_customize_mail_content))
|
||||
{
|
||||
|
@ -482,7 +482,7 @@ check_status(get_tab_status($page['mode']));
|
|||
// | Add event handler |
|
||||
// +-----------------------------------------------------------------------+
|
||||
add_event_handler('nbm_render_global_customize_mail_content', 'render_global_customize_mail_content');
|
||||
trigger_action('nbm_event_handler_added');
|
||||
trigger_notify('nbm_event_handler_added');
|
||||
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
|
|
@ -57,12 +57,6 @@ DELETE FROM '.CADDIE_TABLE.'
|
|||
redirect(get_root_url().'admin.php?page=batch_manager&filter=prefilter-caddie');
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | process form |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_process.inc.php');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | prepare form |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
@ -72,6 +66,7 @@ include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_prepare.inc.php');
|
|||
// +-----------------------------------------------------------------------+
|
||||
// | sending html code |
|
||||
// +-----------------------------------------------------------------------+
|
||||
trigger_notify('loc_end_photo_add_direct');
|
||||
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'photos_add');
|
||||
?>
|
||||
|
|
|
@ -42,7 +42,7 @@ SELECT id
|
|||
FROM '.CATEGORIES_TABLE.'
|
||||
WHERE representative_picture_id = '.$_GET['image_id'].'
|
||||
;';
|
||||
$represent_options_selected = array_from_query($query, 'id');
|
||||
$represented_albums = query2array($query, null, 'id');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | delete photo |
|
||||
|
@ -108,50 +108,30 @@ if (isset($_GET['sync_metadata']))
|
|||
}
|
||||
|
||||
//--------------------------------------------------------- update informations
|
||||
|
||||
// first, we verify whether there is a mistake on the given creation date
|
||||
if (isset($_POST['date_creation_action'])
|
||||
and 'set' == $_POST['date_creation_action'])
|
||||
{
|
||||
if (!is_numeric($_POST['date_creation_year'])
|
||||
or !checkdate(
|
||||
$_POST['date_creation_month'],
|
||||
$_POST['date_creation_day'],
|
||||
$_POST['date_creation_year'])
|
||||
)
|
||||
{
|
||||
$page['errors'][] = l10n('wrong date');
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST['submit']) and count($page['errors']) == 0)
|
||||
if (isset($_POST['submit']))
|
||||
{
|
||||
$data = array();
|
||||
$data{'id'} = $_GET['image_id'];
|
||||
$data{'name'} = $_POST['name'];
|
||||
$data{'author'} = $_POST['author'];
|
||||
$data['id'] = $_GET['image_id'];
|
||||
$data['name'] = $_POST['name'];
|
||||
$data['author'] = $_POST['author'];
|
||||
$data['level'] = $_POST['level'];
|
||||
|
||||
if ($conf['allow_html_descriptions'])
|
||||
{
|
||||
$data{'comment'} = @$_POST['description'];
|
||||
$data['comment'] = @$_POST['description'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$data{'comment'} = strip_tags(@$_POST['description']);
|
||||
$data['comment'] = strip_tags(@$_POST['description']);
|
||||
}
|
||||
|
||||
if (!empty($_POST['date_creation_year']))
|
||||
if (!empty($_POST['date_creation']))
|
||||
{
|
||||
$data{'date_creation'} =
|
||||
$_POST['date_creation_year']
|
||||
.'-'.$_POST['date_creation_month']
|
||||
.'-'.$_POST['date_creation_day']
|
||||
.' '.$_POST['date_creation_time'];
|
||||
$data['date_creation'] = $_POST['date_creation'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$data{'date_creation'} = null;
|
||||
$data['date_creation'] = null;
|
||||
}
|
||||
|
||||
$data = trigger_change('picture_modify_before_update', $data);
|
||||
|
@ -175,6 +155,7 @@ if (isset($_POST['submit']) and count($page['errors']) == 0)
|
|||
{
|
||||
$_POST['associate'] = array();
|
||||
}
|
||||
check_input_parameter('associate', $_POST, true, PATTERN_ID);
|
||||
move_images_to_categories(array($_GET['image_id']), $_POST['associate']);
|
||||
|
||||
invalidate_user_cache();
|
||||
|
@ -184,14 +165,15 @@ if (isset($_POST['submit']) and count($page['errors']) == 0)
|
|||
{
|
||||
$_POST['represent'] = array();
|
||||
}
|
||||
check_input_parameter('represent', $_POST, true, PATTERN_ID);
|
||||
|
||||
$no_longer_thumbnail_for = array_diff($represent_options_selected, $_POST['represent']);
|
||||
$no_longer_thumbnail_for = array_diff($represented_albums, $_POST['represent']);
|
||||
if (count($no_longer_thumbnail_for) > 0)
|
||||
{
|
||||
set_random_representant($no_longer_thumbnail_for);
|
||||
}
|
||||
|
||||
$new_thumbnail_for = array_diff($_POST['represent'], $represent_options_selected);
|
||||
$new_thumbnail_for = array_diff($_POST['represent'], $represented_albums);
|
||||
if (count($new_thumbnail_for) > 0)
|
||||
{
|
||||
$query = '
|
||||
|
@ -202,7 +184,7 @@ UPDATE '.CATEGORIES_TABLE.'
|
|||
pwg_query($query);
|
||||
}
|
||||
|
||||
$represent_options_selected = $_POST['represent'];
|
||||
$represented_albums = $_POST['represent'];
|
||||
|
||||
$page['infos'][] = l10n('Photo informations updated');
|
||||
}
|
||||
|
@ -218,14 +200,6 @@ SELECT
|
|||
;';
|
||||
$tag_selection = get_taglist($query);
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
id,
|
||||
name
|
||||
FROM '.TAGS_TABLE.'
|
||||
;';
|
||||
$tags = get_taglist($query, false);
|
||||
|
||||
// retrieving direct information about picture
|
||||
$query = '
|
||||
SELECT *
|
||||
|
@ -255,16 +229,18 @@ $template->set_filenames(
|
|||
$admin_url_start = $admin_photo_base_url.'-properties';
|
||||
$admin_url_start.= isset($_GET['cat_id']) ? '&cat_id='.$_GET['cat_id'] : '';
|
||||
|
||||
$src_image = new SrcImage($row);
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'tag_selection' => $tag_selection,
|
||||
'tags' => $tags,
|
||||
'U_SYNC' => $admin_url_start.'&sync_metadata=1',
|
||||
'U_DELETE' => $admin_url_start.'&delete=1&pwg_token='.get_pwg_token(),
|
||||
|
||||
'PATH'=>$row['path'],
|
||||
|
||||
'TN_SRC' => DerivativeImage::thumb_url($row),
|
||||
'TN_SRC' => DerivativeImage::url(IMG_THUMB, $src_image),
|
||||
'FILE_SRC' => DerivativeImage::url(IMG_LARGE, $src_image),
|
||||
|
||||
'NAME' =>
|
||||
isset($_POST['name']) ?
|
||||
|
@ -284,6 +260,8 @@ $template->assign(
|
|||
: @$row['author']
|
||||
),
|
||||
|
||||
'DATE_CREATION' => $row['date_creation'],
|
||||
|
||||
'DESCRIPTION' =>
|
||||
htmlspecialchars( isset($_POST['description']) ?
|
||||
stripslashes($_POST['description']) : @$row['comment'] ),
|
||||
|
@ -308,7 +286,7 @@ while ($user_row = pwg_db_fetch_assoc($result))
|
|||
|
||||
$intro_vars = array(
|
||||
'file' => l10n('Original file : %s', $row['file']),
|
||||
'add_date' => l10n('Posted %s on %s', time_since($row['date_available'], 'year'), format_date($row['date_available'], false, false)),
|
||||
'add_date' => l10n('Posted %s on %s', time_since($row['date_available'], 'year'), format_date($row['date_available'], array('day', 'month', 'year'))),
|
||||
'added_by' => l10n('Added by %s', $row['added_by']),
|
||||
'size' => $row['width'].'×'.$row['height'].' pixels, '.sprintf('%.2f', $row['filesize']/1024).'MB',
|
||||
'stats' => l10n('Visited %d times', $row['hit']),
|
||||
|
@ -345,43 +323,7 @@ $template->assign(
|
|||
)
|
||||
);
|
||||
|
||||
// creation date
|
||||
unset($day, $month, $year);
|
||||
|
||||
if (isset($_POST['date_creation_action'])
|
||||
and 'set' == $_POST['date_creation_action'])
|
||||
{
|
||||
foreach (array('day', 'month', 'year', 'time') as $varname)
|
||||
{
|
||||
$$varname = $_POST['date_creation_'.$varname];
|
||||
}
|
||||
}
|
||||
else if (isset($row['date_creation']) and !empty($row['date_creation']))
|
||||
{
|
||||
list($year, $month, $day) = explode('-', substr($row['date_creation'],0,10));
|
||||
$time = substr($row['date_creation'],11);
|
||||
}
|
||||
else
|
||||
{
|
||||
list($year, $month, $day) = array('', 0, 0);
|
||||
$time = '00:00:00';
|
||||
}
|
||||
|
||||
|
||||
$month_list = $lang['month'];
|
||||
$month_list[0]='------------';
|
||||
ksort($month_list);
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'DATE_CREATION_DAY_VALUE' => (int)$day,
|
||||
'DATE_CREATION_MONTH_VALUE' => (int)$month,
|
||||
'DATE_CREATION_YEAR_VALUE' => $year,
|
||||
'DATE_CREATION_TIME_VALUE' => $time,
|
||||
'month_list' => $month_list,
|
||||
)
|
||||
);
|
||||
|
||||
// categories
|
||||
$query = '
|
||||
SELECT category_id, uppercats
|
||||
FROM '.IMAGE_CATEGORY_TABLE.' AS ic
|
||||
|
@ -469,14 +411,16 @@ SELECT id
|
|||
INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = category_id
|
||||
WHERE image_id = '.$_GET['image_id'].'
|
||||
;';
|
||||
$associate_options_selected = array_from_query($query, 'id');
|
||||
$associated_albums = query2array($query, null, 'id');
|
||||
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
display_select_cat_wrapper($query, $associate_options_selected, 'associate_options');
|
||||
display_select_cat_wrapper($query, $represent_options_selected, 'represent_options');
|
||||
$template->assign(array(
|
||||
'associated_albums' => $associated_albums,
|
||||
'represented_albums' => $represented_albums,
|
||||
'STORAGE_ALBUM' => $storage_category_id,
|
||||
'CACHE_KEYS' => get_admin_client_cache_keys(array('tags', 'categories')),
|
||||
));
|
||||
|
||||
trigger_notify('loc_end_picture_modify');
|
||||
|
||||
//----------------------------------------------------------- sending html code
|
||||
|
||||
|
|
|
@ -45,6 +45,12 @@ if (count($sections)<2)
|
|||
}
|
||||
|
||||
$plugin_id = $sections[0];
|
||||
|
||||
if (!preg_match('/^[\w-]+$/', $plugin_id))
|
||||
{
|
||||
die('Invalid plugin identifier');
|
||||
}
|
||||
|
||||
if ( !isset($pwg_loaded_plugins[$plugin_id]) )
|
||||
{
|
||||
die('Invalid URL - plugin '.$plugin_id.' not active');
|
||||
|
@ -59,4 +65,4 @@ else
|
|||
{
|
||||
die('Missing file '.$filename);
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
|
|
@ -77,6 +77,7 @@ if (isset($_GET['action']) and isset($_GET['plugin']))
|
|||
if ($_GET['action'] == 'activate' or $_GET['action'] == 'deactivate')
|
||||
{
|
||||
$template->delete_compiled_templates();
|
||||
$persistent_cache->purge(true);
|
||||
}
|
||||
redirect($base_url);
|
||||
}
|
||||
|
|
|
@ -45,9 +45,9 @@ if (isset($_GET['revision']) and isset($_GET['extension']))
|
|||
{
|
||||
check_pwg_token();
|
||||
|
||||
$install_status = $plugins->extract_plugin_files('install', $_GET['revision'], $_GET['extension']);
|
||||
$install_status = $plugins->extract_plugin_files('install', $_GET['revision'], $_GET['extension'], $plugin_id);
|
||||
|
||||
redirect($base_url.'&installstatus='.$install_status);
|
||||
redirect($base_url.'&installstatus='.$install_status.'&plugin_id='.$plugin_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,8 +57,13 @@ if (isset($_GET['installstatus']))
|
|||
switch ($_GET['installstatus'])
|
||||
{
|
||||
case 'ok':
|
||||
$activate_url = get_root_url().'admin.php?page=plugins'
|
||||
. '&plugin=' . $_GET['plugin_id']
|
||||
. '&pwg_token=' . get_pwg_token()
|
||||
. '&action=activate';
|
||||
|
||||
$page['infos'][] = l10n('Plugin has been successfully copied');
|
||||
$page['infos'][] = l10n('You might go to plugin list to install and activate it.');
|
||||
$page['infos'][] = '<a href="'. $activate_url . '">' . l10n('Activate it now') . '</a>';
|
||||
break;
|
||||
|
||||
case 'temp_path_error':
|
||||
|
|
|
@ -47,16 +47,21 @@ if
|
|||
and preg_match('/^[a-z_]*$/', $_GET['page'])
|
||||
)
|
||||
{
|
||||
$help_content =
|
||||
load_language('help/'.$_GET['page'].'.html', '', array('return'=>true) );
|
||||
$help_content = load_language(
|
||||
'help/'.$_GET['page'].'.html',
|
||||
'',
|
||||
array(
|
||||
'force_fallback' => 'en_UK',
|
||||
'return' => true,
|
||||
)
|
||||
);
|
||||
|
||||
if ($help_content == false)
|
||||
{
|
||||
$help_content = '';
|
||||
}
|
||||
|
||||
$help_content = trigger_event(
|
||||
'get_popup_help_content', $help_content, $_GET['page']);
|
||||
$help_content = trigger_change('get_popup_help_content', $help_content, $_GET['page']);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -93,8 +93,11 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||
$rating = $by_user_rating_model;
|
||||
$rating['uid'] = (int)$row['user_id'];
|
||||
$rating['aid'] = $usr['anon'] ? $row['anonymous_id'] : '';
|
||||
$rating['last_date'] = $row['date'];
|
||||
$rating['last_date'] = $rating['first_date'] = $row['date'];
|
||||
}
|
||||
else
|
||||
$rating['first_date'] = $row['date'];
|
||||
|
||||
$rating['rates'][$row['rate']][] = array(
|
||||
'id' => $row['element_id'],
|
||||
'date' => $row['date'],
|
||||
|
@ -107,14 +110,15 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||
$image_urls = array();
|
||||
if (count($image_ids) > 0 )
|
||||
{
|
||||
$query = 'SELECT id, name, file, path, representative_ext
|
||||
$query = 'SELECT id, name, file, path, representative_ext, level
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id IN ('.implode(',', array_keys($image_ids)).')';
|
||||
$result = pwg_query($query);
|
||||
$params = ImageStdParams::get_by_type(IMG_SQUARE);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$image_urls[ $row['id'] ] = array(
|
||||
'tn' => DerivativeImage::thumb_url($row),
|
||||
'tn' => DerivativeImage::url($params, $row),
|
||||
'page' => make_picture_url( array('image_id'=>$row['id'], 'image_file'=>$row['file']) ),
|
||||
);
|
||||
}
|
||||
|
@ -171,7 +175,7 @@ foreach($by_user_ratings as $id => &$rating)
|
|||
'avg' => $s/$c,
|
||||
'cv' => $s==0 ? -1 : sqrt($var)/($s/$c), // http://en.wikipedia.org/wiki/Coefficient_of_variation
|
||||
'cd' => $consensus_dev,
|
||||
'cdtop' => $consensus_dev_top_count ? $consensus_dev_top : ''
|
||||
'cdtop' => $consensus_dev_top_count ? $consensus_dev_top : '',
|
||||
);
|
||||
}
|
||||
unset($rating);
|
||||
|
@ -210,7 +214,12 @@ function consensus_dev_compare($a, $b)
|
|||
return ($d==0) ? 0 : ($d<0 ? -1 : 1);
|
||||
}
|
||||
|
||||
$order_by_index=3;
|
||||
function last_rate_compare($a, $b)
|
||||
{
|
||||
return -strcmp( $a['last_date'], $b['last_date']);
|
||||
}
|
||||
|
||||
$order_by_index=4;
|
||||
if (isset($_GET['order_by']) and is_numeric($_GET['order_by']))
|
||||
{
|
||||
$order_by_index = $_GET['order_by'];
|
||||
|
@ -221,6 +230,7 @@ $available_order_by= array(
|
|||
array(l10n('Number of rates'), 'count_compare'),
|
||||
array(l10n('Variation'), 'cv_compare'),
|
||||
array(l10n('Consensus deviation'), 'consensus_dev_compare'),
|
||||
array(l10n('Last'), 'last_rate_compare'),
|
||||
);
|
||||
|
||||
for ($i=0; $i<count($available_order_by); $i++)
|
||||
|
@ -241,7 +251,7 @@ $template->assign( array(
|
|||
'available_rates' => $conf['rate_items'],
|
||||
'ratings' => $by_user_ratings,
|
||||
'image_urls' => $image_urls,
|
||||
'TN_WIDTH' => 28+2*ImageStdParams::get_by_type(IMG_THUMB)->sizing->ideal_size[0],
|
||||
'TN_WIDTH' => ImageStdParams::get_by_type(IMG_SQUARE)->sizing->ideal_size[0],
|
||||
) );
|
||||
$template->set_filename('rating', 'rating_user.tpl');
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'rating');
|
||||
|
|
|
@ -176,7 +176,7 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||
$plugin_links = array();
|
||||
//$plugin_links is array of array composed of U_HREF, U_HINT & U_CAPTION
|
||||
$plugin_links =
|
||||
trigger_event('get_admins_site_links',
|
||||
trigger_change('get_admins_site_links',
|
||||
$plugin_links, $row['id'], $is_remote);
|
||||
$tpl_var['plugin_links'] = $plugin_links;
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ SELECT id, name
|
|||
$updates[] = array(
|
||||
'id' => $tag_id,
|
||||
'name' => addslashes($tag_name),
|
||||
'url_name' => trigger_event('render_tag_url', $tag_name),
|
||||
'url_name' => trigger_change('render_tag_url', $tag_name),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ SELECT id, name
|
|||
TAGS_TABLE,
|
||||
array(
|
||||
'name' => $tag_name,
|
||||
'url_name' => trigger_event('render_tag_url', $tag_name),
|
||||
'url_name' => trigger_change('render_tag_url', $tag_name),
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -218,7 +218,7 @@ SELECT
|
|||
$result = pwg_query($query);
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$name_of_tag[ $row['id'] ] = trigger_event('render_tag_name', $row['name'], $row);
|
||||
$name_of_tag[ $row['id'] ] = trigger_change('render_tag_name', $row['name'], $row);
|
||||
}
|
||||
|
||||
$tag_ids_to_delete = array_diff(
|
||||
|
@ -358,7 +358,7 @@ $orphan_tags = get_orphan_tags();
|
|||
$orphan_tag_names = array();
|
||||
foreach ($orphan_tags as $tag)
|
||||
{
|
||||
$orphan_tag_names[] = trigger_event('render_tag_name', $tag['name'], $tag);
|
||||
$orphan_tag_names[] = trigger_change('render_tag_name', $tag['name'], $tag);
|
||||
}
|
||||
|
||||
if (count($orphan_tag_names) > 0)
|
||||
|
@ -393,12 +393,12 @@ $all_tags = array();
|
|||
while ($tag = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$raw_name = $tag['name'];
|
||||
$tag['name'] = trigger_event('render_tag_name', $raw_name, $tag);
|
||||
$tag['name'] = trigger_change('render_tag_name', $raw_name, $tag);
|
||||
$tag['counter'] = intval(@$tag_counters[ $tag['id'] ]);
|
||||
$tag['U_VIEW'] = make_index_url(array('tags'=>array($tag)));
|
||||
$tag['U_EDIT'] = 'admin.php?page=batch_manager&filter=tag-'.$tag['id'];
|
||||
|
||||
$alt_names = trigger_event('get_tag_alt_names', array(), $raw_name);
|
||||
$alt_names = trigger_change('get_tag_alt_names', array(), $raw_name);
|
||||
$alt_names = array_diff( array_unique($alt_names), array($tag['name']) );
|
||||
if (count($alt_names))
|
||||
{
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 912 B |
|
@ -160,27 +160,23 @@ margin-top:4px; padding-bottom:3px; padding-top:3px; top:1px;
|
|||
.tabsheet a span { font-size:10px; margin-right:2px; padding:0 3px 0 1px; }
|
||||
|
||||
.sort { clear: none; }
|
||||
|
||||
/* menubar is on all admin pages => No specific css file */
|
||||
#menubar {
|
||||
padding:0; width:207px; z-index:99; text-align: left;margin-top:7px;
|
||||
margin-left:0;
|
||||
}
|
||||
|
||||
#menubar ul.scroll { overflow-y:auto; max-height:500px;
|
||||
/* Only IE family supports colored scrollbar */
|
||||
scrollbar-face-color: #ddd; scrollbar-shadow-color: #bbb; scrollbar-highlight-color: #fff;
|
||||
scrollbar-3dlight-color: #d6d6d6; scrollbar-darkshadow-color: #ccc; scrollbar-track-color: #eee;
|
||||
scrollbar-arrow-color: #0cccc; }
|
||||
#menubar dd { margin: 0; padding: 0;}
|
||||
#menubar dl { width: 200px; border:0; margin: 0; padding: 0; display: block; min-height:35px; border:1px solid #ddd; background-color:#f1f1f1; border-left:none; border-right:1px solid #ddd;}
|
||||
#menubar dl.first {border-top:none;border-radius:0 6px 0 0;}
|
||||
#menubar dl.first dt {border-radius:0 6px 0 0;}
|
||||
#menubar dl.last {border-bottom:1px solid #ddd; border-radius:0 0 6px 0;}
|
||||
#menubar ul.scroll { overflow-y:auto; max-height:500px; }
|
||||
#menubar dl { width: 200px; min-height:35px; border:0; margin: 0; padding: 0; display: block; border:1px solid #ddd; background-color:#f1f1f1; border-left:none; }
|
||||
#menubar dd { margin: 0; padding: 0; }
|
||||
#menubar dt {
|
||||
background-color: #ddd; margin: 0; display: block; font-weight:bold;
|
||||
position:relative; padding: 5px 1px 4px 5px; font-size: 13px; color: #777;
|
||||
cursor:pointer;
|
||||
}
|
||||
#menubar dl:first-of-type, #menubar dl:first-of-type dt { border-radius:0 6px 0 0; }
|
||||
#menubar dl:last-of-type { border-radius:0 0 6px 0; }
|
||||
#menubar li { margin: 0; padding-left:10px; }
|
||||
#menubar li A { display:block; }
|
||||
#menubar li A:hover {color:black; text-decoration:none}
|
||||
|
@ -298,7 +294,7 @@ UL.thumbnails li.rank-of-image {background-color: #ddd;}
|
|||
|
||||
#batchManagerGlobal .thumbSelected {background-color:#C2F5C2 !important}
|
||||
#batchManagerGlobal #selectedMessage {background-color:#C2F5C2;}
|
||||
#filter_dimension_width_info, #filter_dimension_height_info, #filter_dimension_ratio_info {color:#ff7700;font-weight:bold;}
|
||||
.slider-info {color:#ff7700;font-weight:bold;}
|
||||
|
||||
.selectedComment {background-color:#C2F5C2;}
|
||||
|
||||
|
@ -309,7 +305,7 @@ UL.thumbnails li.rank-of-image {background-color: #ddd;}
|
|||
font-weight:bold;
|
||||
letter-spacing:1px;
|
||||
border:none;
|
||||
background-color:#666666;
|
||||
background-color:#666;
|
||||
color:#fff;
|
||||
padding:2px 5px;
|
||||
-moz-border-radius:5px;
|
||||
|
@ -325,6 +321,12 @@ UL.thumbnails li.rank-of-image {background-color: #ddd;}
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
.buttonLike:disabled, input[type="submit"]:disabled, input[type="button"]:disabled, input[type="reset"]:disabled {
|
||||
background-color:#999;
|
||||
color:#eee;
|
||||
cursor:not-allowed;
|
||||
}
|
||||
|
||||
p.albumTitle img {margin-bottom:-3px;}
|
||||
|
||||
.groups label>p {
|
||||
|
@ -365,3 +367,18 @@ table.dataTable thead th {
|
|||
|
||||
.userPropertiesContainer {border-color:#ddd;}
|
||||
.userPrefs {border-color:#ddd;}
|
||||
|
||||
.big-progressbar {
|
||||
background:#fff;
|
||||
border:1px solid #aaa;
|
||||
border-radius:5px;
|
||||
}
|
||||
|
||||
.big-progressbar .progressbar {
|
||||
background:#FF8A23;
|
||||
background:#FF8A23 linear-gradient(135deg, rgba(255,255,255,0) 44%,rgba(255,255,255,0.2) 44%,rgba(255,255,255,0.2) 57%,rgba(255,255,255,0) 57%);
|
||||
background-size:33px 25px;
|
||||
box-shadow:inset 0px 1px 3px 0px rgba(255,255,255,0.4);
|
||||
}
|
||||
|
||||
.font-checkbox [class*=icon-check]:before { color:#444; }
|
||||
|
|
|
@ -3,5 +3,6 @@ $themeconf = array(
|
|||
'name' => 'clear',
|
||||
'parent' => 'default',
|
||||
'admin_icon_dir' => 'admin/themes/clear/icon',
|
||||
'colorscheme' => 'clear',
|
||||
);
|
||||
?>
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
/* Issues in IE from 5 to 6 only not to be used with IE7 */
|
||||
|
||||
|
||||
/* to avoid vanishing objects in IE6 */
|
||||
H1, #theHeader {
|
||||
width: 100%; /* <- useless but seems to make IE6 happy */
|
||||
}
|
||||
.content {
|
||||
height: 1em; /* for IE6 it's like min-height */
|
||||
}
|
||||
|
||||
/* fix quickconnect layout */
|
||||
FORM#quickconnect FIELDSET {
|
||||
width: 99%; /* correct an ugly 1 or 2 px misalignement with IE */
|
||||
}
|
||||
|
||||
/* fix IE with another layout for thumbnails */
|
||||
UL.thumbnails SPAN.wrap2 {
|
||||
display: block;
|
||||
position: relative;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
UL.thumbnails IMG.thumbnail {
|
||||
position: relative;
|
||||
top: -50%; /* Is this following hacking technic required ? */
|
||||
/*\*//*/
|
||||
margin-top: -40%;
|
||||
/**/
|
||||
}
|
||||
UL.thumbnails INPUT {
|
||||
position: absolute;
|
||||
left: 2px;
|
||||
top: 2px; /* same as other browsers but not so pretty */
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
/* fix IE7 footer */
|
||||
#the_page { min-height:100%; position:relative; padding:0; margin:0; }
|
||||
#menubar { margin: 0; }
|
||||
#footer { left: 0; }
|
||||
|
||||
UL.thumbnails li.rank-of-image {
|
||||
text-align:left;
|
||||
}
|
||||
.groups li {
|
||||
display: inline;
|
||||
}
|
|
@ -1,24 +1,6 @@
|
|||
Font license info
|
||||
|
||||
|
||||
## Fontelico
|
||||
|
||||
Copyright (C) 2012 by Fontello project
|
||||
|
||||
Author: Crowdsourced, for Fontello project
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://fontello.com
|
||||
|
||||
|
||||
## Elusive
|
||||
|
||||
Copyright (C) 2013 by Aristeides Stathopoulos
|
||||
|
||||
Author: Aristeides Stathopoulos
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://aristeides.com/
|
||||
|
||||
|
||||
## Font Awesome
|
||||
|
||||
Copyright (C) 2012 by Dave Gandy
|
||||
|
@ -28,13 +10,13 @@ Font license info
|
|||
Homepage: http://fortawesome.github.com/Font-Awesome/
|
||||
|
||||
|
||||
## Entypo
|
||||
## Elusive
|
||||
|
||||
Copyright (C) 2012 by Daniel Bruce
|
||||
Copyright (C) 2013 by Aristeides Stathopoulos
|
||||
|
||||
Author: Daniel Bruce
|
||||
License: CC BY-SA (http://creativecommons.org/licenses/by-sa/2.0/)
|
||||
Homepage: http://www.entypo.com
|
||||
Author: Aristeides Stathopoulos
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://aristeides.com/
|
||||
|
||||
|
||||
## Typicons
|
||||
|
@ -42,17 +24,17 @@ Font license info
|
|||
(c) Stephen Hutchings 2012
|
||||
|
||||
Author: Stephen Hutchings
|
||||
License: CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://typicons.com/
|
||||
|
||||
|
||||
## Iconic
|
||||
## Entypo
|
||||
|
||||
Copyright (C) 2012 by P.J. Onori
|
||||
Copyright (C) 2012 by Daniel Bruce
|
||||
|
||||
Author: P.J. Onori
|
||||
Author: Daniel Bruce
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://somerandomdude.com/work/iconic/
|
||||
Homepage: http://www.entypo.com
|
||||
|
||||
|
||||
## MFG Labs
|
||||
|
@ -64,3 +46,21 @@ Font license info
|
|||
Homepage: http://www.mfglabs.com/
|
||||
|
||||
|
||||
## Iconic
|
||||
|
||||
Copyright (C) 2012 by P.J. Onori
|
||||
|
||||
Author: P.J. Onori
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://somerandomdude.com/work/iconic/
|
||||
|
||||
|
||||
## Fontelico
|
||||
|
||||
Copyright (C) 2012 by Fontello project
|
||||
|
||||
Author: Crowdsourced, for Fontello project
|
||||
License: SIL (http://scripts.sil.org/OFL)
|
||||
Homepage: http://fontello.com
|
||||
|
||||
|
||||
|
|
|
@ -48,12 +48,36 @@
|
|||
"code": 127748,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "12f4ece88e46abd864e40b35e05b11cd",
|
||||
"css": "ok",
|
||||
"code": 59417,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "43ab845088317bd348dee1d975700c48",
|
||||
"css": "ok-circled",
|
||||
"code": 59428,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "5211af474d3a9848f67f945e2ccaf143",
|
||||
"css": "cancel",
|
||||
"code": 59426,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "0f4cae16f34ae243a6144c18a003f2d8",
|
||||
"css": "cancel-circled",
|
||||
"code": 59425,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "44e04715aecbca7f266a17d5a7863c68",
|
||||
"css": "plus",
|
||||
"code": 59427,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "4ba33d2607902cf690dd45df09774cb0",
|
||||
"css": "plus-circled",
|
||||
|
@ -144,6 +168,12 @@
|
|||
"code": 59197,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "531bc468eecbb8867d822f1c11f1e039",
|
||||
"css": "calendar",
|
||||
"code": 59416,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "0d20938846444af8deb1920dc85a29fb",
|
||||
"css": "logout",
|
||||
|
@ -168,6 +198,18 @@
|
|||
"code": 59410,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "0b2b66e526028a6972d51a6f10281b4b",
|
||||
"css": "zoom-in",
|
||||
"code": 59431,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "d25d10efa900f529ad1d275657cfd30e",
|
||||
"css": "zoom-out",
|
||||
"code": 59432,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "bc71f4c6e53394d5ba46b063040014f1",
|
||||
"css": "cw",
|
||||
|
|
|
@ -1,62 +1,69 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
|
||||
.icon-spin6:before { content: '\e81d'; } /* '' */
|
||||
.icon-asl:before { content: '\e0ad'; } /* '' */
|
||||
.icon-mail-alt:before { content: '\f0e0'; } /* '' */
|
||||
.icon-star:before { content: '\2605'; } /* '★' */
|
||||
.icon-star-empty:before { content: '\2606'; } /* '☆' */
|
||||
.icon-user:before { content: '👤'; } /* '\1f464' */
|
||||
.icon-picture:before { content: '🌄'; } /* '\1f304' */
|
||||
.icon-cancel-circled:before { content: '\e821'; } /* '' */
|
||||
.icon-plus-circled:before { content: '\2795'; } /* '➕' */
|
||||
.icon-link:before { content: '🔗'; } /* '\1f517' */
|
||||
.icon-lock:before { content: '🔒'; } /* '\1f512' */
|
||||
.icon-eye:before { content: '\e70a'; } /* '' */
|
||||
.icon-tags:before { content: '\e70d'; } /* '' */
|
||||
.icon-code:before { content: '\e80a'; } /* '' */
|
||||
.icon-pencil:before { content: '\270e'; } /* '✎' */
|
||||
.icon-chat:before { content: '\e720'; } /* '' */
|
||||
.icon-trash:before { content: '\e729'; } /* '' */
|
||||
.icon-folder-open:before { content: '\e806'; } /* '' */
|
||||
.icon-menu:before { content: '\e809'; } /* '' */
|
||||
.icon-cog:before { content: '\2699'; } /* '⚙' */
|
||||
.icon-cog-alt:before { content: '\26ef'; } /* '⛯' */
|
||||
.icon-wrench:before { content: '🔧'; } /* '\1f527' */
|
||||
.icon-basket:before { content: '\e73d'; } /* '' */
|
||||
.icon-logout:before { content: '\e81b'; } /* '' */
|
||||
.icon-clock:before { content: '🕔'; } /* '\1f554' */
|
||||
.icon-block:before { content: '🚫'; } /* '\1f6ab' */
|
||||
.icon-move:before { content: '\e812'; } /* '' */
|
||||
.icon-cw:before { content: '\e80c'; } /* '' */
|
||||
.icon-arrows-cw:before { content: '\e804'; } /* '' */
|
||||
.icon-mail:before { content: '\2709'; } /* '✉' */
|
||||
.icon-exchange:before { content: '\e805'; } /* '' */
|
||||
.icon-pencil:before { content: '\270e'; } /* '✎' */
|
||||
.icon-plus-circled:before { content: '\2795'; } /* '➕' */
|
||||
.icon-asl:before { content: '\e0ad'; } /* '' */
|
||||
.icon-eye:before { content: '\e70a'; } /* '' */
|
||||
.icon-tags:before { content: '\e70d'; } /* '' */
|
||||
.icon-chat:before { content: '\e720'; } /* '' */
|
||||
.icon-trash:before { content: '\e729'; } /* '' */
|
||||
.icon-basket:before { content: '\e73d'; } /* '' */
|
||||
.icon-puzzle:before { content: '\e7b6'; } /* '' */
|
||||
.icon-language:before { content: '\e800'; } /* '' */
|
||||
.icon-signal:before { content: '\e801'; } /* '' */
|
||||
.icon-crop:before { content: '\f125'; } /* '' */
|
||||
.icon-check:before { content: '\e81f'; } /* '' */
|
||||
.icon-check-empty:before { content: '\e820'; } /* '' */
|
||||
.icon-tasks:before { content: '\f0ae'; } /* '' */
|
||||
.icon-filter:before { content: '\f0b0'; } /* '' */
|
||||
.icon-sitemap:before { content: '\f0e8'; } /* '' */
|
||||
.icon-search:before { content: '\e811'; } /* '' */
|
||||
.icon-users:before { content: '\e802'; } /* '' */
|
||||
.icon-tools:before { content: '\e803'; } /* '' */
|
||||
.icon-arrows-cw:before { content: '\e804'; } /* '' */
|
||||
.icon-exchange:before { content: '\e805'; } /* '' */
|
||||
.icon-folder-open:before { content: '\e806'; } /* '' */
|
||||
.icon-brush:before { content: '\e807'; } /* '' */
|
||||
.icon-flow-branch:before { content: '\e808'; } /* '' */
|
||||
.icon-menu:before { content: '\e809'; } /* '' */
|
||||
.icon-code:before { content: '\e80a'; } /* '' */
|
||||
.icon-user-add:before { content: '\e80b'; } /* '' */
|
||||
.icon-help-circled:before { content: '\e81a'; } /* '' */
|
||||
.icon-info-circled-1:before { content: '\e817'; } /* '' */
|
||||
.icon-cw:before { content: '\e80c'; } /* '' */
|
||||
.icon-group:before { content: '\e80d'; } /* '' */
|
||||
.icon-home:before { content: '\e80e'; } /* '' */
|
||||
.icon-flag:before { content: '\e81c'; } /* '' */
|
||||
.icon-equalizer:before { content: '\e80f'; } /* '' */
|
||||
.icon-mail-1:before { content: '\e810'; } /* '' */
|
||||
.icon-search:before { content: '\e811'; } /* '' */
|
||||
.icon-move:before { content: '\e812'; } /* '' */
|
||||
.icon-upload:before { content: '\e813'; } /* '' */
|
||||
.icon-upload-cloud:before { content: '\e814'; } /* '' */
|
||||
.icon-tools:before { content: '\e803'; } /* '' */
|
||||
.icon-hourglass:before { content: '\e81e'; } /* '' */
|
||||
.icon-network:before { content: '\e816'; } /* '' */
|
||||
.icon-brush:before { content: '\e807'; } /* '' */
|
||||
.icon-language:before { content: '\e800'; } /* '' */
|
||||
.icon-key:before { content: '\e815'; } /* '' */
|
||||
.icon-flow-branch:before { content: '\e808'; } /* '' */
|
||||
.icon-puzzle:before { content: '\e7b6'; } /* '' */
|
||||
.icon-mail-1:before { content: '\e810'; } /* '' */
|
||||
.icon-equalizer:before { content: '\e80f'; } /* '' */
|
||||
.icon-users:before { content: '\e802'; } /* '' */
|
||||
.icon-group:before { content: '\e80d'; } /* '' */
|
||||
.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
|
||||
.icon-network:before { content: '\e816'; } /* '' */
|
||||
.icon-info-circled-1:before { content: '\e817'; } /* '' */
|
||||
.icon-calendar:before { content: '\e818'; } /* '' */
|
||||
.icon-ok:before { content: '\e819'; } /* '' */
|
||||
.icon-help-circled:before { content: '\e81a'; } /* '' */
|
||||
.icon-logout:before { content: '\e81b'; } /* '' */
|
||||
.icon-flag:before { content: '\e81c'; } /* '' */
|
||||
.icon-spin6:before { content: '\e81d'; } /* '' */
|
||||
.icon-hourglass:before { content: '\e81e'; } /* '' */
|
||||
.icon-check:before { content: '\e81f'; } /* '' */
|
||||
.icon-check-empty:before { content: '\e820'; } /* '' */
|
||||
.icon-cancel-circled:before { content: '\e821'; } /* '' */
|
||||
.icon-cancel:before { content: '\e822'; } /* '' */
|
||||
.icon-plus:before { content: '\e823'; } /* '' */
|
||||
.icon-ok-circled:before { content: '\e824'; } /* '' */
|
||||
.icon-zoom-in:before { content: '\e827'; } /* '' */
|
||||
.icon-zoom-out:before { content: '\e828'; } /* '' */
|
||||
.icon-tasks:before { content: '\f0ae'; } /* '' */
|
||||
.icon-filter:before { content: '\f0b0'; } /* '' */
|
||||
.icon-mail-alt:before { content: '\f0e0'; } /* '' */
|
||||
.icon-sitemap:before { content: '\f0e8'; } /* '' */
|
||||
.icon-crop:before { content: '\f125'; } /* '' */
|
||||
.icon-picture:before { content: '🌄'; } /* '\1f304' */
|
||||
.icon-user:before { content: '👤'; } /* '\1f464' */
|
||||
.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
|
||||
.icon-lock:before { content: '🔒'; } /* '\1f512' */
|
||||
.icon-link:before { content: '🔗'; } /* '\1f517' */
|
||||
.icon-wrench:before { content: '🔧'; } /* '\1f527' */
|
||||
.icon-clock:before { content: '🕔'; } /* '\1f554' */
|
||||
.icon-block:before { content: '🚫'; } /* '\1f6ab' */
|
File diff suppressed because one or more lines are too long
|
@ -1,60 +1,67 @@
|
|||
|
||||
.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '★ '); }
|
||||
.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '☆ '); }
|
||||
.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); }
|
||||
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); }
|
||||
.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); }
|
||||
.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); }
|
||||
.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); }
|
||||
.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); }
|
||||
.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⚙ '); }
|
||||
.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⛯ '); }
|
||||
.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); }
|
||||
.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); }
|
||||
.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); }
|
||||
.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✉ '); }
|
||||
.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); }
|
||||
.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); }
|
||||
.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
|
||||
.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-ok-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); }
|
||||
.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); }
|
||||
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
|
||||
.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); }
|
||||
.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); }
|
||||
.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); }
|
||||
.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); }
|
||||
.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); }
|
|
@ -10,62 +10,69 @@
|
|||
/* font-size: 120%; */
|
||||
}
|
||||
|
||||
.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '★ '); }
|
||||
.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '☆ '); }
|
||||
.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); }
|
||||
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); }
|
||||
.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); }
|
||||
.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); }
|
||||
.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); }
|
||||
.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); }
|
||||
.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⚙ '); }
|
||||
.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⛯ '); }
|
||||
.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); }
|
||||
.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); }
|
||||
.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); }
|
||||
.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✉ '); }
|
||||
.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); }
|
||||
.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); }
|
||||
.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
|
||||
.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-ok-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
|
||||
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); }
|
||||
.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); }
|
||||
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
|
||||
.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); }
|
||||
.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); }
|
||||
.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); }
|
||||
.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); }
|
||||
.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); }
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.eot?27476867');
|
||||
src: url('../font/fontello.eot?27476867#iefix') format('embedded-opentype'),
|
||||
url('../font/fontello.woff?27476867') format('woff'),
|
||||
url('../font/fontello.ttf?27476867') format('truetype'),
|
||||
url('../font/fontello.svg?27476867#fontello') format('svg');
|
||||
src: url('../font/fontello.eot?80487531');
|
||||
src: url('../font/fontello.eot?80487531#iefix') format('embedded-opentype'),
|
||||
url('../font/fontello.woff?80487531') format('woff'),
|
||||
url('../font/fontello.ttf?80487531') format('truetype'),
|
||||
url('../font/fontello.svg?80487531#fontello') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
|||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.svg?27476867#fontello') format('svg');
|
||||
src: url('../font/fontello.svg?80487531#fontello') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
@ -52,62 +52,69 @@
|
|||
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
|
||||
}
|
||||
|
||||
.icon-spin6:before { content: '\e81d'; } /* '' */
|
||||
.icon-asl:before { content: '\e0ad'; } /* '' */
|
||||
.icon-mail-alt:before { content: '\f0e0'; } /* '' */
|
||||
.icon-star:before { content: '\2605'; } /* '★' */
|
||||
.icon-star-empty:before { content: '\2606'; } /* '☆' */
|
||||
.icon-user:before { content: '👤'; } /* '\1f464' */
|
||||
.icon-picture:before { content: '🌄'; } /* '\1f304' */
|
||||
.icon-cancel-circled:before { content: '\e821'; } /* '' */
|
||||
.icon-plus-circled:before { content: '\2795'; } /* '➕' */
|
||||
.icon-link:before { content: '🔗'; } /* '\1f517' */
|
||||
.icon-lock:before { content: '🔒'; } /* '\1f512' */
|
||||
.icon-eye:before { content: '\e70a'; } /* '' */
|
||||
.icon-tags:before { content: '\e70d'; } /* '' */
|
||||
.icon-code:before { content: '\e80a'; } /* '' */
|
||||
.icon-pencil:before { content: '\270e'; } /* '✎' */
|
||||
.icon-chat:before { content: '\e720'; } /* '' */
|
||||
.icon-trash:before { content: '\e729'; } /* '' */
|
||||
.icon-folder-open:before { content: '\e806'; } /* '' */
|
||||
.icon-menu:before { content: '\e809'; } /* '' */
|
||||
.icon-cog:before { content: '\2699'; } /* '⚙' */
|
||||
.icon-cog-alt:before { content: '\26ef'; } /* '⛯' */
|
||||
.icon-wrench:before { content: '🔧'; } /* '\1f527' */
|
||||
.icon-basket:before { content: '\e73d'; } /* '' */
|
||||
.icon-logout:before { content: '\e81b'; } /* '' */
|
||||
.icon-clock:before { content: '🕔'; } /* '\1f554' */
|
||||
.icon-block:before { content: '🚫'; } /* '\1f6ab' */
|
||||
.icon-move:before { content: '\e812'; } /* '' */
|
||||
.icon-cw:before { content: '\e80c'; } /* '' */
|
||||
.icon-arrows-cw:before { content: '\e804'; } /* '' */
|
||||
.icon-mail:before { content: '\2709'; } /* '✉' */
|
||||
.icon-exchange:before { content: '\e805'; } /* '' */
|
||||
.icon-pencil:before { content: '\270e'; } /* '✎' */
|
||||
.icon-plus-circled:before { content: '\2795'; } /* '➕' */
|
||||
.icon-asl:before { content: '\e0ad'; } /* '' */
|
||||
.icon-eye:before { content: '\e70a'; } /* '' */
|
||||
.icon-tags:before { content: '\e70d'; } /* '' */
|
||||
.icon-chat:before { content: '\e720'; } /* '' */
|
||||
.icon-trash:before { content: '\e729'; } /* '' */
|
||||
.icon-basket:before { content: '\e73d'; } /* '' */
|
||||
.icon-puzzle:before { content: '\e7b6'; } /* '' */
|
||||
.icon-language:before { content: '\e800'; } /* '' */
|
||||
.icon-signal:before { content: '\e801'; } /* '' */
|
||||
.icon-crop:before { content: '\f125'; } /* '' */
|
||||
.icon-check:before { content: '\e81f'; } /* '' */
|
||||
.icon-check-empty:before { content: '\e820'; } /* '' */
|
||||
.icon-tasks:before { content: '\f0ae'; } /* '' */
|
||||
.icon-filter:before { content: '\f0b0'; } /* '' */
|
||||
.icon-sitemap:before { content: '\f0e8'; } /* '' */
|
||||
.icon-search:before { content: '\e811'; } /* '' */
|
||||
.icon-users:before { content: '\e802'; } /* '' */
|
||||
.icon-tools:before { content: '\e803'; } /* '' */
|
||||
.icon-arrows-cw:before { content: '\e804'; } /* '' */
|
||||
.icon-exchange:before { content: '\e805'; } /* '' */
|
||||
.icon-folder-open:before { content: '\e806'; } /* '' */
|
||||
.icon-brush:before { content: '\e807'; } /* '' */
|
||||
.icon-flow-branch:before { content: '\e808'; } /* '' */
|
||||
.icon-menu:before { content: '\e809'; } /* '' */
|
||||
.icon-code:before { content: '\e80a'; } /* '' */
|
||||
.icon-user-add:before { content: '\e80b'; } /* '' */
|
||||
.icon-help-circled:before { content: '\e81a'; } /* '' */
|
||||
.icon-info-circled-1:before { content: '\e817'; } /* '' */
|
||||
.icon-cw:before { content: '\e80c'; } /* '' */
|
||||
.icon-group:before { content: '\e80d'; } /* '' */
|
||||
.icon-home:before { content: '\e80e'; } /* '' */
|
||||
.icon-flag:before { content: '\e81c'; } /* '' */
|
||||
.icon-equalizer:before { content: '\e80f'; } /* '' */
|
||||
.icon-mail-1:before { content: '\e810'; } /* '' */
|
||||
.icon-search:before { content: '\e811'; } /* '' */
|
||||
.icon-move:before { content: '\e812'; } /* '' */
|
||||
.icon-upload:before { content: '\e813'; } /* '' */
|
||||
.icon-upload-cloud:before { content: '\e814'; } /* '' */
|
||||
.icon-tools:before { content: '\e803'; } /* '' */
|
||||
.icon-hourglass:before { content: '\e81e'; } /* '' */
|
||||
.icon-network:before { content: '\e816'; } /* '' */
|
||||
.icon-brush:before { content: '\e807'; } /* '' */
|
||||
.icon-language:before { content: '\e800'; } /* '' */
|
||||
.icon-key:before { content: '\e815'; } /* '' */
|
||||
.icon-flow-branch:before { content: '\e808'; } /* '' */
|
||||
.icon-puzzle:before { content: '\e7b6'; } /* '' */
|
||||
.icon-mail-1:before { content: '\e810'; } /* '' */
|
||||
.icon-equalizer:before { content: '\e80f'; } /* '' */
|
||||
.icon-users:before { content: '\e802'; } /* '' */
|
||||
.icon-group:before { content: '\e80d'; } /* '' */
|
||||
.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
|
||||
.icon-network:before { content: '\e816'; } /* '' */
|
||||
.icon-info-circled-1:before { content: '\e817'; } /* '' */
|
||||
.icon-calendar:before { content: '\e818'; } /* '' */
|
||||
.icon-ok:before { content: '\e819'; } /* '' */
|
||||
.icon-help-circled:before { content: '\e81a'; } /* '' */
|
||||
.icon-logout:before { content: '\e81b'; } /* '' */
|
||||
.icon-flag:before { content: '\e81c'; } /* '' */
|
||||
.icon-spin6:before { content: '\e81d'; } /* '' */
|
||||
.icon-hourglass:before { content: '\e81e'; } /* '' */
|
||||
.icon-check:before { content: '\e81f'; } /* '' */
|
||||
.icon-check-empty:before { content: '\e820'; } /* '' */
|
||||
.icon-cancel-circled:before { content: '\e821'; } /* '' */
|
||||
.icon-cancel:before { content: '\e822'; } /* '' */
|
||||
.icon-plus:before { content: '\e823'; } /* '' */
|
||||
.icon-ok-circled:before { content: '\e824'; } /* '' */
|
||||
.icon-zoom-in:before { content: '\e827'; } /* '' */
|
||||
.icon-zoom-out:before { content: '\e828'; } /* '' */
|
||||
.icon-tasks:before { content: '\f0ae'; } /* '' */
|
||||
.icon-filter:before { content: '\f0b0'; } /* '' */
|
||||
.icon-mail-alt:before { content: '\f0e0'; } /* '' */
|
||||
.icon-sitemap:before { content: '\f0e8'; } /* '' */
|
||||
.icon-crop:before { content: '\f125'; } /* '' */
|
||||
.icon-picture:before { content: '🌄'; } /* '\1f304' */
|
||||
.icon-user:before { content: '👤'; } /* '\1f464' */
|
||||
.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
|
||||
.icon-lock:before { content: '🔒'; } /* '\1f512' */
|
||||
.icon-link:before { content: '🔗'; } /* '\1f517' */
|
||||
.icon-wrench:before { content: '🔧'; } /* '\1f527' */
|
||||
.icon-clock:before { content: '🕔'; } /* '\1f554' */
|
||||
.icon-block:before { content: '🚫'; } /* '\1f6ab' */
|
|
@ -1,10 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<meta charset="UTF-8"><style type="text/css">/*
|
||||
<head><!--[if lt IE 9]><script language="javascript" type="text/javascript" src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
|
||||
<meta charset="UTF-8"><style>/*
|
||||
* Bootstrap v2.2.1
|
||||
*
|
||||
* Copyright 2012 Twitter, Inc
|
||||
|
@ -232,10 +229,7 @@ body {
|
|||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="css/fontello.css">
|
||||
<link rel="stylesheet" href="css/animation.css">
|
||||
<!--[if IE 7]>
|
||||
<link rel="stylesheet" href="css/fontello-ie7.css">
|
||||
<![endif]-->
|
||||
<link rel="stylesheet" href="css/animation.css"><!--[if IE 7]><link rel="stylesheet" href="css/fontello-ie7.css"><![endif]-->
|
||||
<script>
|
||||
function toggleCodes(on) {
|
||||
var obj = document.getElementById('icons');
|
||||
|
@ -261,93 +255,104 @@ body {
|
|||
</div>
|
||||
<div id="icons" class="container">
|
||||
<div class="row">
|
||||
<div title="Code: 0xe81d" class="the-icons span3"><i class="icon-spin6 animate-spin"></i> <span class="i-name">icon-spin6</span><span class="i-code">0xe81d</span></div>
|
||||
<div title="Code: 0xe0ad" class="the-icons span3"><i class="icon-asl"></i> <span class="i-name">icon-asl</span><span class="i-code">0xe0ad</span></div>
|
||||
<div title="Code: 0xf0e0" class="the-icons span3"><i class="icon-mail-alt"></i> <span class="i-name">icon-mail-alt</span><span class="i-code">0xf0e0</span></div>
|
||||
<div title="Code: 0x2605" class="the-icons span3"><i class="icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0x2605</span></div>
|
||||
<div title="Code: 0x2606" class="the-icons span3"><i class="icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0x2606</span></div>
|
||||
<div title="Code: 0x2699" class="the-icons span3"><i class="icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0x2699</span></div>
|
||||
<div title="Code: 0x26ef" class="the-icons span3"><i class="icon-cog-alt"></i> <span class="i-name">icon-cog-alt</span><span class="i-code">0x26ef</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0x2606" class="the-icons span3"><i class="icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0x2606</span></div>
|
||||
<div title="Code: 0x1f464" class="the-icons span3"><i class="icon-user"></i> <span class="i-name">icon-user</span><span class="i-code">0x1f464</span></div>
|
||||
<div title="Code: 0x1f304" class="the-icons span3"><i class="icon-picture"></i> <span class="i-name">icon-picture</span><span class="i-code">0x1f304</span></div>
|
||||
<div title="Code: 0x2709" class="the-icons span3"><i class="icon-mail"></i> <span class="i-name">icon-mail</span><span class="i-code">0x2709</span></div>
|
||||
<div title="Code: 0x270e" class="the-icons span3"><i class="icon-pencil"></i> <span class="i-name">icon-pencil</span><span class="i-code">0x270e</span></div>
|
||||
<div title="Code: 0x2795" class="the-icons span3"><i class="icon-plus-circled"></i> <span class="i-name">icon-plus-circled</span><span class="i-code">0x2795</span></div>
|
||||
<div title="Code: 0xe0ad" class="the-icons span3"><i class="icon-asl"></i> <span class="i-name">icon-asl</span><span class="i-code">0xe0ad</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe70a" class="the-icons span3"><i class="icon-eye"></i> <span class="i-name">icon-eye</span><span class="i-code">0xe70a</span></div>
|
||||
<div title="Code: 0xe70d" class="the-icons span3"><i class="icon-tags"></i> <span class="i-name">icon-tags</span><span class="i-code">0xe70d</span></div>
|
||||
<div title="Code: 0xe720" class="the-icons span3"><i class="icon-chat"></i> <span class="i-name">icon-chat</span><span class="i-code">0xe720</span></div>
|
||||
<div title="Code: 0xe729" class="the-icons span3"><i class="icon-trash"></i> <span class="i-name">icon-trash</span><span class="i-code">0xe729</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe73d" class="the-icons span3"><i class="icon-basket"></i> <span class="i-name">icon-basket</span><span class="i-code">0xe73d</span></div>
|
||||
<div title="Code: 0xe7b6" class="the-icons span3"><i class="icon-puzzle"></i> <span class="i-name">icon-puzzle</span><span class="i-code">0xe7b6</span></div>
|
||||
<div title="Code: 0xe800" class="the-icons span3"><i class="icon-language"></i> <span class="i-name">icon-language</span><span class="i-code">0xe800</span></div>
|
||||
<div title="Code: 0xe801" class="the-icons span3"><i class="icon-signal"></i> <span class="i-name">icon-signal</span><span class="i-code">0xe801</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe802" class="the-icons span3"><i class="icon-users"></i> <span class="i-name">icon-users</span><span class="i-code">0xe802</span></div>
|
||||
<div title="Code: 0xe803" class="the-icons span3"><i class="icon-tools"></i> <span class="i-name">icon-tools</span><span class="i-code">0xe803</span></div>
|
||||
<div title="Code: 0xe804" class="the-icons span3"><i class="icon-arrows-cw"></i> <span class="i-name">icon-arrows-cw</span><span class="i-code">0xe804</span></div>
|
||||
<div title="Code: 0xe805" class="the-icons span3"><i class="icon-exchange"></i> <span class="i-name">icon-exchange</span><span class="i-code">0xe805</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe806" class="the-icons span3"><i class="icon-folder-open"></i> <span class="i-name">icon-folder-open</span><span class="i-code">0xe806</span></div>
|
||||
<div title="Code: 0xe807" class="the-icons span3"><i class="icon-brush"></i> <span class="i-name">icon-brush</span><span class="i-code">0xe807</span></div>
|
||||
<div title="Code: 0xe808" class="the-icons span3"><i class="icon-flow-branch"></i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe808</span></div>
|
||||
<div title="Code: 0xe809" class="the-icons span3"><i class="icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xe809</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe80a" class="the-icons span3"><i class="icon-code"></i> <span class="i-name">icon-code</span><span class="i-code">0xe80a</span></div>
|
||||
<div title="Code: 0xe80b" class="the-icons span3"><i class="icon-user-add"></i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80b</span></div>
|
||||
<div title="Code: 0xe80c" class="the-icons span3"><i class="icon-cw"></i> <span class="i-name">icon-cw</span><span class="i-code">0xe80c</span></div>
|
||||
<div title="Code: 0xe80d" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span><span class="i-code">0xe80d</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe80e" class="the-icons span3"><i class="icon-home"></i> <span class="i-name">icon-home</span><span class="i-code">0xe80e</span></div>
|
||||
<div title="Code: 0xe80f" class="the-icons span3"><i class="icon-equalizer"></i> <span class="i-name">icon-equalizer</span><span class="i-code">0xe80f</span></div>
|
||||
<div title="Code: 0xe810" class="the-icons span3"><i class="icon-mail-1"></i> <span class="i-name">icon-mail-1</span><span class="i-code">0xe810</span></div>
|
||||
<div title="Code: 0xe811" class="the-icons span3"><i class="icon-search"></i> <span class="i-name">icon-search</span><span class="i-code">0xe811</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe812" class="the-icons span3"><i class="icon-move"></i> <span class="i-name">icon-move</span><span class="i-code">0xe812</span></div>
|
||||
<div title="Code: 0xe813" class="the-icons span3"><i class="icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe813</span></div>
|
||||
<div title="Code: 0xe814" class="the-icons span3"><i class="icon-upload-cloud"></i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe814</span></div>
|
||||
<div title="Code: 0xe815" class="the-icons span3"><i class="icon-key"></i> <span class="i-name">icon-key</span><span class="i-code">0xe815</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe816" class="the-icons span3"><i class="icon-network"></i> <span class="i-name">icon-network</span><span class="i-code">0xe816</span></div>
|
||||
<div title="Code: 0xe817" class="the-icons span3"><i class="icon-info-circled-1"></i> <span class="i-name">icon-info-circled-1</span><span class="i-code">0xe817</span></div>
|
||||
<div title="Code: 0xe818" class="the-icons span3"><i class="icon-calendar"></i> <span class="i-name">icon-calendar</span><span class="i-code">0xe818</span></div>
|
||||
<div title="Code: 0xe819" class="the-icons span3"><i class="icon-ok"></i> <span class="i-name">icon-ok</span><span class="i-code">0xe819</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe81a" class="the-icons span3"><i class="icon-help-circled"></i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81a</span></div>
|
||||
<div title="Code: 0xe81b" class="the-icons span3"><i class="icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe81b</span></div>
|
||||
<div title="Code: 0xe81c" class="the-icons span3"><i class="icon-flag"></i> <span class="i-name">icon-flag</span><span class="i-code">0xe81c</span></div>
|
||||
<div title="Code: 0xe81d" class="the-icons span3"><i class="icon-spin6 animate-spin"></i> <span class="i-name">icon-spin6</span><span class="i-code">0xe81d</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe81e" class="the-icons span3"><i class="icon-hourglass"></i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe81e</span></div>
|
||||
<div title="Code: 0xe81f" class="the-icons span3"><i class="icon-check"></i> <span class="i-name">icon-check</span><span class="i-code">0xe81f</span></div>
|
||||
<div title="Code: 0xe820" class="the-icons span3"><i class="icon-check-empty"></i> <span class="i-name">icon-check-empty</span><span class="i-code">0xe820</span></div>
|
||||
<div title="Code: 0xe821" class="the-icons span3"><i class="icon-cancel-circled"></i> <span class="i-name">icon-cancel-circled</span><span class="i-code">0xe821</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0x2795" class="the-icons span3"><i class="icon-plus-circled"></i> <span class="i-name">icon-plus-circled</span><span class="i-code">0x2795</span></div>
|
||||
<div title="Code: 0x1f517" class="the-icons span3"><i class="icon-link"></i> <span class="i-name">icon-link</span><span class="i-code">0x1f517</span></div>
|
||||
<div title="Code: 0xe822" class="the-icons span3"><i class="icon-cancel"></i> <span class="i-name">icon-cancel</span><span class="i-code">0xe822</span></div>
|
||||
<div title="Code: 0xe823" class="the-icons span3"><i class="icon-plus"></i> <span class="i-name">icon-plus</span><span class="i-code">0xe823</span></div>
|
||||
<div title="Code: 0xe824" class="the-icons span3"><i class="icon-ok-circled"></i> <span class="i-name">icon-ok-circled</span><span class="i-code">0xe824</span></div>
|
||||
<div title="Code: 0xe827" class="the-icons span3"><i class="icon-zoom-in"></i> <span class="i-name">icon-zoom-in</span><span class="i-code">0xe827</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe828" class="the-icons span3"><i class="icon-zoom-out"></i> <span class="i-name">icon-zoom-out</span><span class="i-code">0xe828</span></div>
|
||||
<div title="Code: 0xf0ae" class="the-icons span3"><i class="icon-tasks"></i> <span class="i-name">icon-tasks</span><span class="i-code">0xf0ae</span></div>
|
||||
<div title="Code: 0xf0b0" class="the-icons span3"><i class="icon-filter"></i> <span class="i-name">icon-filter</span><span class="i-code">0xf0b0</span></div>
|
||||
<div title="Code: 0xf0e0" class="the-icons span3"><i class="icon-mail-alt"></i> <span class="i-name">icon-mail-alt</span><span class="i-code">0xf0e0</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xf0e8" class="the-icons span3"><i class="icon-sitemap"></i> <span class="i-name">icon-sitemap</span><span class="i-code">0xf0e8</span></div>
|
||||
<div title="Code: 0xf125" class="the-icons span3"><i class="icon-crop"></i> <span class="i-name">icon-crop</span><span class="i-code">0xf125</span></div>
|
||||
<div title="Code: 0x1f304" class="the-icons span3"><i class="icon-picture"></i> <span class="i-name">icon-picture</span><span class="i-code">0x1f304</span></div>
|
||||
<div title="Code: 0x1f464" class="the-icons span3"><i class="icon-user"></i> <span class="i-name">icon-user</span><span class="i-code">0x1f464</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0x1f500" class="the-icons span3"><i class="icon-shuffle"></i> <span class="i-name">icon-shuffle</span><span class="i-code">0x1f500</span></div>
|
||||
<div title="Code: 0x1f512" class="the-icons span3"><i class="icon-lock"></i> <span class="i-name">icon-lock</span><span class="i-code">0x1f512</span></div>
|
||||
<div title="Code: 0xe70a" class="the-icons span3"><i class="icon-eye"></i> <span class="i-name">icon-eye</span><span class="i-code">0xe70a</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe70d" class="the-icons span3"><i class="icon-tags"></i> <span class="i-name">icon-tags</span><span class="i-code">0xe70d</span></div>
|
||||
<div title="Code: 0xe80a" class="the-icons span3"><i class="icon-code"></i> <span class="i-name">icon-code</span><span class="i-code">0xe80a</span></div>
|
||||
<div title="Code: 0x270e" class="the-icons span3"><i class="icon-pencil"></i> <span class="i-name">icon-pencil</span><span class="i-code">0x270e</span></div>
|
||||
<div title="Code: 0xe720" class="the-icons span3"><i class="icon-chat"></i> <span class="i-name">icon-chat</span><span class="i-code">0xe720</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe729" class="the-icons span3"><i class="icon-trash"></i> <span class="i-name">icon-trash</span><span class="i-code">0xe729</span></div>
|
||||
<div title="Code: 0xe806" class="the-icons span3"><i class="icon-folder-open"></i> <span class="i-name">icon-folder-open</span><span class="i-code">0xe806</span></div>
|
||||
<div title="Code: 0xe809" class="the-icons span3"><i class="icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xe809</span></div>
|
||||
<div title="Code: 0x2699" class="the-icons span3"><i class="icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0x2699</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0x26ef" class="the-icons span3"><i class="icon-cog-alt"></i> <span class="i-name">icon-cog-alt</span><span class="i-code">0x26ef</span></div>
|
||||
<div title="Code: 0x1f517" class="the-icons span3"><i class="icon-link"></i> <span class="i-name">icon-link</span><span class="i-code">0x1f517</span></div>
|
||||
<div title="Code: 0x1f527" class="the-icons span3"><i class="icon-wrench"></i> <span class="i-name">icon-wrench</span><span class="i-code">0x1f527</span></div>
|
||||
<div title="Code: 0xe73d" class="the-icons span3"><i class="icon-basket"></i> <span class="i-name">icon-basket</span><span class="i-code">0xe73d</span></div>
|
||||
<div title="Code: 0xe81b" class="the-icons span3"><i class="icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe81b</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0x1f554" class="the-icons span3"><i class="icon-clock"></i> <span class="i-name">icon-clock</span><span class="i-code">0x1f554</span></div>
|
||||
<div title="Code: 0x1f6ab" class="the-icons span3"><i class="icon-block"></i> <span class="i-name">icon-block</span><span class="i-code">0x1f6ab</span></div>
|
||||
<div title="Code: 0xe812" class="the-icons span3"><i class="icon-move"></i> <span class="i-name">icon-move</span><span class="i-code">0xe812</span></div>
|
||||
<div title="Code: 0xe80c" class="the-icons span3"><i class="icon-cw"></i> <span class="i-name">icon-cw</span><span class="i-code">0xe80c</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe804" class="the-icons span3"><i class="icon-arrows-cw"></i> <span class="i-name">icon-arrows-cw</span><span class="i-code">0xe804</span></div>
|
||||
<div title="Code: 0x2709" class="the-icons span3"><i class="icon-mail"></i> <span class="i-name">icon-mail</span><span class="i-code">0x2709</span></div>
|
||||
<div title="Code: 0xe805" class="the-icons span3"><i class="icon-exchange"></i> <span class="i-name">icon-exchange</span><span class="i-code">0xe805</span></div>
|
||||
<div title="Code: 0xe801" class="the-icons span3"><i class="icon-signal"></i> <span class="i-name">icon-signal</span><span class="i-code">0xe801</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xf125" class="the-icons span3"><i class="icon-crop"></i> <span class="i-name">icon-crop</span><span class="i-code">0xf125</span></div>
|
||||
<div title="Code: 0xe81f" class="the-icons span3"><i class="icon-check"></i> <span class="i-name">icon-check</span><span class="i-code">0xe81f</span></div>
|
||||
<div title="Code: 0xe820" class="the-icons span3"><i class="icon-check-empty"></i> <span class="i-name">icon-check-empty</span><span class="i-code">0xe820</span></div>
|
||||
<div title="Code: 0xf0ae" class="the-icons span3"><i class="icon-tasks"></i> <span class="i-name">icon-tasks</span><span class="i-code">0xf0ae</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xf0b0" class="the-icons span3"><i class="icon-filter"></i> <span class="i-name">icon-filter</span><span class="i-code">0xf0b0</span></div>
|
||||
<div title="Code: 0xf0e8" class="the-icons span3"><i class="icon-sitemap"></i> <span class="i-name">icon-sitemap</span><span class="i-code">0xf0e8</span></div>
|
||||
<div title="Code: 0xe811" class="the-icons span3"><i class="icon-search"></i> <span class="i-name">icon-search</span><span class="i-code">0xe811</span></div>
|
||||
<div title="Code: 0xe80b" class="the-icons span3"><i class="icon-user-add"></i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80b</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe81a" class="the-icons span3"><i class="icon-help-circled"></i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81a</span></div>
|
||||
<div title="Code: 0xe817" class="the-icons span3"><i class="icon-info-circled-1"></i> <span class="i-name">icon-info-circled-1</span><span class="i-code">0xe817</span></div>
|
||||
<div title="Code: 0xe80e" class="the-icons span3"><i class="icon-home"></i> <span class="i-name">icon-home</span><span class="i-code">0xe80e</span></div>
|
||||
<div title="Code: 0xe81c" class="the-icons span3"><i class="icon-flag"></i> <span class="i-name">icon-flag</span><span class="i-code">0xe81c</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe813" class="the-icons span3"><i class="icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe813</span></div>
|
||||
<div title="Code: 0xe814" class="the-icons span3"><i class="icon-upload-cloud"></i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe814</span></div>
|
||||
<div title="Code: 0xe803" class="the-icons span3"><i class="icon-tools"></i> <span class="i-name">icon-tools</span><span class="i-code">0xe803</span></div>
|
||||
<div title="Code: 0xe81e" class="the-icons span3"><i class="icon-hourglass"></i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe81e</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe816" class="the-icons span3"><i class="icon-network"></i> <span class="i-name">icon-network</span><span class="i-code">0xe816</span></div>
|
||||
<div title="Code: 0xe807" class="the-icons span3"><i class="icon-brush"></i> <span class="i-name">icon-brush</span><span class="i-code">0xe807</span></div>
|
||||
<div title="Code: 0xe800" class="the-icons span3"><i class="icon-language"></i> <span class="i-name">icon-language</span><span class="i-code">0xe800</span></div>
|
||||
<div title="Code: 0xe815" class="the-icons span3"><i class="icon-key"></i> <span class="i-name">icon-key</span><span class="i-code">0xe815</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe808" class="the-icons span3"><i class="icon-flow-branch"></i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe808</span></div>
|
||||
<div title="Code: 0xe7b6" class="the-icons span3"><i class="icon-puzzle"></i> <span class="i-name">icon-puzzle</span><span class="i-code">0xe7b6</span></div>
|
||||
<div title="Code: 0xe810" class="the-icons span3"><i class="icon-mail-1"></i> <span class="i-name">icon-mail-1</span><span class="i-code">0xe810</span></div>
|
||||
<div title="Code: 0xe80f" class="the-icons span3"><i class="icon-equalizer"></i> <span class="i-name">icon-equalizer</span><span class="i-code">0xe80f</span></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div title="Code: 0xe802" class="the-icons span3"><i class="icon-users"></i> <span class="i-name">icon-users</span><span class="i-code">0xe802</span></div>
|
||||
<div title="Code: 0xe80d" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span><span class="i-code">0xe80d</span></div>
|
||||
<div title="Code: 0x1f500" class="the-icons span3"><i class="icon-shuffle"></i> <span class="i-name">icon-shuffle</span><span class="i-code">0x1f500</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div>
|
||||
|
|
Binary file not shown.
|
@ -1,70 +1,77 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Copyright (C) 2013 by original authors @ fontello.com</metadata>
|
||||
<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
|
||||
<defs>
|
||||
<font id="fontello" horiz-adv-x="1000" >
|
||||
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||
<missing-glyph horiz-adv-x="1000" />
|
||||
<glyph glyph-name="spin6" unicode="" d="m855 9c-189-190-520-172-705 13c-190 190-200 494-28 695c11 13 21 26 35 34c36 23 85 18 117-13c30-31 35-76 16-112c-5-9-9-15-16-22c-140-151-145-379-8-516c153-153 407-121 542 34c106 122 142 297 77 451c-83 198-305 291-510 222l0 1c236 82 492-24 588-252c71-167 37-355-72-493c-11-15-23-29-36-42z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="asl" unicode="" d="m1 700q-4 37 15 53t45 5t35-38l53-184q-15-29-14-64q6-30 36-204q7-52 32-82t65-29q47 0 74 37q34-39 83-37t74 41q27-37 71-41t73 27q12 16 20 32t11 37t5 33t1 40l0 38q26-10 61 24q49 45 109 78t98 8q33-24 31-59t-35-55q-61-25-104-82t-67-112t-58-117t-78-93q-21-18-66-18l-350 0q-84 6-105 118z m181-234q-6 45 21 65t56 8t37-48l21-209q4-41-17-63t-46-15t-37 45z m155 70q2 41 32 56t62-1t36-49l8-248q0-59-28-76t-57 4t-30 62z m175 4q4 43 37 55t62-7t30-52l-6-254q-5-47-34-66t-54 1t-29 67z" horiz-adv-x="979" />
|
||||
<glyph glyph-name="mail-alt" unicode="" d="m1000 454v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v443q25-28 56-49q202-137 278-192q32-24 51-37t53-27t61-13h2q28 0 61 13t53 27t51 37q95 68 278 192q32 22 56 49z m0 164q0-44-27-84t-68-69q-210-146-262-181q-5-4-23-17t-30-22t-29-18t-33-15t-27-5h-2q-12 0-27 5t-33 15t-29 18t-30 22t-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77q0 43 23 72t66 29h822q36 0 62-26t27-63z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="star" unicode="★" d="m929 489q0-12-15-27l-203-197l48-279q1-4 1-12q0-11-6-19t-17-9q-10 0-22 7l-251 132l-250-132q-13-7-23-7q-11 0-17 9t-6 19q0 4 1 12l48 279l-203 197q-14 15-14 27q0 21 31 26l280 40l126 254q11 23 27 23t28-23l125-254l280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="star-empty" unicode="☆" d="m634 290l171 165l-235 35l-106 213l-105-213l-236-35l171-165l-41-235l211 111l211-111z m295 199q0-12-15-27l-203-197l48-279q1-4 1-12q0-28-23-28q-10 0-22 7l-251 132l-250-132q-13-7-23-7q-11 0-17 9t-6 19q0 4 1 12l48 279l-203 197q-14 15-14 27q0 21 31 26l280 40l126 254q11 23 27 23t28-23l125-254l280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="user" unicode="👤" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61t15 60t24 55t34 45t48 30t62 11q5 0 24-12t41-27t60-27t75-12t74 12t61 27t41 27t24 12q34 0 62-11t48-30t34-45t24-55t15-60t8-61t2-58z m-179 498q0-88-63-151t-151-63t-152 63t-62 151t62 152t152 63t151-63t63-152z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="picture" unicode="🌄" d="m357 529q0-45-31-76t-76-32t-76 32t-31 76t31 75t76 32t76-32t31-75z m572-215v-250h-786v107l178 179l90-89l285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101l101 101q10 11 10 25q0 15-10 26l-51 50q-10 11-25 11q-15 0-25-11l-101-101l-101 101q-11 11-26 11q-15 0-25-11l-50-50q-11-11-11-26q0-14 11-25l101-101l-101-101q-11-11-11-25q0-15 11-26l50-50q10-11 25-11q15 0 26 11l101 101l101-101q10-11 25-11q15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="plus-circled" unicode="➕" d="m679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-11h143v-142q0-15 11-25t25-11h71q15 0 25 11t11 25v142h143q14 0 25 11t11 25z m178 36q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="link" unicode="🔗" d="m812 171q0 23-15 38l-116 116q-16 16-38 16q-24 0-40-18q1-1 10-10t12-12t9-11t7-14t2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7t-11 9t-12 12t-10 10q-19-17-19-40q0-23 16-38l115-116q15-15 38-15q22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16q-22 0-38-15l-82-82q-16-15-16-37q0-22 16-38l116-116q15-15 38-15q23 0 40 17q-2 2-11 11t-12 12t-8 10t-7 14t-2 16q0 22 15 38t38 15q9 0 16-2t14-7t10-8t12-12t11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47q-68 0-114 48l-115 115q-46 47-46 114q0 68 49 116l-49 49q-48-49-116-49q-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46q67 0 114-47l114-116q47-46 47-113q0-69-49-117l49-49q48 49 116 49q67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="lock" unicode="🔒" d="m179 421h285v108q0 59-42 101t-101 41t-101-41t-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74t177-74t73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" />
|
||||
<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197q34-58 34-125q0-104-73-177t-177-73t-177 73t-73 177q0 67 34 125q-128-65-213-197q75-114 187-182t242-68t242 68t187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8t19 8t8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38q-78-129-210-206t-279-77t-279 77t-210 206q-11 19-11 38t11 39q78 128 210 205t279 78t279-78t210-205q11-20 11-39z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="tags" unicode="" d="m250 600q0 30-21 51t-50 20t-51-20t-21-51t21-50t51-21t50 21t21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21q-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z m215 0q0-30-21-51l-274-274q-22-21-51-21q-20 0-33 8t-29 25l262 262q21 21 21 51q0 29-21 50l-399 399q-21 21-57 36t-65 15h125q29 0 65-15t57-36l399-399q21-21 21-50z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="code" unicode="" d="m344 69l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220l219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13z m367-364l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219l-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="pencil" unicode="✎" d="m203-7l50 51l-131 131l-51-51v-60h72v-71h60z m291 518q0 12-12 12q-5 0-9-4l-303-302q-4-4-4-10q0-12 13-12q5 0 9 4l303 302q3 4 3 10z m-30 107l232-232l-464-465h-232v233z m381-54q0-29-20-50l-93-93l-232 233l93 92q20 21 50 21q29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="chat" unicode="" d="m786 421q0-77-53-143t-143-104t-197-38q-48 0-98 9q-70-49-155-72q-21-5-48-9h-2q-6 0-12 5t-6 12q-1 1-1 3t1 4t1 3l1 3t2 3t2 3t3 3t2 2q3 3 13 14t15 16t12 17t14 21t11 25q-69 40-108 98t-40 125q0 78 53 144t143 104t197 38t197-38t143-104t53-144z m214-142q0-67-40-126t-108-98q5-14 11-25t14-21t13-16t14-17t13-14q0 0 2-2t3-3t2-3t2-3l1-3t1-3t1-4t-1-3q-2-8-7-13t-13-4q-27 4-48 9q-85 23-155 72q-50-9-98-9q-151 0-263 74q32-3 49-3q90 0 172 25t148 72q69 52 107 119t37 141q0 43-13 85q72-39 114-99t42-128z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15t6-5h464q2 0 6 5t8 15t4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="folder-open" unicode="" d="m1049 319q0-18-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24z m-192 192v-90h-464q-53 0-110-26t-92-67l-188-221l-2-3q0 2-1 7t0 7v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q51 0 88-37t37-88z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="cog" unicode="⚙" d="m571 350q0 59-41 101t-101 42t-101-42t-42-101t42-101t101-42t101 42t41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51q19-27 59-77q6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21q-9-76-16-104q-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5q-8 0-14 6q-70 64-92 94q-4 5-4 13q0 6 5 12q8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51q-23 32-60 77q-6 7-6 14q0 5 5 12q15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21q9 76 17 104q3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5q7 0 14-5q72-67 92-95q4-5 4-13q0-6-4-12q-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="cog-alt" unicode="⛯" d="m500 350q0 59-42 101t-101 42t-101-42t-42-101t42-101t101-42t101 42t42 101z m429-286q0 29-22 51t-50 21t-50-21t-21-51q0-29 21-50t50-21t51 21t21 50z m0 572q0 29-22 50t-50 21t-50-21t-21-50q0-30 21-51t50-21t51 21t21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42q19-27 50-64q4-6 4-11q0-7-4-11q-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17q-6-60-13-87q-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4q-6 0-12 4q-80 75-80 90q0 5 4 10q5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42q-19 27-50 64q-4 6-4 11q0 7 4 11q12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18q6 60 13 86q3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4q7 0 12-4q81-75 81-90q0-5-4-10q-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17q-6-15-16-29q28-63 28-77q0-2-2-4q-68-40-69-40q-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40q-3 2-3 4q0 14 29 77q-10 14-17 29q-83 8-83 17v78q0 9 83 18q7 16 17 29q-29 63-29 77q0 2 3 4q2 1 19 11t33 19t17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39q2-2 2-4q0-14-28-77q9-13 16-29q83-9 83-18z m0 572v-78q0-9-83-18q-6-15-16-29q28-63 28-77q0-2-2-4q-68-39-69-39q-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39q-3 2-3 4q0 14 29 77q-10 14-17 29q-83 9-83 18v78q0 9 83 17q7 16 17 29q-29 63-29 77q0 2 3 4q2 1 19 11t33 19t17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39q2-2 2-4q0-14-28-77q9-13 16-29q83-8 83-17z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="wrench" unicode="🔧" d="m214 29q0 14-10 25t-25 10t-26-10t-10-25t10-26t26-10t25 10t10 26z m360 234l-381-381q-21-20-50-20q-29 0-51 20l-59 61q-21 20-21 50q0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59q-27-75-92-122t-144-46q-104 0-177 73t-73 177t73 176t177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45t40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="basket" unicode="" d="m357-7q0-30-21-51t-50-21t-51 21t-21 51t21 50t51 21t50-21t21-50z m500 0q0-30-21-51t-50-21t-51 21t-21 51t21 50t51 21t50-21t21-50z m72 607v-286q0-13-9-23t-23-12l-583-68q1-4 3-12t3-15t1-13q0-8-13-35h513q15 0 26-11t10-25t-10-25t-26-11h-571q-14 0-25 11t-11 25q0 8 6 22t17 33t11 21l-98 460h-114q-15 0-25 10t-11 25t11 26t25 10h143q9 0 16-3t11-9t7-14t4-15t3-16t3-14h670q14 0 25-11t11-25z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14t-2-14t-5-11t-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15t-2-13t-5-11t-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0t7-2t4-3t4-5t1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10t-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10t25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="clock" unicode="🕔" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111t-152 41t-153-41t-110-111t-41-152t41-152t110-111t153-41t152 41t110 111t41 152z m125 0q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="block" unicode="🚫" d="m732 352q0 90-48 164l-421-420q76-50 166-50q62 0 118 25t96 65t65 97t24 119z m-557-167l421 421q-75 50-167 50q-83 0-153-40t-110-112t-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137t-137-92t-166-34t-167 34t-137 92t-91 137t-34 168t34 167t91 137t137 91t167 34t166-34t137-91t91-137t34-167z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="move" unicode="" d="m1000 350q0-14-11-25l-142-143q-11-11-26-11t-25 11t-10 25v72h-215v-215h72q14 0 25-10t11-25t-11-26l-143-142q-10-11-25-11t-25 11l-143 142q-11 11-11 26t11 25t25 10h72v215h-215v-72q0-14-10-25t-25-11t-26 11l-142 143q-11 11-11 25t11 25l142 143q11 11 26 11t25-11t10-25v-72h215v215h-72q-14 0-25 10t-11 25t11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25t-25-10h-72v-215h215v72q0 14 10 25t25 11t26-11l142-143q11-10 11-25z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23q-10 22 7 38l77 77q-82 77-194 77q-58 0-111-23t-91-61t-62-91t-22-111t22-111t62-91t91-61t111-23q66 0 125 29t100 82q4 6 13 7q8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92t-92 137t-34 166t34 166t92 137t136 92t167 34q82 0 158-31t137-88l72 72q16 18 39 8q22-9 22-33z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4q-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11t-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25t-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66q5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25t10 25l77 77q-82 77-194 77q-75 0-140-37t-104-99q-6-10-29-66q-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11t10-25z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="mail" unicode="✉" d="m929 11v428q-18-20-39-37q-149-114-238-188q-28-24-46-38t-48-27t-57-13h-2q-26 0-57 13t-48 27t-46 38q-88 74-238 188q-21 17-39 37v-428q0-8 6-13t12-5h822q7 0 12 5t6 13z m0 586v14t-1 7t-1 7t-3 5t-5 4t-8 2h-822q-7 0-12-6t-6-12q0-94 82-159q108-85 224-177q4-2 20-16t25-21t25-18t28-15t24-5h2q11 0 24 5t28 15t25 18t25 21t20 16q116 92 224 177q30 24 56 65t26 73z m71 21v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v607q0 37 26 63t63 26h822q37 0 63-26t26-63z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13q0 8 5 13l179 178q5 5 12 5q8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="signal" unicode="" d="m143 46v-107q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v107q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 72v-179q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v179q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 143v-322q0-8-5-13t-12-5h-108q-7 0-12 5t-5 13v322q0 8 5 13t12 5h108q7 0 12-5t5-13z m215 214v-536q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v536q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 286v-822q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v822q0 8 5 13t13 5h107q8 0 13-5t5-13z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="crop" unicode="" d="m311 136h332v332z m-25 25l332 332h-332v-332z m643-43v-107q0-8-5-13t-13-5h-125v-125q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v125h-482q-8 0-13 5t-5 13v482h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125v125q0 7 5 12t13 5h107q8 0 13-5t5-12v-125h475l137 138q5 5 13 5t13-5q5-6 5-13t-5-13l-138-137v-475h125q8 0 13-5t5-13z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14q9-4 10-13q2-10-5-16l-27-28q-6-5-13-5q-2 0-5 1q-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6q3 0 7-2q11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147l361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="check-empty" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="filter" unicode="" d="m783 685q9-23-8-39l-275-275v-414q0-23-22-33q-7-3-14-3q-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39q9 22 33 22h714q23 0 33-22z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="search" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42q-128 0-223 95t-95 223t90 219t218 91t224-95t96-223q0-88-46-162z m-678 358q0-88 68-156t156-68t151 63t63 153q0 88-68 155t-156 67t-151-63t-63-151z" horiz-adv-x="789" />
|
||||
<glyph glyph-name="user-add" unicode="" d="m620 128q180-64 180-122l0-106l-800 0l0 202q36 14 82 26q94 34 129 69t35 95q0 22-23 48t-31 74q-2 12-23 25t-25 61q0 16 5 26t9 12l4 4q-8 50-12 88q-6 54 40 112t160 58t160-58t42-112l-14-88q18-8 18-42q-2-28-9-43t-14-17t-14-8t-9-18q-10-46-33-73t-23-49q0-60 36-95t130-69z m230 272l150 0l0-100l-150 0l0-150l-100 0l0 150l-150 0l0 100l150 0l0 150l100 0l0-150z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="help-circled" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78q0 78-54 116q-52 38-134 38q-64 0-104-26q-68-42-72-146l0-4l110 0l0 4q0 26 16 54q16 24 54 24q40 0 52-20q16-20 16-44q0-18-16-40q-8-12-20-20l-6-4q-6-4-16-11t-20-15t-21-17t-17-17q-14-20-18-78l0-8l108 0l0 4q0 12 4 28q6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="info-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m52-152q-42 0-65-24t-23-50q-2-28 15-44t49-16q38 0 61 22t23 54q0 58-60 58z m-120-594q30 0 84 26t106 78l-18 24q-48-36-72-36q-14 0-4 38l42 160q26 96-22 96q-30 0-89-29t-115-75l16-26q52 34 74 34q12 0 0-34l-36-152q-26-104 34-104z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="home" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0l0-310q0-14-1-21t-8-13t-23-6l-204 0l0 310l-204 0l0-310l-194 0q-28 0-35 10t-7 30l0 310l-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
|
||||
<glyph glyph-name="flag" unicode="" d="m874 616q14 6 22-1t0-19q-96-138-164-213t-110-90t-73-2t-60 37t-63 40t-93-4t-139-86l90-352l-100 0l-184 720l92 34q90 66 152 86t98 3t64-51t62-71t79-62t129-20t198 51z" horiz-adv-x="900" />
|
||||
<glyph glyph-name="upload" unicode="" d="m500 776l260-244l-164 0l0-256l-190 0l0 256l-166 0z m468-578q18-10 27-32t3-40l-28-154q-4-20-22-33t-40-13l-816 0q-22 0-40 13t-22 33l-28 154q-10 48 32 72l158 108l98 0l-170-130l178 0q8 0 12-8l40-110l300 0l40 110q8 8 12 8l178 0l-170 130l98 0z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="upload-cloud" unicode="" d="m760 494q100 0 170-68t70-166t-70-166t-170-68l-190 0l0 190l106 0l-176 230l-174-230l104 0l0-190l-248 0q-74 0-128 52t-54 124q0 74 53 126t129 52q14 0 20-2q-2 12-2 38q0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="tools" unicode="" d="m155 506q-8-8-11-22t-3-25t-2-11q-2-2-17-15t-19-17q-16-14-28 4l-70 76q-11 12 2 24q2 2 18 14t20 16q6 6 27 6t37 14q14 14 18 38t10 30q2 0 9 7t26 22t41 31q134 90 186 96q122 0 148-2q12 0-8-8q-120-52-152-76q-80-56-36-114q34-46 38-48q8-8-2-14q-2-2-38-35t-38-35q-14-8-18-4q-42 48-71 60t-67-12z m286-26l410-476q18-22-2-38l-48-42q-22-14-38 4l-414 472q-8 8 0 20l72 62q12 8 20-2z m554 202q16-104-16-166q-50-88-154-62q-56 12-100-32l-82-78l-68 78l68 70q24 24 31 53t6 65t5 58q12 56 140 112q12 6 18-3t2-15q-12-12-46-80q-14-10-12-35t40-53q58-40 96 22q6 12 26 41t22 33q4 10 13 9t11-17z m-858-684l254 248l76-86l-246-242q-20-20-38-4l-46 46q-22 18 0 38z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="hourglass" unicode="" d="m560 622q0-44-48-96t-97-99t-49-77t49-76t97-97t48-97l0-118q0-34-86-73t-194-39t-194 39t-86 73l0 118q0 46 48 97t97 97t49 76t-49 77t-97 99t-48 96l0 118q0 32 87 71t193 39t193-39t87-71l0-118z m-482 112l-18-14q-4-8 4-14q92-52 216-52q132 0 220 50q14 10-16 30q-96 54-202 54q-120 0-204-54z m228-384q0 18 4 33t18 33t20 25t31 31t29 28q92 92 92 122l2 50q-100-54-222-54t-222 54l4-50q0-32 90-122q6-6 22-21t23-22l19-19t17-21t11-20t9-23t3-24q0-10-1-19t-6-18t-8-16t-11-17l-12-15t-15-16t-16-15t-18-16t-17-16q-90-90-90-122l0-66q8 4 66 23t92 43t34 58q0 30 26 30t26-30q0-34 33-58t94-43t67-23l0 66q0 30-92 122q-4 4-21 20t-22 21t-18 19t-18 22t-12 20t-9 23t-2 23z" horiz-adv-x="560" />
|
||||
<glyph glyph-name="network" unicode="" d="m224 504q-22 0-42-10q-48 52-92 128q54 74 128 118q92-38 152-82q-6-16-6-32q0-6 4-22q-62-48-116-104q-16 4-28 4z m-98-98q0-34 20-60q-60-114-80-232q-66 106-66 236q0 110 50 206q38-62 84-112q-8-24-8-38z m336 318q-28 0-50-14q-58 42-114 70q84 30 162 30q120 0 230-62q-76-14-162-50q-26 26-66 26z m146-460q-160 24-290 112q4 20 4 30q0 24-14 52q38 44 98 90q26-20 56-20q14 0 38 8q94-108 134-240q-16-14-26-32z m128-132q38 14 54 60q58 4 108 18q-46-146-166-232q6 48 6 98q0 10-1 28t-1 28z m-150 66q-190-96-304-272q-90 36-158 110q12 144 80 274q6-2 20-2q30 0 52 14q142-98 310-124z m184 492q150-136 150-340q0-22-4-66q-64-18-130-24q-24 56-88 60q-48 146-148 264q10 20 10 42l0 10q100 42 210 54z m-136-544q14-10 32-18q2-18 2-52q0-80-14-144q-86-42-194-42q-58 0-112 12q110 160 286 244z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="brush" unicode="" d="m118 170q38 34 85 29t87-45q42-40 48-87t-30-83q-86-84-228-102q-84-12-80 14q0 4 6 10q52 60 64 145t48 119z m840 646q26-26-148-248t-292-338q-38-38-124-104q-8-6-16 8q-18 34-48 64q-32 32-66 48q-16 6-8 16q64 84 104 122q118 116 344 287t254 145z" horiz-adv-x="962" />
|
||||
<glyph glyph-name="language" unicode="" d="m988 306q30-82-10-176t-134-160q-10 0-12 2t-16 19t-16 19q-2 6 2 10q86 60 117 152t-11 148q-16-38-39-76t-59-80t-86-65t-106-15q-52 6-84 41t-32 93q0 84 60 148q50 50 114 66l-2 100q-140-24-146-24q-6-2-10 4q0 2-5 29t-5 31q-2 2 1 4t7 2l156 28q0 110-2 114q0 8 8 8q46 0 52 2q10 0 10-8l0-104q158 22 164 22q8 4 10-6q0-2 4-23t4-25q4-10-4-12l-176-30l0-102l12 0q86 0 148-36t86-100z m-370-160q28-6 62 6l-4 214q-34-12-60-40q-44-44-44-108q0-66 46-72z m122 28q28 24 58 68t45 79t7 41q-36 18-96 18q-2 0-6-1t-6-1z m-448 382q10-28 53-165t83-261t40-126q0-4-4-4l-86 0q-6 0-6 4l-50 166l-176 0q-48-164-50-166q0-4-6-4l-86 0q-4 0-4 4q10 18 176 552q2 8 10 8l96 0q10 0 10-8z m-130-316l144 0l-72 264z" horiz-adv-x="1001" />
|
||||
<glyph glyph-name="key" unicode="" d="m774 612q20-116-28-215t-150-117q-66-12-130-2l-118-194l-70-12l-104-166q-14-28-46-32l-76-14q-12-4-22 4t-12 22l-16 98q-8 30 12 56l258 386q-24 50-38 120q-18 106 53 187t185 101q106 20 195-45t107-177z m-126-76q30 44 21 97t-51 83q-42 32-92 22t-80-54q-8-12-12-23t-1-20t5-16t13-17t18-15t22-16t23-17q6-4 22-16t23-16t19-12t19-8t17 1t18 8t16 19z" horiz-adv-x="780" />
|
||||
<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110q-6-58-28-101t-61-69t-68-38t-75-26q-42-14-63-22t-47-24t-38-40t-16-60q70-30 70-110q0-50-35-85t-85-35t-85 35t-35 85q0 78 72 112l0 378q-72 34-72 110q0 50 35 85t85 35t85-35t35-85q0-76-72-110l0-204q40 30 138 60q58 18 84 29t51 41t29 76q-70 32-70 108q0 50 35 85t85 35t85-35t35-85z m-588 0q0-28 20-48t48-20t49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
|
||||
<glyph glyph-name="puzzle" unicode="" d="m586 402q-37 0-64-34t-27-82t27-84t64-34q22 0 43 13q26 17 37 11t12-24l0-144q0-31-24-54t-55-23l-143 0q-16 0-23 9t2 31q21 25 21 51q0 38-34 64t-83 26t-83-26t-35-64q0-22 13-44q17-26 12-37t-25-10l-143 0q-33 0-55 23t-23 54l0 144q0 16 9 23t31-3q24-20 51-20q38 0 65 34t27 84t-27 82t-65 34q-21 0-42-13q-26-17-38-12t-11 25l0 91q0 33 23 56t55 23l143 0q19 0 25 10t-11 37q-14 20-14 44q0 38 35 64t83 26t83-26t34-64q0-26-21-51q-10-21-2-31t23-9l143 0q31 0 55-23t24-56l0-91q0-16-10-23t-30 3q-24 20-52 20z" horiz-adv-x="678" />
|
||||
<glyph glyph-name="mail-1" unicode="" d="m467 366l-449 210l0 109l893 0l0-109z m0-123l444 210l0-437l-893 0l0 438z" horiz-adv-x="928" />
|
||||
<glyph glyph-name="equalizer" unicode="" d="m576 239l0-112l-55 0l0-167q0-23-17-40t-39-17t-39 17t-17 40l0 167l-56 0l0 112l56 0l0 503q0 24 17 39t38 16q24 0 41-16t16-39l0-503l55 0z m335 335l0-112l-55 0l0-502q0-23-16-40t-41-17q-23 0-39 17t-16 40l0 502l-56 0l0 112l56 0l0 168q0 24 16 39t39 16t41-16t16-39l0-168l55 0z m-670-112l0-111l-55 0l0-391q0-23-16-40t-40-17q-23 0-39 17t-17 40l0 391l-56 0l0 111l56 0l0 280q0 24 16 39t40 16t40-16t16-39l0-280l55 0z" horiz-adv-x="928" />
|
||||
<glyph glyph-name="users" unicode="" d="m0 49q20 7 60 22t69 26t50 22q37 19 57 56t21 76q0 27-31 64q-19 21-33 60q-45 18-45 76q0 43 14 61q-5 39-9 82q-5 55 26 108t84 84t110 32q43 0 85-19t73-50t48-72t14-83q-4-55-8-82q14-19 14-61q0-58-45-76q-15-41-32-60q-32-37-32-64q0-39 20-76t58-56q29-15 92-38t113-43t66-38q18-17 28-47t10-51l1-21h-878v168z m705 299q0 34 12 50q-5 32-7 67q-4 45 21 89t69 72t90 27t89-27t69-72t22-89q-2-35-8-67q12-16 12-50q0-48-36-62q-12-33-27-50q-9-10-13-16t-9-16t-4-20q0-32 17-62t47-46q17-9 42-19t60-22t50-19v-135h-254q0 4 0 11t-3 26t-7 36t-15 38t-23 33q-23 25-53 44t-79 37q27 34 27 78q0 10-5 20t-8 16t-12 16q-14 15-27 49q-37 16-37 63z" horiz-adv-x="1201.2" />
|
||||
<glyph glyph-name="group" unicode="" d="m0 106l0 134q0 26 18 32l171 80q-66 39-68 131q0 56 35 103q37 41 90 43q31 0 63-19q-49-125 23-237q-12-11-25-19l-114-55q-48-23-52-84l0-143l-114 0q-25 0-27 34z m193-59l0 168q0 27 22 37l152 70l57 28q-37 23-60 66t-22 94q0 76 46 130t110 54t109-54t45-130q0-106-78-158l61-30l146-70q24-10 24-37l0-168q-2-37-37-41l-541 0q-14 2-24 14t-10 27z m473 330q68 106 22 231q31 19 66 21q49 0 90-43q35-41 35-103q0-82-65-131l168-80q18-10 18-32l0-134q0-32-27-34l-118 0l0 143q0 57-50 84l-110 53q-15 8-29 25z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="shuffle" unicode="🔀" d="m372 582q-34-52-77-153q-12 25-20 41t-23 35t-28 32t-36 19t-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107q-18 0-48 0t-45-1t-41 1t-39 3t-36 6t-35 10t-32 16t-33 22t-31 30t-31 39q33 52 76 152q12-25 20-40t23-36t28-31t35-20t46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25t-29-35t-25-43q-18-34-43-95q-16-37-28-62t-30-59t-36-55t-41-47t-50-38t-60-23t-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25t28 34t26 43q17 35 43 96q16 36 28 62t30 58t36 56t41 46t50 38t59 24t72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="star" unicode="★" d="m0 489q0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26 0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="star-empty" unicode="☆" d="m0 489q0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26 0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27z m123-34l171-165-41-235 211 111 211-111-41 235 171 165-235 35-106 213-105-213z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="cog" unicode="⚙" d="m0 289v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-28 59-77 6-6 6-14t-5-12q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 20l-79-59q-6-5-14-5-8 0-14 6-70 63-92 94-4 5-4 12 0 7 5 13 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13z m286 61q0-59 42-101t101-42 101 42 41 101-41 101-101 42-101-42-42-101z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="cog-alt" unicode="⛯" d="m0 299v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 12 12 16 46 49t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11z m214 51q0-59 42-101t101-42 101 42 42 101-42 101-101 42-101-42-42-101z m429-325v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17z m0 572v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18z m143-533q0-29 21-50t50-21 51 21 21 50q0 29-22 51t-50 21-50-21-21-51z m0 572q0-30 21-51t50-21 51 21 21 51q0 29-22 50t-50 21-50-21-21-50z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="mail" unicode="✉" d="m0 11v607q0 37 26 63t63 26h822q37 0 63-26t26-63v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63z m71 0q0-8 6-13t12-5h822q7 0 12 5t6 13v428q-18-20-39-37-149-114-238-188-28-24-46-38t-48-27-57-13h-2q-26 0-57 13t-48 27-46 38q-88 74-238 188-21 17-39 37v-428z m0 607q0-94 82-159 108-84 224-176 4-3 20-17t25-21 25-17 28-16 24-5h2q11 0 24 5t28 16 25 17 25 21 20 17q116 92 224 176 30 24 56 65t26 73v14t-1 7-1 7-3 5-5 4-8 2h-822q-7 0-12-6t-6-12z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="pencil" unicode="✎" d="m0-79v233l464 464 232-232-464-465h-232z m71 143h72v-71h60l50 51-131 131-51-51v-60z m95 143q0-12 13-12 5 0 9 4l303 302q3 4 3 10 0 12-12 12-5 0-9-4l-303-302q-4-4-4-10z m334 447l93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51 0-29-20-50l-93-93z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="plus-circled" unicode="➕" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m179-36q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="asl" unicode="" d="m1 700q-4 37 15 53t45 5 35-38l53-184q-15-29-14-64 6-30 36-204 7-52 32-82t65-29q47 0 74 37 34-39 83-37t74 41q27-37 71-41t73 27q12 16 20 32t11 37 5 33 1 40l0 38q26-10 61 24 49 45 109 78t98 8q33-24 31-59t-35-55q-61-25-104-82t-67-112-58-117-78-93q-21-18-66-18l-350 0q-84 6-105 118z m181-234q-6 45 21 65t56 8 37-48l21-209q4-41-17-63t-46-15-37 45z m155 70q2 41 32 56t62-1 36-49l8-248q0-59-28-76t-57 4-30 62z m175 4q4 43 37 55t62-7 30-52l-6-254q-5-47-34-66t-54 1-29 67z" horiz-adv-x="979" />
|
||||
<glyph glyph-name="eye" unicode="" d="m0 314q0 19 11 39 78 128 210 205t279 78 279-78 210-205q11-20 11-39t-11-38q-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38z m71 0q75-114 187-182t242-68 242 68 187 182q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197z m259 72q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19-8 19-19 7q-70 0-120-50t-50-119z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="tags" unicode="" d="m0 475v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50 0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65z m107 125q0-30 21-50t51-21 50 21 21 50-21 51-50 20-51-20-21-51z m286 179h125q29 0 65-15t57-36l399-399q21-21 21-50 0-30-21-51l-274-274q-22-21-51-21-20 0-33 8t-29 25l262 262q21 21 21 51 0 29-21 50l-399 399q-21 21-57 36t-65 15z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="chat" unicode="" d="m0 421q0 78 53 144t143 104 197 38 197-38 143-104 53-144-53-143-143-104-197-38q-48 0-98 9-70-50-155-72-21-5-48-9h-2q-6 0-12 5t-6 11q-1 2-1 4t1 4 1 3l1 3t2 3 2 3 3 2 2 3q3 3 13 14t15 16 12 17 14 21 11 25q-69 40-108 98t-40 125z m344-354q32-3 49-3 90 0 172 25t148 72q69 52 107 119t37 141q0 43-13 85 72-39 114-99t42-128q0-67-40-126t-108-98q5-14 11-25t14-21 13-16 14-17 13-14q0 0 2-2t3-3 2-3 2-3l1-3t1-3 1-4-1-3q-2-8-7-13t-13-4q-27 4-48 9-85 23-155 72-50-9-98-9-151 0-263 74z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="trash" unicode="" d="m0 582v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13z m143-547q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22v529h-500v-529z m71 83v321q0 8 5 13t13 5h36q8 0 13-5t5-13v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13z m54 518h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m89-518v321q0 8 5 13t13 5h36q8 0 13-5t5-13v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13z m143 0v321q0 8 5 13t13 5h36q7 0 12-5t5-13v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="basket" unicode="" d="m0 671q0 15 11 26t25 10h143q9 0 16-3t11-9 7-14 4-15 3-16 3-14h670q14 0 25-11t11-25v-286q0-13-9-24t-23-12l-583-68q1-3 3-12t3-14 1-13q0-9-13-35h513q15 0 26-11t10-25-10-25-26-11h-571q-14 0-25 11t-11 25q0 8 6 22t17 33 11 21l-98 460h-114q-15 0-25 10t-11 25z m214-678q0 29 21 50t51 21 50-21 21-50-21-51-50-21-51 21-21 51z m500 0q0 29 21 50t51 21 50-21 21-50-21-51-50-21-51 21-21 51z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="puzzle" unicode="" d="m586 402q-37 0-64-34t-27-82 27-84 64-34q22 0 43 13 26 17 37 11t12-24l0-144q0-31-24-54t-55-23l-143 0q-16 0-23 9t2 31q21 25 21 51 0 38-34 64t-83 26-83-26-35-64q0-22 13-44 17-26 12-37t-25-10l-143 0q-33 0-55 23t-23 54l0 144q0 16 9 23t31-3q24-20 51-20 38 0 65 34t27 84-27 82-65 34q-21 0-42-13-26-17-38-12t-11 25l0 91q0 33 23 56t55 23l143 0q19 0 25 10t-11 37q-14 20-14 44 0 38 35 64t83 26 83-26 34-64q0-26-21-51-10-21-2-31t23-9l143 0q31 0 55-23t24-56l0-91q0-16-10-23t-30 3q-24 20-52 20z" horiz-adv-x="678" />
|
||||
<glyph glyph-name="language" unicode="" d="m988 306q30-82-10-176t-134-160q-10 0-12 2t-16 19-16 19q-2 6 2 10 86 60 117 152t-11 148q-16-38-39-76t-59-80-86-65-106-15q-52 6-84 41t-32 93q0 84 60 148 50 50 114 66l-2 100q-140-24-146-24-6-2-10 4 0 2-5 29t-5 31q-2 2 1 4t7 2l156 28q0 110-2 114 0 8 8 8 46 0 52 2 10 0 10-8l0-104q158 22 164 22 8 4 10-6 0-2 4-23t4-25q4-10-4-12l-176-30 0-102 12 0q86 0 148-36t86-100z m-370-160q28-6 62 6l-4 214q-34-12-60-40-44-44-44-108 0-66 46-72z m122 28q28 24 58 68t45 79 7 41q-36 18-96 18-2 0-6-1t-6-1z m-448 382q10-28 53-165t83-261 40-126q0-4-4-4l-86 0q-6 0-6 4l-50 166-176 0q-48-164-50-166 0-4-6-4l-86 0q-4 0-4 4 10 18 176 552 2 8 10 8l96 0q10 0 10-8z m-130-316l144 0-72 264z" horiz-adv-x="1001" />
|
||||
<glyph glyph-name="signal" unicode="" d="m0-61v107q0 8 5 13t13 5h107q8 0 13-5t5-13v-107q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m214 0v179q0 8 5 13t13 5h107q8 0 13-5t5-13v-179q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m215 0v322q0 8 5 13t12 5h108q7 0 12-5t5-13v-322q0-8-5-13t-12-5h-108q-7 0-12 5t-5 13z m214 0v536q0 8 5 13t13 5h107q8 0 13-5t5-13v-536q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z m214 0v822q0 8 5 13t13 5h107q8 0 13-5t5-13v-822q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="users" unicode="" d="m0 49q20 7 60 22t69 26 50 22q37 19 57 56t21 76q0 27-31 64-19 21-33 60-45 18-45 76 0 43 14 61-5 39-9 82-5 55 26 108t84 84 110 32q43 0 85-19t73-50 48-72 14-83q-4-55-8-82 14-19 14-61 0-58-45-76-15-41-32-60-32-37-32-64 0-39 20-76t58-56q29-15 92-38t113-43 66-38q18-17 28-47t10-51l1-21h-878v168z m705 299q0 34 12 50-5 32-7 67-4 45 21 89t69 72 90 27 89-27 69-72 22-89q-2-35-8-67 12-16 12-50 0-48-36-62-12-33-27-50-9-10-13-16t-9-16-4-20q0-32 17-62t47-46q17-9 42-19t60-22 50-19v-135h-254q0 4 0 11t-3 26-7 36-15 38-23 33q-23 25-53 44t-79 37q27 34 27 78 0 10-5 20t-8 16-12 16q-14 15-27 49-37 16-37 63z" horiz-adv-x="1201.2" />
|
||||
<glyph glyph-name="tools" unicode="" d="m155 506q-8-8-11-22t-3-25-2-11q-2-2-17-15t-19-17q-16-14-28 4l-70 76q-11 12 2 24 2 2 18 14t20 16q6 6 27 6t37 14q14 14 18 38t10 30q2 0 9 7t26 22 41 31q134 90 186 96 122 0 148-2 12 0-8-8-120-52-152-76-80-56-36-114 34-46 38-48 8-8-2-14-2-2-38-35t-38-35q-14-8-18-4-42 48-71 60t-67-12z m286-26l410-476q18-22-2-38l-48-42q-22-14-38 4l-414 472q-8 8 0 20l72 62q12 8 20-2z m554 202q16-104-16-166-50-88-154-62-56 12-100-32l-82-78-68 78 68 70q24 24 31 53t6 65 5 58q12 56 140 112 12 6 18-3t2-15q-12-12-46-80-14-10-12-35t40-53q58-40 96 22 6 12 26 41t22 33q4 10 13 9t11-17z m-858-684l254 248 76-86-246-242q-20-20-38-4l-46 46q-22 18 0 38z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="arrows-cw" unicode="" d="m0-7v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25z m10 446v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="exchange" unicode="" d="m0 136q0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13z m0 303v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="folder-open" unicode="" d="m0 118v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q51 0 88-37t37-88v-90h-464q-53 0-110-26t-92-67l-188-221-2-3q0 2-1 7t0 7z m41-94q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24q0-18-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="brush" unicode="" d="m118 170q38 34 85 29t87-45q42-40 48-87t-30-83q-86-84-228-102-84-12-80 14 0 4 6 10 52 60 64 145t48 119z m840 646q26-26-148-248t-292-338q-38-38-124-104-8-6-16 8-18 34-48 64-32 32-66 48-16 6-8 16 64 84 104 122 118 116 344 287t254 145z" horiz-adv-x="962" />
|
||||
<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
|
||||
<glyph glyph-name="menu" unicode="" d="m0 29v71q0 15 11 25t25 11h785q15 0 26-11t10-25v-71q0-15-10-26t-26-10h-785q-15 0-25 10t-11 26z m0 285v72q0 14 11 25t25 10h785q15 0 26-10t10-25v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25z m0 286v71q0 15 11 26t25 10h785q15 0 26-10t10-26v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="code" unicode="" d="m25 314q0 8 6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13z m372-350l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14z m325 118q0 7 5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="user-add" unicode="" d="m620 128q180-64 180-122l0-106-800 0 0 202q36 14 82 26 94 34 129 69t35 95q0 22-23 48t-31 74q-2 12-23 25t-25 61q0 16 5 26t9 12l4 4q-8 50-12 88-6 54 40 112t160 58 160-58 42-112l-14-88q18-8 18-42-2-28-9-43t-14-17-14-8-9-18q-10-46-33-73t-23-49q0-60 36-95t130-69z m230 272l150 0 0-100-150 0 0-150-100 0 0 150-150 0 0 100 150 0 0 150 100 0 0-150z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="cw" unicode="" d="m0 350q0 87 34 166t92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="group" unicode="" d="m0 106l0 134q0 26 18 32l171 80q-66 39-68 131 0 56 35 103 37 41 90 43 31 0 63-19-49-125 23-237-12-11-25-19l-114-55q-48-23-52-84l0-143-114 0q-25 0-27 34z m193-59l0 168q0 27 22 37l152 70 57 28q-37 23-60 66t-22 94q0 76 46 130t110 54 109-54 45-130q0-106-78-158l61-30 146-70q24-10 24-37l0-168q-2-37-37-41l-541 0q-14 2-24 14t-10 27z m473 330q68 106 22 231 31 19 66 21 49 0 90-43 35-41 35-103 0-82-65-131l168-80q18-10 18-32l0-134q0-32-27-34l-118 0 0 143q0 57-50 84l-110 53q-15 8-29 25z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="home" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
|
||||
<glyph glyph-name="equalizer" unicode="" d="m576 239l0-112-55 0 0-167q0-23-17-40t-39-17-39 17-17 40l0 167-56 0 0 112 56 0 0 503q0 24 17 39t38 16q24 0 41-16t16-39l0-503 55 0z m335 335l0-112-55 0 0-502q0-23-16-40t-41-17q-23 0-39 17t-16 40l0 502-56 0 0 112 56 0 0 168q0 24 16 39t39 16 41-16 16-39l0-168 55 0z m-670-112l0-111-55 0 0-391q0-23-16-40t-40-17q-23 0-39 17t-17 40l0 391-56 0 0 111 56 0 0 280q0 24 16 39t40 16 40-16 16-39l0-280 55 0z" horiz-adv-x="928" />
|
||||
<glyph glyph-name="mail-1" unicode="" d="m467 366l-449 210 0 109 893 0 0-109z m0-123l444 210 0-437-893 0 0 438z" horiz-adv-x="928" />
|
||||
<glyph glyph-name="search" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
|
||||
<glyph glyph-name="move" unicode="" d="m0 350q0 15 11 25l143 143q10 11 25 11t25-11 10-25v-72h215v215h-72q-14 0-25 10t-11 25 11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25-25-10h-72v-215h215v72q0 14 10 25t25 11 26-11l142-143q11-10 11-25t-11-25l-142-143q-11-11-26-11t-25 11-10 25v72h-215v-215h72q14 0 25-10t11-25-11-26l-143-142q-10-11-25-11t-25 11l-143 142q-11 11-11 26t11 25 25 10h72v215h-215v-72q0-14-10-25t-25-11-26 11l-142 143q-11 11-11 25z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="upload" unicode="" d="m500 776l260-244-164 0 0-256-190 0 0 256-166 0z m468-578q18-10 27-32t3-40l-28-154q-4-20-22-33t-40-13l-816 0q-22 0-40 13t-22 33l-28 154q-10 48 32 72l158 108 98 0-170-130 178 0q8 0 12-8l40-110 300 0 40 110q8 8 12 8l178 0-170 130 98 0z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="upload-cloud" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-190 0 0 190 106 0-176 230-174-230 104 0 0-190-248 0q-74 0-128 52t-54 124q0 74 53 126t129 52q14 0 20-2-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="key" unicode="" d="m774 612q20-116-28-215t-150-117q-66-12-130-2l-118-194-70-12-104-166q-14-28-46-32l-76-14q-12-4-22 4t-12 22l-16 98q-8 30 12 56l258 386q-24 50-38 120-18 106 53 187t185 101q106 20 195-45t107-177z m-126-76q30 44 21 97t-51 83q-42 32-92 22t-80-54q-8-12-12-23t-1-20 5-16 13-17 18-15 22-16 23-17q6-4 22-16t23-16 19-12 19-8 17 1 18 8 16 19z" horiz-adv-x="780" />
|
||||
<glyph glyph-name="network" unicode="" d="m224 504q-22 0-42-10-48 52-92 128 54 74 128 118 92-38 152-82-6-16-6-32 0-6 4-22-62-48-116-104-16 4-28 4z m-98-98q0-34 20-60-60-114-80-232-66 106-66 236 0 110 50 206 38-62 84-112-8-24-8-38z m336 318q-28 0-50-14-58 42-114 70 84 30 162 30 120 0 230-62-76-14-162-50-26 26-66 26z m146-460q-160 24-290 112 4 20 4 30 0 24-14 52 38 44 98 90 26-20 56-20 14 0 38 8 94-108 134-240-16-14-26-32z m128-132q38 14 54 60 58 4 108 18-46-146-166-232 6 48 6 98 0 10-1 28t-1 28z m-150 66q-190-96-304-272-90 36-158 110 12 144 80 274 6-2 20-2 30 0 52 14 142-98 310-124z m184 492q150-136 150-340 0-22-4-66-64-18-130-24-24 56-88 60-48 146-148 264 10 20 10 42l0 10q100 42 210 54z m-136-544q14-10 32-18 2-18 2-52 0-80-14-144-86-42-194-42-58 0-112 12 110 160 286 244z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="info-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m52-152q-42 0-65-24t-23-50q-2-28 15-44t49-16q38 0 61 22t23 54q0 58-60 58z m-120-594q30 0 84 26t106 78l-18 24q-48-36-72-36-14 0-4 38l42 160q26 96-22 96-30 0-89-29t-115-75l16-26q52 34 74 34 12 0 0-34l-36-152q-26-104 34-104z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="calendar" unicode="" d="m0-79v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50z m71 0h161v161h-161v-161z m0 197h161v178h-161v-178z m0 214h161v161h-161v-161z m143 268q0-7 6-13t12-5h36q7 0 12 5t6 13v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161z m54-679h178v161h-178v-161z m0 197h178v178h-178v-178z m0 214h178v161h-178v-161z m214-411h179v161h-179v-161z m0 197h179v178h-179v-178z m0 214h179v161h-179v-161z m161 268q0-7 5-13t13-5h35q8 0 13 5t5 13v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161z m53-679h161v161h-161v-161z m0 197h161v178h-161v-178z m0 214h161v161h-161v-161z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="ok" unicode="" d="m68 332q0 22 15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38t-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="help-circled" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
|
||||
<glyph glyph-name="logout" unicode="" d="m0 154v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114z m214 89v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25t-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="flag" unicode="" d="m874 616q14 6 22-1t0-19q-96-138-164-213t-110-90-73-2-60 37-63 40-93-4-139-86l90-352-100 0-184 720 92 34q90 66 152 86t98 3 64-51 62-71 79-62 129-20 198 51z" horiz-adv-x="900" />
|
||||
<glyph glyph-name="spin6" unicode="" d="m855 9c-189-190-520-172-705 13-190 190-200 494-28 695 11 13 21 26 35 34 36 23 85 18 117-13 30-31 35-76 16-112-5-9-9-15-16-22-140-151-145-379-8-516 153-153 407-121 542 34 106 122 142 297 77 451-83 198-305 291-510 222l0 1c236 82 492-24 588-252 71-167 37-355-72-493-11-15-23-29-36-42z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="hourglass" unicode="" d="m560 622q0-44-48-96t-97-99-49-77 49-76 97-97 48-97l0-118q0-34-86-73t-194-39-194 39-86 73l0 118q0 46 48 97t97 97 49 76-49 77-97 99-48 96l0 118q0 32 87 71t193 39 193-39 87-71l0-118z m-482 112l-18-14q-4-8 4-14 92-52 216-52 132 0 220 50 14 10-16 30-96 54-202 54-120 0-204-54z m228-384q0 18 4 33t18 33 20 25 31 31 29 28q92 92 92 122l2 50q-100-54-222-54t-222 54l4-50q0-32 90-122 6-6 22-21t23-22l19-19t17-21 11-20 9-23 3-24q0-10-1-19t-6-18-8-16-11-17l-12-15t-15-16-16-15-18-16-17-16q-90-90-90-122l0-66q8 4 66 23t92 43 34 58q0 30 26 30t26-30q0-34 33-58t94-43 67-23l0 66q0 30-92 122-4 4-21 20t-22 21-18 19-18 22-12 20-9 23-2 23z" horiz-adv-x="560" />
|
||||
<glyph glyph-name="check" unicode="" d="m0 154v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m143 267q0 19 14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="check-empty" unicode="" d="m0 154v464q0 66 47 113t114 48h464q66 0 114-48t47-113v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114z m71 0q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="cancel-circled" unicode="" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m216-126q0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26 0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="cancel" unicode="" d="m61 112q0 23 16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38t-15-38l-76-76q-16-15-38-15t-38 15l-164 164-164-164q-16-15-38-15t-38 15l-76 76q-16 16-16 38z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="plus" unicode="" d="m0 332v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q22 0 38-16t16-38v-107q0-22-16-38t-38-16h-232v-232q0-22-16-38t-38-15h-107q-22 0-38 15t-15 38v232h-232q-23 0-38 16t-16 38z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="ok-circled" unicode="" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m141-11q0-15 10-25l202-202q10-10 25-10 15 0 25 10l303 303q11 10 11 25 0 16-11 26l-50 50q-11 11-25 11t-26-11l-227-227-126 126q-11 11-25 11t-26-11l-50-50q-10-10-10-26z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="zoom-in" unicode="" d="m0 386q0 80 31 152t84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51t-21-50-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 83-84 126-31 153z m143 0q0-103 73-177t177-73 176 73 74 177-74 176-176 74-177-74-73-176z m71-18v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="zoom-out" unicode="" d="m0 386q0 80 31 152t84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51t-21-50-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 83-84 126-31 153z m143 0q0-103 73-177t177-73 176 73 74 177-74 176-176 74-177-74-73-176z m71-18v36q0 7 6 12t12 5h322q7 0 12-5t5-12v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="tasks" unicode="" d="m0 29v142q0 15 11 26t25 10h928q15 0 25-10t11-26v-142q0-15-11-26t-25-10h-928q-15 0-25 10t-11 26z m0 285v143q0 15 11 25t25 11h928q15 0 25-11t11-25v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25z m0 286v143q0 14 11 25t25 11h928q15 0 25-11t11-25v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25z m357-250h572v71h-572v-71z m214-286h358v72h-358v-72z m143 572h215v71h-215v-71z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="filter" unicode="" d="m3 685q9 22 33 22h714q23 0 33-22 9-23-8-39l-275-275v-414q0-23-22-33-7-3-14-3-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="mail-alt" unicode="" d="m0 11v443q25-28 56-49 202-137 278-192 32-24 51-37t53-27 61-13h2q28 0 61 13t53 27 51 37q95 68 278 192 32 22 56 49v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63z m0 595q0 43 23 72t66 29h822q36 0 62-26t27-63q0-44-27-84t-68-69q-210-146-262-181-5-4-23-17t-30-22-29-18-33-15-27-5h-2q-12 0-27 5t-33 15-29 18-30 22-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="sitemap" unicode="" d="m0-25v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="crop" unicode="" d="m0 511v107q0 8 5 13t13 5h125v125q0 7 5 12t13 5h107q8 0 13-5t5-12v-125h475l137 138q5 5 13 5t13-5q5-6 5-13t-5-13l-138-137v-475h125q8 0 13-5t5-13v-107q0-8-5-13t-13-5h-125v-125q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v125h-482q-8 0-13 5t-5 13v482h-125q-8 0-13 5t-5 13z m286-350l332 332h-332v-332z m25-25h332v332z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="picture" unicode="🌄" d="m0 11v678q0 37 26 63t63 27h893q37 0 63-27t26-63v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63z m71 0q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 8-5 13t-13 5h-893q-7 0-12-5t-6-13v-678z m72 53v107l178 179 90-89 285 285 233-232v-250h-786z m0 465q0 44 31 75t76 32 76-32 31-75-31-76-76-32-76 32-31 76z" horiz-adv-x="1071.4" />
|
||||
<glyph glyph-name="user" unicode="👤" d="m0 66q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106z m179 498q0 89 62 152t152 63 151-63 63-152-63-151-151-63-152 63-62 151z" horiz-adv-x="785.7" />
|
||||
<glyph glyph-name="shuffle" unicode="🔀" d="m0 82v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13z m0 500v107q0 8 5 13t13 5h125q139 0 229-125-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13z m415-392q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13t-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39z" horiz-adv-x="1000" />
|
||||
<glyph glyph-name="lock" unicode="🔒" d="m0 46v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37z m179 375h285v108q0 59-42 101t-101 41-101-41-41-101v-108z" horiz-adv-x="642.9" />
|
||||
<glyph glyph-name="link" unicode="🔗" d="m9 600q0 67 47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114t-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114z m107 0q0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41 0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37z m392-393q0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37 0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="wrench" unicode="🔧" d="m12-7q0 29 21 51l380 380q22-55 64-97t97-64l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50z m131 36q0-15 10-26t26-10 25 10 10 26-10 25-25 10-26-10-10-25z m286 500q0 103 73 176t177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14q0-22-12-60-27-74-92-121t-144-47q-104 0-177 74t-73 176z" horiz-adv-x="928.6" />
|
||||
<glyph glyph-name="clock" unicode="🕔" d="m0 350q0 117 58 215t155 156 216 58 215-58 156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215z m125 0q0-83 41-152t110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41-153-41-110-111-41-152z m161-54v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12z" horiz-adv-x="857.1" />
|
||||
<glyph glyph-name="block" unicode="🚫" d="m0 352q0 87 34 167t91 137 137 91 167 34 166-34 137-91 91-137 34-167-34-168-91-137-137-92-166-34-167 34-137 92-91 137-34 168z m125 0q0-91 50-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152z m138-256q76-50 166-50 62 0 118 25t96 65 65 97 24 119q0 90-48 164z" horiz-adv-x="857.1" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 30 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 517 B |
|
@ -1,3 +1,21 @@
|
|||
jQuery.fn.fontCheckbox = function() {
|
||||
this.find('input[type=checkbox], input[type=radio]').each(function() {
|
||||
if (!jQuery(this).is(':checked')) {
|
||||
jQuery(this).prev().toggleClass('icon-check icon-check-empty');
|
||||
}
|
||||
});
|
||||
this.find('input[type=checkbox]').on('change', function() {
|
||||
jQuery(this).prev().toggleClass('icon-check icon-check-empty');
|
||||
});
|
||||
this.find('input[type=radio]').on('change', function() {
|
||||
jQuery(this).closest('.font-checkbox').find('input[type=radio][name='+ jQuery(this).attr('name') +']')
|
||||
.prev().toggleClass('icon-check icon-check-empty');
|
||||
});
|
||||
};
|
||||
|
||||
// init fontChecbox everywhere
|
||||
jQuery('.font-checkbox').fontCheckbox();
|
||||
|
||||
function array_delete(arr, item) {
|
||||
var i = arr.indexOf(item);
|
||||
if (i != -1) arr.splice(i, 1);
|
||||
|
|
|
@ -11,7 +11,7 @@ GeoIp = {
|
|||
cache = JSON.parse(cache);
|
||||
for (var key in cache) {
|
||||
var data = cache[key];
|
||||
if ( (new Date()).getTime() - data.reqTime > 36 * 3600000)
|
||||
if ( (new Date()).getTime() - data.reqTime > 96 * 3600000)
|
||||
delete cache[key];
|
||||
}
|
||||
GeoIp.cache = cache;
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
{if $load_css}
|
||||
<!--[if lt IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/fix-ie5-ie6.css">
|
||||
<![endif]-->
|
||||
|
||||
<!--[if IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="{$ROOT_URL}admin/themes/default/fix-ie7.css">
|
||||
<![endif]-->
|
||||
{/if}
|
|
@ -1,56 +1,74 @@
|
|||
{combine_script id='jquery.ui.accordion' load='header'}{*we load in the header because the accordion is on every admin page and usually all admin pages use the same header combined script but not the same footer script*}
|
||||
{footer_script require='jquery.ui.accordion'}
|
||||
jQuery(document).ready(function(){ldelim}
|
||||
jQuery('#menubar').accordion({ldelim}
|
||||
header: "dt.rdion",
|
||||
event: "click",
|
||||
heightStyle: "content",
|
||||
active: {$ACTIVE_MENU}
|
||||
});
|
||||
{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}
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<div id="menubar">
|
||||
<div id="adminHome"><a href="{$U_ADMIN}">{'Administration Home'|@translate}</a></div>
|
||||
<dl class="first">
|
||||
<dt class="rdion"><span class="icon-picture"> </span><span>{'Photos'|@translate} </span></dt>
|
||||
|
||||
<dl>
|
||||
<dt><i class="icon-picture"> </i><span>{'Photos'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a class="icon-plus-circled" href="{$U_ADD_PHOTOS}">{'Add'|@translate}</a></li>
|
||||
<li><a class="icon-star" href="{$U_RATING}">{'Rating'|@translate}</a></li>
|
||||
<li><a class="icon-tags" href="{$U_TAGS}">{'Tags'|@translate}</a></li>
|
||||
<li><a class="icon-clock" href="{$U_RECENT_SET}">{'Recent photos'|@translate}</a></li>
|
||||
<li><a class="icon-pencil" href="{$U_BATCH}">{'Batch Manager'|@translate}</a></li>
|
||||
<li><a href="{$U_ADD_PHOTOS}"><i class="icon-plus-circled"></i>{'Add'|@translate}</a></li>
|
||||
<li><a href="{$U_RATING}"><i class="icon-star"></i>{'Rating'|@translate}</a></li>
|
||||
<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-pencil"></i>{'Batch Manager'|@translate}</a></li>
|
||||
{if $NB_PHOTOS_IN_CADDIE > 0}
|
||||
<li><a class="icon-flag" href="{$U_CADDIE}">{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li>
|
||||
<li><a href="{$U_CADDIE}"><i class="icon-flag"></i>{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="rdion"><span class="icon-sitemap"> </span><span>{'Albums'|@translate} </span></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-sitemap"> </i><span>{'Albums'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a class="icon-folder-open" href="{$U_CATEGORIES}">{'Manage'|@translate}</a></li>
|
||||
<li><a class="icon-pencil" href="{$U_CAT_OPTIONS}">{'Properties'|@translate}</a></li>
|
||||
<li><a href="{$U_CATEGORIES}"><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 class="rdion"><span class="icon-users"> </span><span>{'Users'|@translate} </span></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-users"> </i><span>{'Users'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a class="icon-user-add" href="{$U_USERS}">{'Manage'|@translate}</a></li>
|
||||
<li><a class="icon-group" href="{$U_GROUPS}">{'Groups'|@translate}</a></li>
|
||||
<li><a class="icon-mail-1" href="{$U_NOTIFICATION_BY_MAIL}">{'Notification'|@translate}</a></li>
|
||||
<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 class="rdion"><span class="icon-puzzle"> </span><span>{'Plugins'|@translate} </span></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-puzzle"> </i><span>{'Plugins'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a class="icon-equalizer" href="{$U_PLUGINS}">{'Manage'|@translate}</a></li>
|
||||
<li><a href="{$U_PLUGINS}"><i class="icon-equalizer"></i>{'Manage'|@translate}</a></li>
|
||||
</ul>
|
||||
<div id="pluginsMenuSeparator"></div>
|
||||
{if !empty($plugin_menu_items)}
|
||||
|
@ -61,33 +79,36 @@ jQuery(document).ready(function(){ldelim}
|
|||
</ul>
|
||||
{/if}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="rdion"><span class="icon-wrench"> </span><span>{'Tools'|@translate} </span></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-wrench"> </i><span>{'Tools'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
{if $ENABLE_SYNCHRONIZATION}
|
||||
<li><a class="icon-exchange" href="{$U_CAT_UPDATE}">{'Synchronize'|@translate}</a></li>
|
||||
<li><a class="icon-flow-branch" href="{$U_SITE_MANAGER}">{'Site manager'|@translate}</a></li>
|
||||
<li><a href="{$U_CAT_UPDATE}"><i class="icon-exchange"></i>{'Synchronize'|@translate}</a></li>
|
||||
<li><a href="{$U_SITE_MANAGER}"><i class="icon-flow-branch"></i>{'Site manager'|@translate}</a></li>
|
||||
{/if}
|
||||
<li><a class="icon-signal" href="{$U_HISTORY_STAT}">{'History'|@translate}</a></li>
|
||||
<li><a class="icon-tools" href="{$U_MAINTENANCE}">{'Maintenance'|@translate}</a></li>
|
||||
<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 class="icon-chat" href="{$U_COMMENTS}">{'Comments'|@translate}{if $NB_PENDING_COMMENTS > 0}<span class="adminMenubarCounter" title="{'%d waiting for validation'|translate:$NB_PENDING_COMMENTS}">{$NB_PENDING_COMMENTS}</span>{/if}</a></li>
|
||||
<li><a href="{$U_COMMENTS}"><i class="icon-chat"></i>{'Comments'|@translate}
|
||||
{if $NB_PENDING_COMMENTS > 0}
|
||||
<span class="adminMenubarCounter" title="{'%d waiting for validation'|translate:$NB_PENDING_COMMENTS}">{$NB_PENDING_COMMENTS}</span>
|
||||
{/if}</a></li>
|
||||
{/if}
|
||||
<li><a class="icon-arrows-cw" href="{$U_UPDATES}">{'Updates'|@translate}</a></li>
|
||||
<li><a href="{$U_UPDATES}"><i class="icon-arrows-cw"></i>{'Updates'|@translate}</a></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="last">
|
||||
<dt class="rdion"><span class="icon-cog"> </span><span>{'Configuration'|@translate} </span></dt>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><i class="icon-cog"> </i><span>{'Configuration'|@translate} </span></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a class="icon-cog-alt" href="{$U_CONFIG_GENERAL}">{'Options'|@translate}</a></li>
|
||||
<li><a class="icon-menu" href="{$U_CONFIG_MENUBAR}">{'Menu Management'|@translate}</a></li>
|
||||
<li><a class="icon-code" href="{$U_CONFIG_EXTENTS}">{'Templates'|@translate}</a></li>
|
||||
<li><a class="icon-language" href="{$U_CONFIG_LANGUAGES}">{'Languages'|@translate}</a></li>
|
||||
<li><a class="icon-brush" href="{$U_CONFIG_THEMES}">{'Themes'|@translate}</a></li>
|
||||
<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>
|
||||
<li><a href="{$U_CONFIG_EXTENTS}"><i class="icon-code"></i>{'Templates'|@translate}</a></li>
|
||||
<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>
|
||||
|
|
|
@ -1,144 +1,81 @@
|
|||
{include file='include/tag_selection.inc.tpl'}
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{include file='include/add_album.inc.tpl'}
|
||||
{include file='include/datepicker.inc.tpl' load_mode='async'}
|
||||
{include file='include/colorbox.inc.tpl' load_mode='async'}
|
||||
{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.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
|
||||
|
||||
{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='doubleSlider' load='async' require='jquery.ui.slider' path='admin/themes/default/js/doubleSlider.js'}
|
||||
|
||||
{footer_script}{literal}
|
||||
pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set");
|
||||
{/literal}{/footer_script}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{footer_script}{literal}
|
||||
/* Shift-click: select all photos between the click and the shift+click */
|
||||
jQuery(document).ready(function() {
|
||||
var last_clicked=0;
|
||||
var last_clickedstatus=true;
|
||||
jQuery.fn.enableShiftClick = function() {
|
||||
var inputs = [];
|
||||
var count=0;
|
||||
this.find('input[type=checkbox]').each(function() {
|
||||
var pos=count;
|
||||
inputs[count++]=this;
|
||||
$(this).bind("shclick", function (dummy,event) {
|
||||
if (event.shiftKey) {
|
||||
var first = last_clicked;
|
||||
var last = pos;
|
||||
if (first > last) {
|
||||
first=pos;
|
||||
last=last_clicked;
|
||||
}
|
||||
{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"}
|
||||
|
||||
for (var i=first; i<=last;i++) {
|
||||
input = $(inputs[i]);
|
||||
$(input).prop('checked', last_clickedstatus);
|
||||
if (last_clickedstatus)
|
||||
{
|
||||
$(input).siblings("span.wrap2").addClass("thumbSelected");
|
||||
}
|
||||
else
|
||||
{
|
||||
$(input).siblings("span.wrap2").removeClass("thumbSelected");
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
last_clicked = pos;
|
||||
last_clickedstatus = this.checked;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
$(this).click(function(event) { $(this).triggerHandler("shclick",event)});
|
||||
});
|
||||
}
|
||||
$('ul.thumbnails').enableShiftClick();
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
{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_css path='themes/default/js/plugins/jquery.tokeninput.css'}
|
||||
{combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
|
||||
{combine_script id='jquery.progressBar' load='footer' path='themes/default/js/plugins/jquery.progressbar.min.js'}
|
||||
{combine_script id='jquery.ajaxmanager' load='footer' path='themes/default/js/plugins/jquery.ajaxmanager.js'}
|
||||
|
||||
{footer_script require='jquery.tokeninput'}
|
||||
jQuery(document).ready(function() {ldelim}
|
||||
jQuery("a.preview-box").colorbox();
|
||||
|
||||
var tag_src = [{foreach from=$tags item=tag name=tags}{ldelim}name:"{$tag.name|@escape:'javascript'}",id:"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}];
|
||||
jQuery("#tags").tokenInput(
|
||||
tag_src,
|
||||
{ldelim}
|
||||
hintText: '{'Type in a search term'|@translate}',
|
||||
noResultsText: '{'No results'|@translate}',
|
||||
searchingText: '{'Searching...'|@translate}',
|
||||
newText: ' ({'new'|@translate})',
|
||||
animateDropdown: false,
|
||||
preventDuplicates: true,
|
||||
allowFreeTagging: true
|
||||
}
|
||||
);
|
||||
|
||||
jQuery("#tagsFilter").tokenInput(
|
||||
tag_src,
|
||||
{ldelim}
|
||||
hintText: '{'Type in a search term'|@translate}',
|
||||
noResultsText: '{'No results'|@translate}',
|
||||
searchingText: '{'Searching...'|@translate}',
|
||||
animateDropdown: false,
|
||||
preventDuplicates: true,
|
||||
allowFreeTagging: false
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
{/footer_script}
|
||||
{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'}',
|
||||
AreYouSure: "{'Are you sure?'|translate|escape:'javascript'}"
|
||||
};
|
||||
|
||||
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 are_you_sure = "{'Are you sure?'|@translate|@escape:'javascript'}";
|
||||
var applyOnDetails_pattern = "{'on the %d selected photos'|@translate}";
|
||||
var all_elements = [{if !empty($all_elements)}{','|@implode:$all_elements}{/if}];
|
||||
var derivatives = {ldelim}
|
||||
elements: null,
|
||||
done: 0,
|
||||
total: 0,
|
||||
|
||||
finished: function() {ldelim}
|
||||
return derivatives.done == derivatives.total && derivatives.elements && derivatives.elements.length==0;
|
||||
}
|
||||
};
|
||||
|
||||
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}";
|
||||
|
||||
var width_str = '{'Width'|@translate}';
|
||||
var height_str = '{'Height'|@translate}';
|
||||
var max_width_str = '{'Maximum width'|@translate}';
|
||||
var max_height_str = '{'Maximum height'|@translate}';
|
||||
{literal}
|
||||
|
||||
function progress(success) {
|
||||
jQuery('#progressBar').progressBar(derivatives.done, {
|
||||
max: derivatives.total,
|
||||
textFormat: 'fraction',
|
||||
boxImage: 'themes/default/images/progressbar.gif',
|
||||
barImage: 'themes/default/images/progressbg_orange.gif'
|
||||
});
|
||||
if (success !== undefined) {
|
||||
var type = success ? 'regenerateSuccess': 'regenerateError',
|
||||
s = jQuery('[name="'+type+'"]').val();
|
||||
jQuery('[name="'+type+'"]').val(++s);
|
||||
}
|
||||
|
||||
if (derivatives.finished()) {
|
||||
jQuery('#applyAction').click();
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
function checkPermitAction() {
|
||||
var nbSelected = 0;
|
||||
|
@ -193,25 +130,12 @@ $(document).ready(function() {
|
|||
}
|
||||
}
|
||||
|
||||
$('.thumbnails img').tipTip({
|
||||
'delay' : 0,
|
||||
'fadeIn' : 200,
|
||||
'fadeOut' : 200
|
||||
});
|
||||
|
||||
$("[id^=action_]").hide();
|
||||
|
||||
$("select[name=selectAction]").change(function () {
|
||||
$("[id^=action_]").hide();
|
||||
$("#action_"+$(this).prop("value")).show();
|
||||
|
||||
/* make sure the #albumSelect is on the right select box so that the */
|
||||
/* "add new album" popup fills the right select box */
|
||||
if ("associate" == $(this).prop("value") || "move" == $(this).prop("value")) {
|
||||
jQuery("#albumSelect").removeAttr("id");
|
||||
jQuery("#action_"+$(this).prop("value")+" select").attr("id", "albumSelect");
|
||||
}
|
||||
|
||||
if ($(this).val() != -1) {
|
||||
$("#applyActionBlock").show();
|
||||
}
|
||||
|
@ -229,10 +153,10 @@ $(document).ready(function() {
|
|||
checkbox.triggerHandler("shclick",event);
|
||||
|
||||
if ($(checkbox).is(':checked')) {
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
}
|
||||
else {
|
||||
$(wrap2).removeClass('thumbSelected');
|
||||
$(wrap2).removeClass('thumbSelected');
|
||||
}
|
||||
|
||||
checkPermitAction();
|
||||
|
@ -251,7 +175,7 @@ $(document).ready(function() {
|
|||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
$(checkbox).prop('checked', true);
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -263,7 +187,7 @@ $(document).ready(function() {
|
|||
var checkbox = $(this).children("input[type=checkbox]");
|
||||
|
||||
$(checkbox).prop('checked', false);
|
||||
$(wrap2).removeClass("thumbSelected");
|
||||
$(wrap2).removeClass("thumbSelected");
|
||||
});
|
||||
checkPermitAction();
|
||||
return false;
|
||||
|
@ -279,10 +203,10 @@ $(document).ready(function() {
|
|||
$(checkbox).prop('checked', !$(checkbox).is(':checked'));
|
||||
|
||||
if ($(checkbox).is(':checked')) {
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
$(wrap2).addClass("thumbSelected");
|
||||
}
|
||||
else {
|
||||
$(wrap2).removeClass('thumbSelected');
|
||||
$(wrap2).removeClass('thumbSelected');
|
||||
}
|
||||
});
|
||||
checkPermitAction();
|
||||
|
@ -296,75 +220,6 @@ $(document).ready(function() {
|
|||
return false;
|
||||
});
|
||||
|
||||
$("input[name=remove_author]").click(function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$("input[name=author]").hide();
|
||||
}
|
||||
else {
|
||||
$("input[name=author]").show();
|
||||
}
|
||||
});
|
||||
|
||||
$("input[name=remove_title]").click(function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$("input[name=title]").hide();
|
||||
}
|
||||
else {
|
||||
$("input[name=title]").show();
|
||||
}
|
||||
});
|
||||
|
||||
$("input[name=remove_date_creation]").click(function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$("#set_date_creation").hide();
|
||||
}
|
||||
else {
|
||||
$("#set_date_creation").show();
|
||||
}
|
||||
});
|
||||
|
||||
$(".removeFilter").click(function () {
|
||||
var filter = $(this).parent('li').attr("id");
|
||||
filter_disable(filter);
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function filter_enable(filter) {
|
||||
/* show the filter*/
|
||||
$("#"+filter).show();
|
||||
|
||||
/* check the checkbox to declare we use this filter */
|
||||
$("input[type=checkbox][name="+filter+"_use]").prop("checked", true);
|
||||
|
||||
/* forbid to select this filter in the addFilter list */
|
||||
$("#addFilter").children("option[value="+filter+"]").attr("disabled", "disabled");
|
||||
}
|
||||
|
||||
$("#addFilter").change(function () {
|
||||
var filter = $(this).prop("value");
|
||||
filter_enable(filter);
|
||||
$(this).prop("value", -1);
|
||||
});
|
||||
|
||||
function filter_disable(filter) {
|
||||
/* hide the filter line */
|
||||
$("#"+filter).hide();
|
||||
|
||||
/* uncheck the checkbox to declare we do not use this filter */
|
||||
$("input[name="+filter+"_use]").prop("checked", false);
|
||||
|
||||
/* give the possibility to show it again */
|
||||
$("#addFilter").children("option[value="+filter+"]").removeAttr("disabled");
|
||||
}
|
||||
|
||||
$("#removeFilters").click(function() {
|
||||
$("#filterList li").each(function() {
|
||||
var filter = $(this).attr("id");
|
||||
filter_disable(filter);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery('#applyAction').click(function() {
|
||||
var action = jQuery('[name="selectAction"]').val();
|
||||
|
@ -372,9 +227,9 @@ $(document).ready(function() {
|
|||
var d_count = $('#action_delete_derivatives input[type=checkbox]').filter(':checked').length
|
||||
, e_count = $('input[name="setSelected"]').is(':checked') ? nb_thumbs_set : $('.thumbnails input[type=checkbox]').filter(':checked').length;
|
||||
if (d_count*e_count > 500)
|
||||
return confirm(are_you_sure);
|
||||
return confirm(lang.AreYouSure);
|
||||
}
|
||||
|
||||
|
||||
if (action != 'generate_derivatives'
|
||||
|| derivatives.finished() )
|
||||
{
|
||||
|
@ -383,8 +238,8 @@ $(document).ready(function() {
|
|||
|
||||
jQuery('.bulkAction').hide();
|
||||
|
||||
var queuedManager = jQuery.manageAjax.create('queued', {
|
||||
queue: true,
|
||||
var queuedManager = jQuery.manageAjax.create('queued', {
|
||||
queue: true,
|
||||
cacheResponse: false,
|
||||
maxRequests: 1
|
||||
});
|
||||
|
@ -402,174 +257,59 @@ $(document).ready(function() {
|
|||
jQuery('#applyActionBlock').hide();
|
||||
jQuery('select[name="selectAction"]').hide();
|
||||
jQuery('#regenerationMsg').show();
|
||||
|
||||
|
||||
progress();
|
||||
getDerivativeUrls();
|
||||
return false;
|
||||
});
|
||||
|
||||
function getDerivativeUrls() {
|
||||
var ids = derivatives.elements.splice(0, 500);
|
||||
var params = {max_urls: 100000, ids: ids, types: []};
|
||||
jQuery("#action_generate_derivatives input").each( function(i, t) {
|
||||
if ($(t).is(":checked"))
|
||||
params.types.push( t.value );
|
||||
} );
|
||||
|
||||
jQuery.ajax( {
|
||||
type: "POST",
|
||||
url: 'ws.php?format=json&method=pwg.getMissingDerivatives',
|
||||
data: params,
|
||||
dataType: "json",
|
||||
success: function(data) {
|
||||
if (!data.stat || data.stat != "ok") {
|
||||
return;
|
||||
}
|
||||
derivatives.total += data.result.urls.length;
|
||||
progress();
|
||||
for (var i=0; i < data.result.urls.length; i++) {
|
||||
jQuery.manageAjax.add("queued", {
|
||||
type: 'GET',
|
||||
url: data.result.urls[i] + "&ajaxload=true",
|
||||
dataType: 'json',
|
||||
success: ( function(data) { derivatives.done++; progress(true) }),
|
||||
error: ( function(data) { derivatives.done++; progress(false) })
|
||||
});
|
||||
}
|
||||
if (derivatives.elements.length)
|
||||
setTimeout( getDerivativeUrls, 25 * (derivatives.total-derivatives.done));
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
checkPermitAction();
|
||||
|
||||
/* dimensions sliders */
|
||||
/**
|
||||
* find the key from a value in the startStopValues array
|
||||
*/
|
||||
function getSliderKeyFromValue(value, values) {
|
||||
for (var key in values) {
|
||||
if (values[key] == value) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
{/literal}
|
||||
var dimension_values = {ldelim}
|
||||
'width':[{$dimensions.widths}],
|
||||
'height':[{$dimensions.heights}],
|
||||
'ratio':[{$dimensions.ratios}]
|
||||
};
|
||||
|
||||
$("#filter_dimension_width_slider").slider({ldelim}
|
||||
range: true,
|
||||
min: 0,
|
||||
max: dimension_values['width'].length - 1,
|
||||
values: [
|
||||
getSliderKeyFromValue({$dimensions.selected.min_width}, dimension_values['width']),
|
||||
getSliderKeyFromValue({$dimensions.selected.max_width}, dimension_values['width'])
|
||||
],
|
||||
slide: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_width']").val(dimension_values['width'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_width']").val(dimension_values['width'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_width_info").html(sprintf(
|
||||
"{'between %d and %d pixels'|@translate}",
|
||||
dimension_values['width'][ui.values[0]],
|
||||
dimension_values['width'][ui.values[1]]
|
||||
));
|
||||
},
|
||||
change: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_width']").val(dimension_values['width'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_width']").val(dimension_values['width'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_width_info").html(sprintf(
|
||||
"{'between %d and %d pixels'|@translate}",
|
||||
dimension_values['width'][ui.values[0]],
|
||||
dimension_values['width'][ui.values[1]]
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
$("#filter_dimension_height_slider").slider({ldelim}
|
||||
range: true,
|
||||
min: 0,
|
||||
max: dimension_values['height'].length - 1,
|
||||
values: [
|
||||
getSliderKeyFromValue({$dimensions.selected.min_height}, dimension_values['height']),
|
||||
getSliderKeyFromValue({$dimensions.selected.max_height}, dimension_values['height'])
|
||||
],
|
||||
slide: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_height']").val(dimension_values['height'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_height']").val(dimension_values['height'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_height_info").html(sprintf(
|
||||
"{'between %d and %d pixels'|@translate}",
|
||||
dimension_values['height'][ui.values[0]],
|
||||
dimension_values['height'][ui.values[1]]
|
||||
));
|
||||
},
|
||||
change: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_height']").val(dimension_values['height'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_height']").val(dimension_values['height'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_height_info").html(sprintf(
|
||||
"{'between %d and %d pixels'|@translate}",
|
||||
dimension_values['height'][ui.values[0]],
|
||||
dimension_values['height'][ui.values[1]]
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
$("#filter_dimension_ratio_slider").slider({ldelim}
|
||||
range: true,
|
||||
min: 0,
|
||||
max: dimension_values['ratio'].length - 1,
|
||||
values: [
|
||||
getSliderKeyFromValue({$dimensions.selected.min_ratio}, dimension_values['ratio']),
|
||||
getSliderKeyFromValue({$dimensions.selected.max_ratio}, dimension_values['ratio'])
|
||||
],
|
||||
slide: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_ratio']").val(dimension_values['ratio'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_ratio']").val(dimension_values['ratio'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_ratio_info").html(sprintf(
|
||||
"{'between %.2f and %.2f'|@translate}",
|
||||
dimension_values['ratio'][ui.values[0]],
|
||||
dimension_values['ratio'][ui.values[1]]
|
||||
));
|
||||
},
|
||||
change: function(event, ui) {ldelim}
|
||||
$("input[name='filter_dimension_min_ratio']").val(dimension_values['ratio'][ui.values[0]]);
|
||||
$("input[name='filter_dimension_max_ratio']").val(dimension_values['ratio'][ui.values[1]]);
|
||||
|
||||
$("#filter_dimension_ratio_info").html(sprintf(
|
||||
"{'between %.2f and %.2f'|@translate}",
|
||||
dimension_values['ratio'][ui.values[0]],
|
||||
dimension_values['ratio'][ui.values[1]]
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
$("a.dimensions-choice").click(function() {ldelim}
|
||||
var type = jQuery(this).data("type");
|
||||
var min = jQuery(this).data("min");
|
||||
var max = jQuery(this).data("max");
|
||||
|
||||
$("#filter_dimension_"+ type +"_slider").slider("values", 0,
|
||||
getSliderKeyFromValue(min, dimension_values[type])
|
||||
);
|
||||
|
||||
$("#filter_dimension_"+type+"_slider").slider("values", 1,
|
||||
getSliderKeyFromValue(max, dimension_values[type])
|
||||
);
|
||||
jQuery("select[name=filter_prefilter]").change(function() {
|
||||
jQuery("#empty_caddie").toggle(jQuery(this).val() == "caddie");
|
||||
jQuery("#duplicates_options").toggle(jQuery(this).val() == "duplicates");
|
||||
});
|
||||
});
|
||||
|
||||
{*<!-- 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'}'
|
||||
}
|
||||
};
|
||||
|
||||
{/footer_script}
|
||||
|
||||
<div id="batchManagerGlobal">
|
||||
|
@ -577,7 +317,7 @@ $(document).ready(function() {
|
|||
<h2>{'Batch Manager'|@translate}</h2>
|
||||
|
||||
<form action="{$F_ACTION}" method="post">
|
||||
<input type="hidden" name="start" value="{$START}">
|
||||
<input type="hidden" name="start" value="{$START}">
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Filter'|@translate}</legend>
|
||||
|
@ -592,31 +332,36 @@ $(document).ready(function() {
|
|||
<option value="{$prefilter.ID}" {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>
|
||||
|
||||
<span id="duplicates_options" style="{if !isset($filter.prefilter) or $filter.prefilter ne 'duplicates'}display:none{/if}">
|
||||
{'based on'|translate}
|
||||
<input type="checkbox" checked="checked" disabled="disabled"> {'file name'|translate}
|
||||
<label><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><input type="checkbox" name="filter_duplicates_dimensions" {if isset($filter.duplicates_dimensions)}checked="checked"{/if}> {'width & height'|translate}</label>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
|
||||
<li id="filter_category" {if !isset($filter.category)}style="display:none"{/if}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_category_use" class="useFilterCheckbox" {if isset($filter.category)}checked="checked"{/if}>
|
||||
{'Album'|@translate}
|
||||
<select style="width:400px" name="filter_category" size="1">
|
||||
{html_options options=$category_full_name_options selected=$filter_category_selected}
|
||||
</select>
|
||||
<select data-selectize="categories" data-value="{$filter_category_selected|@json_encode|escape:html}"
|
||||
data-default="first" name="filter_category" style="width:600px"></select>
|
||||
<label><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label>
|
||||
</li>
|
||||
|
||||
|
||||
<li id="filter_tags" {if !isset($filter.tags)}style="display:none"{/if}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_tags_use" class="useFilterCheckbox" {if isset($filter.tags)}checked="checked"{/if}>
|
||||
{'Tags'|@translate}
|
||||
<select id="tagsFilter" name="filter_tags">
|
||||
{if isset($filter_tags)}{foreach from=$filter_tags item=tag}
|
||||
<option value="{$tag.id}">{$tag.name}</option>
|
||||
{/foreach}{/if}
|
||||
</select>
|
||||
<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><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><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}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_level_use" class="useFilterCheckbox" {if isset($filter.level)}checked="checked"{/if}>
|
||||
|
@ -626,44 +371,80 @@ $(document).ready(function() {
|
|||
</select>
|
||||
<label><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}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_dimension_use" class="useFilterCheckbox" {if isset($filter.dimension)}checked="checked"{/if}>
|
||||
{'Dimensions'|@translate}
|
||||
|
||||
{'Dimensions'|translate}
|
||||
|
||||
<blockquote>
|
||||
{'Width'|@translate} <span id="filter_dimension_width_info">{'between %d and %d pixels'|@translate:$dimensions.selected.min_width:$dimensions.selected.max_width}</span>
|
||||
| <a class="dimensions-choice" data-type="width" data-min="{$dimensions.bounds.min_width}" data-max="{$dimensions.bounds.max_width}">{'Reset'|@translate}</a>
|
||||
<div id="filter_dimension_width_slider"></div>
|
||||
|
||||
{'Height'|@translate} <span id="filter_dimension_height_info">{'between %d and %d pixels'|@translate:$dimensions.selected.min_height:$dimensions.selected.max_height}</span>
|
||||
| <a class="dimensions-choice" data-type="height" data-min="{$dimensions.bounds.min_height}" data-max="{$dimensions.bounds.max_height}">{'Reset'|@translate}</a>
|
||||
<div id="filter_dimension_height_slider"></div>
|
||||
|
||||
{'Ratio'|@translate} ({'Width'|@translate}/{'Height'|@translate}) <span id="filter_dimension_ratio_info">{'between %.2f and %.2f'|@translate:$dimensions.selected.min_ratio:$dimensions.selected.max_ratio}</span>
|
||||
{if isset($dimensions.ratio_portrait)}
|
||||
| <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_portrait.min}" data-max="{$dimensions.ratio_portrait.max}">{'Portrait'|@translate}</a>
|
||||
{/if}
|
||||
{if isset($dimensions.ratio_square)}
|
||||
| <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_square.min}" data-max="{$dimensions.ratio_square.max}">{'square'|@translate}</a>
|
||||
{/if}
|
||||
{if isset($dimensions.ratio_landscape)}
|
||||
| <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_landscape.min}" data-max="{$dimensions.ratio_landscape.max}">{'Landscape'|@translate}</a>
|
||||
{/if}
|
||||
{if isset($dimensions.ratio_panorama)}
|
||||
| <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_panorama.min}" data-max="{$dimensions.ratio_panorama.max}">{'Panorama'|@translate}</a>
|
||||
{/if}
|
||||
| <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.bounds.min_ratio}" data-max="{$dimensions.bounds.max_ratio}">{'Reset'|@translate}</a>
|
||||
<div id="filter_dimension_ratio_slider"></div>
|
||||
<div data-slider="widths">
|
||||
{'Width'|translate} <span class="slider-info">{'between %d and %d pixels'|translate:$dimensions.selected.min_width:$dimensions.selected.max_width}</span>
|
||||
| <a class="slider-choice" data-min="{$dimensions.bounds.min_width}" data-max="{$dimensions.bounds.max_width}">{'Reset'|translate}</a>
|
||||
<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">
|
||||
{'Height'|translate} <span class="slider-info">{'between %d and %d pixels'|translate:$dimensions.selected.min_height:$dimensions.selected.max_height}</span>
|
||||
| <a class="slider-choice" data-min="{$dimensions.bounds.min_height}" data-max="{$dimensions.bounds.max_height}">{'Reset'|translate}</a>
|
||||
<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">
|
||||
{'Ratio'|translate} ({'Width'|@translate}/{'Height'|@translate}) <span class="slider-info">{'between %.2f and %.2f'|translate:$dimensions.selected.min_ratio:$dimensions.selected.max_ratio}</span>
|
||||
{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}
|
||||
| <a class="slider-choice" data-min="{$dimensions.bounds.min_ratio}" data-max="{$dimensions.bounds.max_ratio}">{'Reset'|translate}</a>
|
||||
<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}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_search_use" class="useFilterCheckbox"{if isset($filter.search)} checked="checked"{/if}>
|
||||
{'Search'|@translate}
|
||||
<input name="q" size=40 value="{$filter.search.q|stripslashes|htmlspecialchars}">
|
||||
{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
|
||||
<a href="admin/popuphelp.php?page=quick_search" onclick="popuphelp(this.href);return false;" title="{'Help'|@translate}"><span class="icon-help-circled"></span></a>
|
||||
{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}>
|
||||
<a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
|
||||
<input type="checkbox" name="filter_filesize_use" class="useFilterCheckbox" {if isset($filter.filesize)}checked="checked"{/if}>
|
||||
{'Filesize'|translate}
|
||||
|
||||
<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" 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>
|
||||
|
||||
<input type="hidden" name="filter_dimension_min_width" value="{$dimensions.selected.min_width}">
|
||||
<input type="hidden" name="filter_dimension_max_width" value="{$dimensions.selected.max_width}">
|
||||
<input type="hidden" name="filter_dimension_min_height" value="{$dimensions.selected.min_height}">
|
||||
<input type="hidden" name="filter_dimension_max_height" value="{$dimensions.selected.max_height}">
|
||||
<input type="hidden" name="filter_dimension_min_ratio" value="{$dimensions.selected.min_ratio}">
|
||||
<input type="hidden" name="filter_dimension_max_ratio" value="{$dimensions.selected.max_ratio}">
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -676,8 +457,10 @@ $(document).ready(function() {
|
|||
<option value="filter_tags" {if isset($filter.tags)}disabled="disabled"{/if}>{'Tags'|@translate}</option>
|
||||
<option value="filter_level" {if isset($filter.level)}disabled="disabled"{/if}>{'Privacy level'|@translate}</option>
|
||||
<option value="filter_dimension" {if isset($filter.dimension)}disabled="disabled"{/if}>{'Dimensions'|@translate}</option>
|
||||
<option value="filter_filesize" {if isset($filter.filesize)}disabled="disabled"{/if}>{'Filesize'|@translate}</option>
|
||||
<option value="filter_search"{if isset($filter.search)} disabled="disabled"{/if}>{'Search'|@translate}</option>
|
||||
</select>
|
||||
<a id="removeFilters" href="">{'Remove all filters'|@translate}</a>
|
||||
<a id="removeFilters">{'Remove all filters'|@translate}</a>
|
||||
</p>
|
||||
|
||||
<p class="actionButtons" id="applyFilterBlock">
|
||||
|
@ -770,11 +553,11 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
<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($dissociate_options)}
|
||||
{if !empty($associated_categories)}
|
||||
<option value="dissociate">{'Dissociate from album'|@translate}</option>
|
||||
{/if}
|
||||
<option value="add_tags">{'Add tags'|@translate}</option>
|
||||
{if !empty($DEL_TAG_SELECTION)}
|
||||
{if !empty($associated_tags)}
|
||||
<option value="del_tags">{'remove tags'|@translate}</option>
|
||||
{/if}
|
||||
<option value="author">{'Set author'|@translate}</option>
|
||||
|
@ -803,38 +586,42 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
|
||||
<!-- associate -->
|
||||
<div id="action_associate" class="bulkAction">
|
||||
<select style="width:400px" name="associate" size="1">
|
||||
{html_options options=$category_full_name_options}
|
||||
</select>
|
||||
<br>{'... or '|@translate} <a href="#" class="addAlbumOpen" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
<select data-selectize="categories" data-default="first" name="associate" style="width:600px"></select>
|
||||
<br>{'... or '|@translate}
|
||||
<a href="#" data-add-album="associate" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<!-- move -->
|
||||
<div id="action_move" class="bulkAction">
|
||||
<select style="width:400px" name="move" size="1">
|
||||
{html_options options=$category_full_name_options}
|
||||
</select>
|
||||
<br>{'... or '|@translate} <a href="#" class="addAlbumOpen" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
<select data-selectize="categories" data-default="first" name="move" style="width:600px"></select>
|
||||
<br>{'... or '|@translate}
|
||||
<a href="#" data-add-album="move" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- dissociate -->
|
||||
<div id="action_dissociate" class="bulkAction">
|
||||
<select style="width:400px" name="dissociate" size="1">
|
||||
{if !empty($dissociate_options)}{html_options options=$dissociate_options }{/if}
|
||||
</select>
|
||||
<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 id="tags" name="add_tags">
|
||||
</select>
|
||||
<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($DEL_TAG_SELECTION)}{$DEL_TAG_SELECTION}{/if}
|
||||
{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 -->
|
||||
|
@ -842,7 +629,7 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
<label><input type="checkbox" name="remove_author"> {'remove author'|@translate}</label><br>
|
||||
{assign var='authorDefaultValue' value='Type here the author name'|@translate}
|
||||
<input type="text" class="large" name="author" value="{$authorDefaultValue}" onfocus="this.value=(this.value=='{$authorDefaultValue|@escape:javascript}') ? '' : this.value;" onblur="this.value=(this.value=='') ? '{$authorDefaultValue|@escape:javascript}' : this.value;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- title -->
|
||||
<div id="action_title" class="bulkAction">
|
||||
|
@ -855,22 +642,11 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
<div id="action_date_creation" class="bulkAction">
|
||||
<label><input type="checkbox" name="remove_date_creation"> {'remove creation date'|@translate}</label><br>
|
||||
<div id="set_date_creation">
|
||||
<select id="date_creation_day" name="date_creation_day">
|
||||
<option value="0">--</option>
|
||||
{section name=day start=1 loop=32}
|
||||
<option value="{$smarty.section.day.index}" {if $smarty.section.day.index==$DATE_CREATION_DAY}selected="selected"{/if}>{$smarty.section.day.index}</option>
|
||||
{/section}
|
||||
</select>
|
||||
<select id="date_creation_month" name="date_creation_month">
|
||||
{html_options options=$month_list selected=$DATE_CREATION_MONTH}
|
||||
</select>
|
||||
<input id="date_creation_year"
|
||||
name="date_creation_year"
|
||||
type="text"
|
||||
size="4"
|
||||
maxlength="4"
|
||||
value="{$DATE_CREATION_YEAR}">
|
||||
<input id="date_creation_linked_date" name="date_creation_linked_date" type="hidden" size="10" disabled="disabled">
|
||||
<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>
|
||||
|
||||
|
@ -893,14 +669,6 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
{foreach from=$generate_derivatives_types key=type item=disp}
|
||||
<label><input type="checkbox" name="generate_derivatives_type[]" value="{$type}"> {$disp}</label>
|
||||
{/foreach}
|
||||
{footer_script}
|
||||
function selectGenerateDerivAll() {ldelim}
|
||||
$("#action_generate_derivatives input[type=checkbox]").prop("checked", true);
|
||||
}
|
||||
function selectGenerateDerivNone() {ldelim}
|
||||
$("#action_generate_derivatives input[type=checkbox]").prop("checked", false);
|
||||
}
|
||||
{/footer_script}
|
||||
</div>
|
||||
|
||||
<!-- delete derivatives -->
|
||||
|
@ -911,16 +679,8 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
{foreach from=$del_derivatives_types key=type item=disp}
|
||||
<label><input type="checkbox" name="del_derivatives_type[]" value="{$type}"> {$disp}</label>
|
||||
{/foreach}
|
||||
{footer_script}
|
||||
function selectDelDerivAll() {ldelim}
|
||||
$("#action_delete_derivatives input[type=checkbox]").prop("checked", true);
|
||||
}
|
||||
function selectDelDerivNone() {ldelim}
|
||||
$("#action_delete_derivatives input[type=checkbox]").prop("checked", false);
|
||||
}
|
||||
{/footer_script}
|
||||
</div>
|
||||
|
||||
|
||||
<!-- progress bar -->
|
||||
<div id="regenerationMsg" class="bulkAction" style="display:none">
|
||||
<p id="regenerationText" style="margin-bottom:10px;">{'Generate multiple size images'|@translate}</p>
|
||||
|
|
|
@ -2,25 +2,35 @@
|
|||
{include file='include/datepicker.inc.tpl'}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
|
||||
{combine_script id='jquery.tokeninput' load='async' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
|
||||
{footer_script require='jquery.tokeninput'}
|
||||
jQuery(document).ready(function() {ldelim}
|
||||
jQuery('select[name|="tags"]').tokenInput(
|
||||
[{foreach from=$tags item=tag name=tags}{ldelim}name:"{$tag.name|@escape:'javascript'}",id:"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}],
|
||||
{ldelim}
|
||||
hintText: '{'Type in a search term'|@translate}',
|
||||
noResultsText: '{'No results'|@translate}',
|
||||
searchingText: '{'Searching...'|@translate}',
|
||||
newText: ' ({'new'|@translate})',
|
||||
animateDropdown: false,
|
||||
preventDuplicates: true,
|
||||
allowFreeTagging: true
|
||||
}
|
||||
);
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
jQuery("a.preview-box").colorbox();
|
||||
{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}
|
||||
(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}'
|
||||
}});
|
||||
|
||||
{* <!-- DATEPICKER --> *}
|
||||
jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
||||
jQuery('[data-datepicker]').pwgDatepicker({
|
||||
showTimepicker: true,
|
||||
cancelButton: '{'Cancel'|translate}'
|
||||
});
|
||||
});
|
||||
|
||||
{* <!-- THUMBNAILS --> *}
|
||||
jQuery("a.preview-box").colorbox();
|
||||
}());
|
||||
{/footer_script}
|
||||
|
||||
<h2>{'Batch Manager'|@translate}</h2>
|
||||
|
@ -32,7 +42,6 @@ jQuery(document).ready(function() {ldelim}
|
|||
<a href="{$U_ELEMENTS_PAGE}&display=5">5</a>
|
||||
| <a href="{$U_ELEMENTS_PAGE}&display=10">10</a>
|
||||
| <a href="{$U_ELEMENTS_PAGE}&display=50">50</a>
|
||||
| <a href="{$U_ELEMENTS_PAGE}&display=all">{'all'|@translate}</a>
|
||||
</p>
|
||||
|
||||
</fieldset>
|
||||
|
@ -46,9 +55,8 @@ jQuery(document).ready(function() {ldelim}
|
|||
<legend>{$element.LEGEND}</legend>
|
||||
|
||||
<span class="thumb">
|
||||
<a href="{$element.FILE_SRC}" class="preview-box" title="{$element.LEGEND|@htmlspecialchars}"><img src="{$element.TN_SRC}" alt=""></a>
|
||||
<br/>
|
||||
<a href="{$element.U_EDIT}">{'Edit'|@translate}</a>
|
||||
<a href="{$element.FILE_SRC}" class="preview-box icon-zoom-in" title="{$element.LEGEND|@htmlspecialchars}"><img src="{$element.TN_SRC}" alt=""></a>
|
||||
<a href="{$element.U_EDIT}" class="icon-pencil">{'Edit'|@translate}</a>
|
||||
</span>
|
||||
|
||||
<table>
|
||||
|
@ -66,28 +74,12 @@ jQuery(document).ready(function() {ldelim}
|
|||
<tr>
|
||||
<td><strong>{'Creation date'|@translate}</strong></td>
|
||||
<td>
|
||||
<label><input type="radio" name="date_creation_action-{$element.id}" value="unset"> {'unset'|@translate}</label>
|
||||
<label><input type="radio" name="date_creation_action-{$element.id}" value="set" id="date_creation_action_set-{$element.id}"> {'set to'|@translate}</label>
|
||||
|
||||
<select id="date_creation_day-{$element.id}" name="date_creation_day-{$element.id}">
|
||||
<option value="0">--</option>
|
||||
{section name=day start=1 loop=32}
|
||||
<option value="{$smarty.section.day.index}" {if $smarty.section.day.index==$element.DATE_CREATION_DAY}selected="selected"{/if}>{$smarty.section.day.index}</option>
|
||||
{/section}
|
||||
</select>
|
||||
<select id="date_creation_month-{$element.id}" name="date_creation_month-{$element.id}">
|
||||
{html_options options=$month_list selected=$element.DATE_CREATION_MONTH}
|
||||
</select>
|
||||
<input id="date_creation_year-{$element.id}"
|
||||
name="date_creation_year-{$element.id}"
|
||||
type="text"
|
||||
size="4"
|
||||
maxlength="4"
|
||||
value="{$element.DATE_CREATION_YEAR}">
|
||||
<input id="date_creation_linked_date-{$element.id}" name="date_creation_linked_date-{$element.id}" type="hidden" size="10" disabled="disabled">
|
||||
{footer_script}
|
||||
pwg_initialization_datepicker("#date_creation_day-{$element.id}", "#date_creation_month-{$element.id}", "#date_creation_year-{$element.id}", "#date_creation_linked_date-{$element.id}", "#date_creation_action_set-{$element.id}");
|
||||
{/footer_script}
|
||||
<input type="hidden" name="date_creation-{$element.id}" value="{$element.DATE_CREATION}">
|
||||
<label>
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="date_creation-{$element.id}" data-datepicker-unset="date_creation_unset-{$element.id}" readonly>
|
||||
</label>
|
||||
<a href="#" class="icon-cancel-circled" id="date_creation_unset-{$element.id}">{'unset'|translate}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -102,13 +94,9 @@ jQuery(document).ready(function() {ldelim}
|
|||
<tr>
|
||||
<td><strong>{'Tags'|@translate}</strong></td>
|
||||
<td>
|
||||
|
||||
<select name="tags-{$element.id}">
|
||||
{foreach from=$element.TAGS item=tag}
|
||||
<option value="{$tag.id}" class="selected">{$tag.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
<select data-selectize="tags" data-value="{$element.TAGS|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-create="true" name="tags-{$element.id}[]" multiple style="width:500px;"></select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -130,16 +118,4 @@ jQuery(document).ready(function() {ldelim}
|
|||
</p>
|
||||
{/if}
|
||||
|
||||
</form>
|
||||
|
||||
{footer_script}
|
||||
{literal}$(document).ready(function() {
|
||||
$(".elementEdit img")
|
||||
.fadeTo("slow", 0.6) // Opacity on page load
|
||||
.hover(function(){
|
||||
$(this).fadeTo("slow", 1.0); // Opacity on hover
|
||||
},function(){
|
||||
$(this).fadeTo("slow", 0.6); // Opacity on mouseout
|
||||
});
|
||||
});{/literal}
|
||||
{/footer_script}
|
||||
</form>
|
|
@ -85,8 +85,9 @@ jQuery(document).ready(function(){
|
|||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
|
||||
<p><strong>{'Sort order'|@translate}</strong>
|
||||
<br><label><input type="radio" value="asc" name="ascdesc" checked="checked">{'ascending'|@translate}</label>
|
||||
<br><label><input type="radio" value="desc" name="ascdesc">{'descending'|@translate}</label>
|
||||
{foreach from=$sort_orders key=sort_code item=sort_label}
|
||||
<br><label><input type="radio" value="{$sort_code}" name="order_by" {if $sort_code eq $sort_order_checked}checked="checked"{/if}> {$sort_label}</label>
|
||||
{/foreach}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
@ -1,3 +1,36 @@
|
|||
{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]'), {
|
||||
default: 0,
|
||||
filter: function(categories, options) {
|
||||
// remove itself and children
|
||||
var filtered = jQuery.grep(categories, function(cat) {
|
||||
return !(/\b{$CAT_ID}\b/.test(cat.uppercats));
|
||||
});
|
||||
|
||||
filtered.push({
|
||||
id: 0,
|
||||
fullname: '------------',
|
||||
global_rank: 0
|
||||
});
|
||||
|
||||
return filtered;
|
||||
}
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
|
||||
<div class="titrePage">
|
||||
<h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> › {'Edit album'|@translate} {$TABSHEET_TITLE}</h2>
|
||||
</div>
|
||||
|
@ -71,21 +104,19 @@
|
|||
<textarea cols="50" rows="5" name="comment" id="comment" class="description">{$CAT_COMMENT}</textarea>
|
||||
</p>
|
||||
|
||||
{if isset($move_cat_options) }
|
||||
{if isset($parent_category) }
|
||||
<p>
|
||||
<strong>{'Parent album'|@translate}</strong>
|
||||
<br>
|
||||
<select class="categoryDropDown" name="parent">
|
||||
<option value="0">------------</option>
|
||||
{html_options options=$move_cat_options selected=$move_cat_options_selected }
|
||||
</select>
|
||||
<select data-selectize="categories" data-value="{$parent_category|@json_encode|escape:html}"
|
||||
name="parent" style="width:600px"></select>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<p>
|
||||
<strong>{'Lock'|@translate}</strong>
|
||||
<br>
|
||||
{html_radios name='visible' values=['true','false'] output=['No'|translate,'Yes'|translate] selected=$CAT_VISIBLE}
|
||||
{html_radios name='visible' values=['true','true_sub','false'] output=['No'|translate,'No and unlock sub-albums'|translate,'Yes'|translate] selected=$CAT_VISIBLE}
|
||||
</p>
|
||||
|
||||
{if isset($CAT_COMMENTABLE)}
|
||||
|
@ -93,6 +124,10 @@
|
|||
<strong>{'Comments'|@translate}</strong>
|
||||
<br>
|
||||
{html_radios name='commentable' values=['false','true'] output=['No'|translate,'Yes'|translate] selected=$CAT_COMMENTABLE}
|
||||
<label id="applytoSubAction">
|
||||
<input type="checkbox" name="apply_commentable_on_sub">
|
||||
{'Apply to sub-albums'|@translate}
|
||||
</label>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
|
|
|
@ -1,39 +1,52 @@
|
|||
{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/chosen.css"}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function() {
|
||||
jQuery(".chzn-select").chosen();
|
||||
{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"}
|
||||
|
||||
function checkStatusOptions() {
|
||||
if (jQuery("input[name=status]:checked").val() == "private") {
|
||||
jQuery("#privateOptions, #applytoSubAction").show();
|
||||
}
|
||||
else {
|
||||
jQuery("#privateOptions, #applytoSubAction").hide();
|
||||
}
|
||||
}
|
||||
|
||||
checkStatusOptions();
|
||||
jQuery("#selectStatus").change(function() {
|
||||
checkStatusOptions();
|
||||
});
|
||||
|
||||
jQuery("#indirectPermissionsDetailsShow").click(function(){
|
||||
jQuery("#indirectPermissionsDetailsShow").hide();
|
||||
jQuery("#indirectPermissionsDetailsHide").show();
|
||||
jQuery("#indirectPermissionsDetails").show();
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#indirectPermissionsDetailsHide").click(function(){
|
||||
jQuery("#indirectPermissionsDetailsShow").show();
|
||||
jQuery("#indirectPermissionsDetailsHide").hide();
|
||||
jQuery("#indirectPermissionsDetails").hide();
|
||||
return false;
|
||||
});
|
||||
{footer_script}
|
||||
(function(){
|
||||
{* <!-- GROUPS --> *}
|
||||
var groupsCache = new GroupsCache({
|
||||
serverKey: '{$CACHE_KEYS.groups}',
|
||||
serverId: '{$CACHE_KEYS._hash}',
|
||||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
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, #applytoSubAction").show();
|
||||
}
|
||||
else {
|
||||
jQuery("#privateOptions, #applytoSubAction").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}
|
||||
|
||||
<div class="titrePage">
|
||||
<h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> › {'Edit album'|@translate} {$TABSHEET_TITLE}</h2>
|
||||
|
@ -58,9 +71,9 @@ jQuery(document).ready(function() {
|
|||
{if count($groups) > 0}
|
||||
<strong>{'Permission granted for groups'|@translate}</strong>
|
||||
<br>
|
||||
<select data-placeholder="{'Select groups...'|@translate}" class="chzn-select" multiple style="width:700px;" name="groups[]">
|
||||
{html_options options=$groups selected=$groups_selected}
|
||||
</select>
|
||||
<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}
|
||||
|
@ -69,16 +82,16 @@ jQuery(document).ready(function() {
|
|||
<p>
|
||||
<strong>{'Permission granted for users'|@translate}</strong>
|
||||
<br>
|
||||
<select data-placeholder="{'Select users...'|@translate}" class="chzn-select" multiple style="width:700px;" name="users[]">
|
||||
{html_options options=$users selected=$users_selected}
|
||||
</select>
|
||||
<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)}
|
||||
{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="#" id="indirectPermissionsDetailsHide" style="display:none">{'hide details'|@translate}</a>
|
||||
<a href="#" id="indirectPermissionsDetailsShow">{'show details'|@translate}</a>
|
||||
<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}
|
||||
|
@ -150,7 +163,10 @@ jQuery(document).ready(function() {
|
|||
|
||||
<p style="margin:12px;text-align:left;">
|
||||
<input class="submit" type="submit" value="{'Save Settings'|@translate}" name="submit">
|
||||
<label id="applytoSubAction" style="display:none;"><input type="checkbox" name="apply_on_sub" {if $INHERIT}checked="checked"{/if}>{'Apply to sub-albums'|@translate}</label>
|
||||
<label id="applytoSubAction" style="display:none;">
|
||||
<input type="checkbox" name="apply_on_sub" {if $INHERIT}checked="checked"{/if}>
|
||||
{'Apply to sub-albums'|@translate}
|
||||
</label>
|
||||
</p>
|
||||
|
||||
<input type="hidden" name="pwg_token" value="{$PWG_TOKEN}">
|
||||
|
|
|
@ -65,7 +65,7 @@ jQuery(document).ready(function(){
|
|||
<td>
|
||||
<div class="comment">
|
||||
<a class="illustration" href="{$comment.U_PICTURE}"><img src="{$comment.TN_SRC}"></a>
|
||||
<p class="commentHeader">{if $comment.IS_PENDING}<span class="pendingFlag">{'Waiting'|@translate}</span> - {/if}<strong>{$comment.AUTHOR}</strong> - <em>{$comment.DATE}</em></p>
|
||||
<p class="commentHeader">{if $comment.IS_PENDING}<span class="pendingFlag">{'Waiting'|@translate}</span> - {/if}{if !empty($comment.IP)}{$comment.IP} - {/if}<strong>{$comment.AUTHOR}</strong> - <em>{$comment.DATE}</em></p>
|
||||
<blockquote>{$comment.CONTENT}</blockquote>
|
||||
</div>
|
||||
</td>
|
||||
|
|
|
@ -1,852 +0,0 @@
|
|||
{footer_script}
|
||||
(function(){
|
||||
var targets = {
|
||||
'input[name="rate"]' : '#rate_anonymous',
|
||||
'input[name="allow_user_registration"]' : '#email_admin_on_new_user',
|
||||
'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);
|
||||
};
|
||||
}());
|
||||
{/footer_script}
|
||||
|
||||
<h2>{'Piwigo configuration'|@translate} {$TABSHEET_TITLE}</h2>
|
||||
|
||||
{if !isset($default)}
|
||||
<form method="post" action="{$F_ACTION}" class="properties"{if isset($watermark)} enctype="multipart/form-data"{/if}>
|
||||
{/if}
|
||||
|
||||
<div id="configContent">
|
||||
{if isset($main)}
|
||||
<fieldset class="mainConf">
|
||||
<legend>{'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>
|
||||
|
||||
{if !isset($ORDER_BY_IS_CUSTOM)}
|
||||
{footer_script require='jquery'}
|
||||
(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();
|
||||
}());
|
||||
{/footer_script}
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="mainConf">
|
||||
<legend>{'Permissions'|translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="rate" {if ($main.rate)}checked="checked"{/if}>
|
||||
{'Allow rating'|@translate}
|
||||
</label>
|
||||
|
||||
<label id="rate_anonymous" class="no-bold">
|
||||
<input type="checkbox" name="rate_anonymous" {if ($main.rate_anonymous)}checked="checked"{/if}>
|
||||
{'Rating by guests'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="allow_user_registration" {if ($main.allow_user_registration)}checked="checked"{/if}>
|
||||
{'Allow user registration'|@translate}
|
||||
</label>
|
||||
|
||||
<label id="email_admin_on_new_user" class="no-bold">
|
||||
<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>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="allow_user_customization" {if ($main.allow_user_customization)}checked="checked"{/if}>
|
||||
{'Allow user customization'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="obligatory_user_mail_address" {if ($main.obligatory_user_mail_address)}checked="checked"{/if}>
|
||||
{'Mail address is obligatory for all users'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{footer_script require='jquery'}
|
||||
jQuery("#activate_comments").change(function(){
|
||||
if ($(this).is(':checked')) {
|
||||
jQuery("#comments_param_warp").show();
|
||||
} else {
|
||||
jQuery("#comments_param_warp").hide();
|
||||
}
|
||||
});
|
||||
{/footer_script}
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="mainConf">
|
||||
<legend>{'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="no-bold">
|
||||
<input type="checkbox" name="history_guest" {if ($main.history_guest)}checked="checked"{/if}>
|
||||
{'simple visitors'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="no-bold">
|
||||
<input type="checkbox" name="log" {if ($main.log)}checked="checked"{/if}>
|
||||
{'registered users'|@translate}
|
||||
</label>
|
||||
|
||||
<label class="no-bold">
|
||||
<input type="checkbox" name="history_admin" {if ($main.history_admin)}checked="checked"{/if}>
|
||||
{'administrators'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>{'Mail theme'|@translate}</label>
|
||||
|
||||
<div class="themeBoxes">
|
||||
{foreach from=$main.mail_theme_options item=name key=theme}
|
||||
<div class="themeBox {if $main.mail_theme==$theme}themeDefault{/if}">
|
||||
<label>
|
||||
<div class="themeName">
|
||||
<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">{'Preview'|translate}</a>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</li>
|
||||
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
{footer_script require='jquery'}
|
||||
jQuery(".themeBoxes a").colorbox();
|
||||
|
||||
jQuery("input[name='mail_theme']").change(function() {
|
||||
jQuery("input[name='mail_theme']").parents(".themeBox").removeClass("themeDefault");
|
||||
jQuery(this).parents(".themeBox").addClass("themeDefault");
|
||||
});
|
||||
{/footer_script}
|
||||
</ul>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
{if isset($comments)}
|
||||
<fieldset id="commentsConf" class="no-border">
|
||||
<legend></legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<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_warp"{if not ($comments.activate_comments)} style="display:none;"{/if}>
|
||||
<li>
|
||||
<label>
|
||||
<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>
|
||||
<input type="checkbox" name="comments_validation" {if ($comments.comments_validation)}checked="checked"{/if}>
|
||||
{'Validation'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="comments_author_mandatory" {if ($comments.comments_author_mandatory)}checked="checked"{/if}>
|
||||
{'Username is mandatory'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="comments_email_mandatory" {if ($comments.comments_email_mandatory)}checked="checked"{/if}>
|
||||
{'Email address is mandatory'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<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>
|
||||
<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="no-bold">
|
||||
<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="no-bold">
|
||||
<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="no-bold">
|
||||
<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="no-bold">
|
||||
<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>
|
||||
{/if}
|
||||
|
||||
{if isset($sizes)}
|
||||
|
||||
{footer_script}
|
||||
(function(){
|
||||
var labelMaxWidth = "{'Maximum width'|@translate}",
|
||||
labelWidth = "{'Width'|@translate}",
|
||||
labelMaxHeight = "{'Maximum height'|@translate}",
|
||||
labelHeight = "{'Height'|@translate}";
|
||||
|
||||
function toggleResizeFields(size) {
|
||||
var checkbox = jQuery("#original_resize");
|
||||
var needToggle = jQuery("#sizeEdit-original");
|
||||
|
||||
if (jQuery(checkbox).is(':checked')) {
|
||||
needToggle.show();
|
||||
}
|
||||
else {
|
||||
needToggle.hide();
|
||||
}
|
||||
}
|
||||
|
||||
toggleResizeFields("original");
|
||||
jQuery("#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}{literal}
|
||||
.sizeEnable {width:50px;}
|
||||
.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;}
|
||||
{/literal}{/html_style}
|
||||
|
||||
<fieldset id="sizesConf">
|
||||
<legend>{'Original Size'|@translate}</legend>
|
||||
{if $is_gd}
|
||||
<div>
|
||||
{'Resize after upload disabled due to the use of GD as graphic library'|@translate}
|
||||
<input type="checkbox" name="original_resize" id="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 for="original_resize">
|
||||
<input type="checkbox" name="original_resize" id="original_resize" {if ($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>{'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>
|
||||
<span class="sizeEnable">
|
||||
{if $d.must_enable}
|
||||
✔
|
||||
{else}
|
||||
<input type="checkbox" name="d[{$type}][enabled]" {if $d.enabled}checked="checked"{/if}>
|
||||
{/if}
|
||||
</span>
|
||||
{$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>
|
||||
<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" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'Reset to default values'|@translate}</a>
|
||||
</p>
|
||||
|
||||
{if !empty($custom_derivatives)}
|
||||
<fieldset class="sizeDetails">
|
||||
<legend>{'custom'|@translate}</legend>
|
||||
<table style="margin:0">
|
||||
{foreach from=$custom_derivatives item=time key=custom}
|
||||
<tr><td><label><input type="checkbox" name="delete_custom_derivative_{$custom}"> {'Delete'|@translate} {$custom} ({'Last hit'|@translate}: {$time})</label></td></tr>
|
||||
{/foreach}
|
||||
</table>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
{if isset($watermark)}
|
||||
|
||||
{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}
|
||||
|
||||
<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>{* #selectWatermark *}
|
||||
<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>{* #addWatermark *}
|
||||
</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">{'top right corner'|@translate} <input name="w[position]" type="radio" value="topright"{if $watermark.position eq 'topright'} checked="checked"{/if}></label>
|
||||
<label><input name="w[position]" type="radio" value="topleft"{if $watermark.position eq 'topleft'} checked="checked"{/if}> {'top left corner'|@translate}</label>
|
||||
<label class="middle"><input name="w[position]" type="radio" value="middle"{if $watermark.position eq 'middle'} checked="checked"{/if}> {'middle'|@translate}</label>
|
||||
<label class="right">{'bottom right corner'|@translate} <input name="w[position]" type="radio" value="bottomright"{if $watermark.position eq 'bottomright'} checked="checked"{/if}></label>
|
||||
<label><input name="w[position]" type="radio" value="bottomleft"{if $watermark.position eq 'bottomleft'} checked="checked"{/if}> {'bottom left corner'|@translate}</label>
|
||||
</div>
|
||||
|
||||
<label style="display:block;margin-top:10px;font-weight:normal;"><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>
|
||||
</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>
|
||||
|
||||
{/if} {* end of watermark section *}
|
||||
|
||||
{if isset($display)}
|
||||
<fieldset id="indexDisplayConf">
|
||||
<legend>{'Main Page'|@translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
{'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>{'Photo Page'|@translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<input type="checkbox" name="picture_navigation_icons" {if ($display.picture_navigation_icons)}checked="checked"{/if}>
|
||||
{'Activate Navigation Bar'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_navigation_thumb" {if ($display.picture_navigation_thumb)}checked="checked"{/if}>
|
||||
{'Activate Navigation Thumbnails'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_menu" {if ($display.picture_menu)}checked="checked"{/if}>
|
||||
{'Show menubar'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="pictureInfoConf">
|
||||
<legend>{'Photo Properties'|@translate}</legend>
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[author]" {if ($display.picture_informations.author)}checked="checked"{/if}>
|
||||
{'Author'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[created_on]" {if ($display.picture_informations.created_on)}checked="checked"{/if}>
|
||||
{'Created on'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[posted_on]" {if ($display.picture_informations.posted_on)}checked="checked"{/if}>
|
||||
{'Posted on'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[dimensions]" {if ($display.picture_informations.dimensions)}checked="checked"{/if}>
|
||||
{'Dimensions'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[file]" {if ($display.picture_informations.file)}checked="checked"{/if}>
|
||||
{'File'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[filesize]" {if ($display.picture_informations.filesize)}checked="checked"{/if}>
|
||||
{'Filesize'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[tags]" {if ($display.picture_informations.tags)}checked="checked"{/if}>
|
||||
{'Tags'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[categories]" {if ($display.picture_informations.categories)}checked="checked"{/if}>
|
||||
{'Albums'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[visits]" {if ($display.picture_informations.visits)}checked="checked"{/if}>
|
||||
{'Visits'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[rating_score]" {if ($display.picture_informations.rating_score)}checked="checked"{/if}>
|
||||
{'Rating score'|@translate}
|
||||
</label>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<label>
|
||||
<input type="checkbox" name="picture_informations[privacy_level]" {if ($display.picture_informations.privacy_level)}checked="checked"{/if}>
|
||||
{'Who can see this photo?'|@translate} ({'available for administrators only'|@translate})
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
</div> <!-- configContent -->
|
||||
|
||||
{if !isset($default)}
|
||||
<p class="formButtons">
|
||||
<input type="submit" name="submit" value="{'Save Settings'|@translate}">
|
||||
</p>
|
||||
</form>
|
||||
{/if}
|
||||
|
||||
{if isset($default)}
|
||||
<div id="configContent">
|
||||
{$PROFILE_CONTENT}
|
||||
</div>
|
||||
{/if}
|
|
@ -64,7 +64,7 @@ jQuery('.thumbnail').tipTip({
|
|||
<legend>{'Sort order'|@translate}</legend>
|
||||
<p class="field">
|
||||
<input type="radio" name="image_order_choice" id="image_order_default" value="default"{if $image_order_choice=='default'} checked="checked"{/if}>
|
||||
<label for="image_order_default">{'Use the default photo sort order (defined in the configuration file)'|@translate}</label>
|
||||
<label for="image_order_default">{'Use the default photo sort order'|@translate}</label>
|
||||
</p>
|
||||
<p class="field">
|
||||
<input type="radio" name="image_order_choice" id="image_order_rank" value="rank"{if $image_order_choice=='rank'} checked="checked"{/if}>
|
||||
|
|
|
@ -2,82 +2,59 @@
|
|||
Warning : This is the admin pages footer only
|
||||
don't be confusing with the public page footer
|
||||
*}
|
||||
</div> <!-- pwgMain -->
|
||||
</div>{* <!-- pwgMain --> *}
|
||||
|
||||
{if isset($footer_elements)}
|
||||
{foreach from=$footer_elements item=v}
|
||||
{$v}
|
||||
{foreach from=$footer_elements item=elt}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
{if isset($debug.QUERIES_LIST)}
|
||||
<div id="debug">
|
||||
{$debug.QUERIES_LIST}
|
||||
{$debug.QUERIES_LIST}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="footer">
|
||||
<div id="piwigoInfos">
|
||||
{* Please, do not remove this copyright. If you really want to,
|
||||
contact us on http://piwigo.org to find a solution on how
|
||||
to show the origin of the script...
|
||||
*}
|
||||
|
||||
{'Powered by'|@translate}
|
||||
<a class="externalLink" href="{$PHPWG_URL}" title="{'Visit Piwigo project website'|@translate}">
|
||||
<span class="Piwigo">Piwigo</span></a>
|
||||
{'Powered by'|translate}
|
||||
<a class="externalLink tiptip" href="{$PHPWG_URL}" title="{'Visit Piwigo project website'|translate}"><span class="Piwigo">Piwigo</span></a>
|
||||
{$VERSION}
|
||||
| <a class="externalLink" href="{$pwgmenu.WIKI}" title="{'Read Piwigo Documentation'|@translate}">{'Documentation'|@translate}</a>
|
||||
| <a class="externalLink" href="{$pwgmenu.FORUM}" title="{'Get Support on Piwigo Forum'|@translate}">{'Support'|@translate}</a>
|
||||
</div> <!-- piwigoInfos -->
|
||||
| <a class="externalLink tiptip" href="{$pwgmenu.WIKI}" title="{'Read Piwigo Documentation'|translate}">{'Documentation'|translate}</a>
|
||||
| <a class="externalLink tiptip" href="{$pwgmenu.FORUM}" title="{'Get Support on Piwigo Forum'|translate}">{'Support'|translate}</a>
|
||||
</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}
|
||||
{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 --> *}
|
||||
|
||||
|
||||
{'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 -->
|
||||
|
||||
|
||||
{combine_script id='jquery.tipTip' load='async' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
{combine_script id='jquery.tipTip' load='footer' path='themes/default/js/plugins/jquery.tipTip.minified.js'}
|
||||
{footer_script require='jquery.tipTip'}
|
||||
jQuery(document).ready(function() {ldelim}
|
||||
jQuery('#pwgHead A[title], #footer A[title], .themeActions .tiptip, .languageActions .tiptip').tipTip({ldelim}
|
||||
'delay' : 0,
|
||||
'fadeIn' : 200,
|
||||
'fadeOut' : 200
|
||||
});
|
||||
jQuery('.tiptip').tipTip({
|
||||
delay: 0,
|
||||
fadeIn: 200,
|
||||
fadeOut: 200
|
||||
});
|
||||
|
||||
jQuery('a.externalLink').click(function() {
|
||||
window.open(jQuery(this).attr("href"));
|
||||
return false;
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<!-- BEGIN get_combined_scripts -->
|
||||
<!-- BEGIN get_combined -->
|
||||
{get_combined_scripts load='footer'}
|
||||
<!-- END get_combined_scripts -->
|
||||
|
||||
{literal}
|
||||
<script type='text/javascript'>
|
||||
jQuery(document).ready(function() {
|
||||
$("a.externalLink").click(function() {
|
||||
window.open($(this).attr("href"));
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
|
||||
{if not $ENABLE_SYNCHRONIZATION}
|
||||
{literal}
|
||||
<script type='text/javascript'>
|
||||
$(document).ready(function() {
|
||||
$("#helpSynchro").hide();
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
{/if}
|
||||
<!-- END get_combined -->
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,42 +1,39 @@
|
|||
{*
|
||||
|
||||
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>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={$CONTENT_ENCODING}">
|
||||
<meta name="generator" content="Piwigo (aka PWG), see piwigo.org">
|
||||
<meta charset="{$CONTENT_ENCODING}">
|
||||
<title>{$GALLERY_TITLE} :: {$PAGE_TITLE}</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{$ROOT_URL}{$themeconf.icon_dir}/favicon.ico">
|
||||
|
||||
{get_combined_css}
|
||||
{strip}
|
||||
{combine_css path="admin/themes/default/fontello/css/fontello.css" order=-10}
|
||||
{foreach from=$themes item=theme}
|
||||
{if $theme.load_css}
|
||||
{combine_css path="admin/themes/`$theme.id`/theme.css" order=-10}
|
||||
{/if}
|
||||
{if !empty($theme.local_head)}{include file=$theme.local_head load_css=$theme.load_css}{/if}
|
||||
{if $theme.load_css}
|
||||
{combine_css path="admin/themes/`$theme.id`/theme.css" order=-10}
|
||||
{/if}
|
||||
{if !empty($theme.local_head)}
|
||||
{include file=$theme.local_head load_css=$theme.load_css}
|
||||
{/if}
|
||||
{/foreach}
|
||||
{combine_css path="admin/themes/default/fontello/css/fontello.css"}
|
||||
|
||||
<!-- BEGIN get_combined_scripts -->
|
||||
{get_combined_scripts load='header'}
|
||||
<!-- END get_combined_scripts -->
|
||||
|
||||
{combine_script id='jquery' path='themes/default/js/jquery.min.js'}
|
||||
{/strip}
|
||||
|
||||
<!--[if lt IE 7]>
|
||||
<script type="text/javascript" src="{$ROOT_URL}themes/default/js/pngfix.js"></script>
|
||||
<![endif]-->
|
||||
<!-- 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}
|
||||
{$elt}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
</head>
|
||||
|
||||
<body id="{$BODY_ID}">
|
||||
|
@ -53,18 +50,18 @@
|
|||
|
||||
<div id="pwgHead">
|
||||
<h1>
|
||||
<a href="{$U_RETURN}" title="{'Visit Gallery'|@translate}">
|
||||
<span class="icon-home" style="font-size:larger"></span>
|
||||
{$GALLERY_TITLE}
|
||||
<a href="{$U_RETURN}" title="{'Visit Gallery'|translate}" class="tiptip">
|
||||
<span class="icon-home" style="font-size:larger"></span>
|
||||
{$GALLERY_TITLE}
|
||||
</a>
|
||||
</h1>
|
||||
|
||||
<div id="headActions">
|
||||
{'Hello'|@translate} {$USERNAME} |
|
||||
<a class="icon-eye" href="{$U_RETURN}">{'Visit Gallery'|@translate}</a> |
|
||||
<a class="icon-brush" href="{$U_CHANGE_THEME}" title="{'Switch to clear or dark colors for administration'|@translate}">{'Change Admin Colors'|@translate}</a> |
|
||||
<a class="icon-help-circled" href="{$U_FAQ}" title="{'Instructions to use Piwigo'|@translate}">{'Help Me'|@translate}</a> |
|
||||
<a class="icon-logout" href="{$U_LOGOUT}">{'Logout'|@translate}</a>
|
||||
{'Hello'|translate} {$USERNAME} |
|
||||
<a class="icon-eye" href="{$U_RETURN}">{'Visit Gallery'|translate}</a> |
|
||||
<a class="icon-brush tiptip" href="{$U_CHANGE_THEME}" title="{'Switch to clear or dark colors for administration'|translate}">{'Change Admin Colors'|translate}</a> |
|
||||
<a class="icon-help-circled tiptip" href="{$U_FAQ}" title="{'Instructions to use Piwigo'|@translate}">{'Help Me'|translate}</a> |
|
||||
<a class="icon-logout" href="{$U_LOGOUT}">{'Logout'|translate}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -78,4 +75,4 @@
|
|||
</div>
|
||||
{/if}
|
||||
|
||||
<div id="pwgMain">
|
||||
<div id="pwgMain">
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
{if not $ENABLE_SYNCHRONIZATION}
|
||||
{html_style}{literal}
|
||||
#helpSynchro {display:none;}
|
||||
{/literal}{/html_style}
|
||||
{/if}
|
||||
|
||||
<h2>{'Help'|@translate} » {$HELP_SECTION_TITLE}</h2>
|
||||
|
||||
<div id="helpContent">
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
|
||||
{footer_script}{literal}
|
||||
pwg_initialization_datepicker("#start_day", "#start_month", "#start_year", "#start_linked_date", null, null, "#end_linked_date");
|
||||
pwg_initialization_datepicker("#end_day", "#end_month", "#end_year", "#end_linked_date", null, "#start_linked_date", null);
|
||||
{/literal}{/footer_script}
|
||||
{footer_script}
|
||||
jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
||||
jQuery('[data-datepicker]').pwgDatepicker();
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
<h2>{'History'|@translate} {$TABSHEET_TITLE}</h2>
|
||||
|
||||
|
@ -14,33 +15,25 @@
|
|||
<ul>
|
||||
<li><label>{'Date'|@translate}</label></li>
|
||||
<li>
|
||||
<select id="start_day" name="start_day">
|
||||
<option value="0">--</option>
|
||||
{section name=day start=1 loop=32}
|
||||
<option value="{$smarty.section.day.index}" {if $smarty.section.day.index==$START_DAY_SELECTED}selected="selected"{/if}>{$smarty.section.day.index}</option>
|
||||
{/section}
|
||||
</select>
|
||||
<select id="start_month" name="start_month">
|
||||
{html_options options=$month_list selected=$START_MONTH_SELECTED}
|
||||
</select>
|
||||
<input id="start_year" name="start_year" value="{$START_YEAR}" type="text" size="4" maxlength="4" >
|
||||
<input id="start_linked_date" name="start_linked_date" type="hidden" size="10" disabled="disabled">
|
||||
<input type="hidden" name="start" value="{$START}">
|
||||
<label>
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="start" data-datepicker-end="end" data-datepicker-unset="start_unset" readonly>
|
||||
</label>
|
||||
<br>
|
||||
<a href="#" class="icon-cancel-circled" id="start_unset">{'unset'|translate}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><label>{'End-Date'|@translate}</label></li>
|
||||
<li>
|
||||
<select id="end_day" name="end_day">
|
||||
<option value="0">--</option>
|
||||
{section name=day start=1 loop=32}
|
||||
<option value="{$smarty.section.day.index}" {if $smarty.section.day.index==$END_DAY_SELECTED}selected="selected"{/if}>{$smarty.section.day.index}</option>
|
||||
{/section}
|
||||
</select>
|
||||
<select id="end_month" name="end_month">
|
||||
{html_options options=$month_list selected=$END_MONTH_SELECTED}
|
||||
</select>
|
||||
<input id="end_year" name="end_year" value="{$END_YEAR}" type="text" size="4" maxlength="4" >
|
||||
<input id="end_linked_date" name="end_linked_date" type="hidden" size="10" disabled="disabled">
|
||||
<input type="hidden" name="end" value="{$END}">
|
||||
<label>
|
||||
<i class="icon-calendar"></i>
|
||||
<input type="text" data-datepicker="end" data-datepicker-start="start" data-datepicker-unset="end_unset" readonly>
|
||||
</label>
|
||||
<br>
|
||||
<a href="#" class="icon-cancel-circled" id="end_unset">{'unset'|translate}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -1,90 +1,21 @@
|
|||
{footer_script}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery(".addAlbumOpen").colorbox({
|
||||
inline: true,
|
||||
href: "#addAlbumForm",
|
||||
onComplete: function() {
|
||||
var $albumSelect = jQuery("#albumSelect");
|
||||
{if empty($load_mode)}{$load_mode='footer'}{/if}
|
||||
{include file='include/colorbox.inc.tpl' load_mode=$load_mode}
|
||||
|
||||
jQuery("input[name=category_name]").focus();
|
||||
|
||||
jQuery("#category_parent").html('<option value="0">------------</option>')
|
||||
.append($albumSelect.html())
|
||||
.val($albumSelect.val() || 0);
|
||||
}
|
||||
});
|
||||
{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"}
|
||||
|
||||
jQuery("#addAlbumForm form").submit(function() {
|
||||
jQuery("#categoryNameError").text("");
|
||||
|
||||
var parent_id = jQuery("select[name=category_parent] option:selected").val(),
|
||||
name = jQuery("input[name=category_name]").val();
|
||||
|
||||
jQuery.ajax({
|
||||
url: "ws.php",
|
||||
dataType: 'json',
|
||||
data: {
|
||||
format: 'json',
|
||||
method: 'pwg.categories.add',
|
||||
parent: parent_id,
|
||||
name: name
|
||||
},
|
||||
beforeSend: function() {
|
||||
jQuery("#albumCreationLoading").show();
|
||||
},
|
||||
success: function(data) {
|
||||
jQuery("#albumCreationLoading").hide();
|
||||
jQuery(".addAlbumOpen").colorbox.close();
|
||||
|
||||
var newAlbum = data.result.id,
|
||||
newAlbum_name = '';
|
||||
|
||||
if (parent_id!=0) {
|
||||
newAlbum_name = jQuery("#category_parent").find("option[value="+ parent_id +"]").text() +' / ';
|
||||
}
|
||||
newAlbum_name+= name;
|
||||
|
||||
var new_option = jQuery("<option/>")
|
||||
.attr("value", newAlbum)
|
||||
.attr("selected", "selected")
|
||||
.text(newAlbum_name);
|
||||
|
||||
var $albumSelect = jQuery("#albumSelect");
|
||||
$albumSelect.find("option").removeAttr('selected');
|
||||
|
||||
if (parent_id==0) {
|
||||
$albumSelect.prepend(new_option);
|
||||
}
|
||||
else {
|
||||
$albumSelect.find("option[value="+ parent_id +"]").after(new_option);
|
||||
}
|
||||
|
||||
jQuery("#addAlbumForm form input[name=category_name]").val('');
|
||||
jQuery("#albumSelection").show();
|
||||
|
||||
return true;
|
||||
},
|
||||
error: function(XMLHttpRequest, textStatus, errorThrows) {
|
||||
jQuery("#albumCreationLoading").hide();
|
||||
jQuery("#categoryNameError").text(errorThrows).css("color", "red");
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
{combine_script id='addAlbum' load=$load_mode path='admin/themes/default/js/addAlbum.js'}
|
||||
|
||||
<div style="display:none">
|
||||
<div id="addAlbumForm" style="text-align:left;padding:1em;">
|
||||
<div id="addAlbumForm">
|
||||
<form>
|
||||
{'Parent album'|@translate}<br>
|
||||
<select id="category_parent" name="category_parent">
|
||||
</select>
|
||||
<select name="category_parent"></select>
|
||||
<br><br>
|
||||
|
||||
{'Album name'|@translate}<br>
|
||||
<input name="category_name" type="text" maxlength="255"> <span id="categoryNameError"></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>
|
||||
<br><br><br>
|
||||
|
||||
<input type="submit" value="{'Create'|@translate}">
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
{combine_script id='jquery.colorbox' load='footer' require='jquery' path='themes/default/js/plugins/jquery.colorbox.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/colorbox/style2/colorbox.css"}
|
||||
{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"}
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
{combine_script id='datepicker.js' load='footer' require='jquery.ui.datepicker' path='themes/default/js/datepicker.js'}
|
||||
|
||||
{assign var="datepicker_language" value="themes/default/js/ui/i18n/jquery.ui.datepicker-`$lang_info.code`.js"}
|
||||
{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.code" load='footer' path=$datepicker_language}
|
||||
{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}
|
||||
|
||||
{combine_css path="themes/default/js/ui/theme/jquery.ui.datepicker.css"}
|
||||
{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}
|
||||
|
||||
{footer_script require='jquery.ui.datepicker,datepicker.js'}
|
||||
function pwg_initialization_datepicker(day, month, year, linked_date, checked_on_change, min_linked_date, max_linked_date)
|
||||
{ldelim}
|
||||
return pwg_common_initialization_datepicker(
|
||||
"{$ROOT_URL}{$themeconf.admin_icon_dir}/datepicker.png",
|
||||
day, month, year, linked_date, checked_on_change, min_linked_date, max_linked_date);
|
||||
};
|
||||
{/footer_script}
|
||||
{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"}
|
|
@ -1,14 +1,14 @@
|
|||
{footer_script require='jquery'}{literal}
|
||||
jQuery(document).ready(function(){
|
||||
jQuery(".tagSelection label").click(function () {
|
||||
jQuery(".tagSelection").on("click", "label", function () {
|
||||
var parent = jQuery(this).parent('li');
|
||||
var checkbox = jQuery(this).children("input[type=checkbox]");
|
||||
|
||||
if (jQuery(checkbox).is(':checked')) {
|
||||
jQuery(parent).addClass("tagSelected");
|
||||
parent.addClass("tagSelected");
|
||||
}
|
||||
else {
|
||||
jQuery(parent).removeClass('tagSelected');
|
||||
parent.removeClass('tagSelected');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,78 +1,58 @@
|
|||
{if $upload_mode eq 'multiple'}
|
||||
{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js' }
|
||||
{combine_script id='jquery.uploadify' load='footer' require='jquery' path='admin/include/uploadify/jquery.uploadify.v3.0.0.min.js' }
|
||||
{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
|
||||
{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.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.ui.progressbar' load='footer'}
|
||||
|
||||
{combine_css path="themes/default/js/plugins/jquery.jgrowl.css"}
|
||||
{combine_css path="admin/include/uploadify/uploadify.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'}
|
||||
{include file='include/add_album.inc.tpl'}
|
||||
|
||||
{footer_script}{literal}
|
||||
{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]'), {
|
||||
filter: function(categories, options) {
|
||||
if (categories.length > 0) {
|
||||
jQuery("#albumSelection, .selectFiles, .showFieldset").show();
|
||||
}
|
||||
|
||||
return categories;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('[data-add-album]').pwgAddAlbum({
|
||||
afterSelect: function() {
|
||||
jQuery("#albumSelection, .selectFiles, .showFieldset").show();
|
||||
}
|
||||
});
|
||||
|
||||
var pwg_token = '{$pwg_token}';
|
||||
var photosUploaded_label = "{'%d photos uploaded'|translate}";
|
||||
var batch_Label = "{'Manage this set of %d photos'|translate}";
|
||||
var albumSummary_label = "{'Album "%s" now contains %d photos'|translate|escape}";
|
||||
var uploadedPhotos = [];
|
||||
var uploadCategory = null;
|
||||
|
||||
{literal}
|
||||
jQuery(document).ready(function(){
|
||||
function checkUploadStart() {
|
||||
var nbErrors = 0;
|
||||
jQuery("#formErrors").hide();
|
||||
jQuery("#formErrors li").hide();
|
||||
|
||||
if (jQuery("#albumSelect option:selected").length == 0) {
|
||||
jQuery("#formErrors #noAlbum").show();
|
||||
nbErrors++;
|
||||
}
|
||||
|
||||
var nbFiles = 0;
|
||||
if (jQuery("#uploadBoxes").size() == 1) {
|
||||
jQuery("input[name^=image_upload]").each(function() {
|
||||
if (jQuery(this).val() != "") {
|
||||
nbFiles++;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
nbFiles = jQuery(".uploadifyQueueItem").size();
|
||||
}
|
||||
|
||||
if (nbFiles == 0) {
|
||||
jQuery("#formErrors #noPhoto").show();
|
||||
nbErrors++;
|
||||
}
|
||||
|
||||
if (nbErrors != 0) {
|
||||
jQuery("#formErrors").show();
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function humanReadableFileSize(bytes) {
|
||||
var byteSize = Math.round(bytes / 1024 * 100) * .01;
|
||||
var suffix = 'KB';
|
||||
|
||||
if (byteSize > 1000) {
|
||||
byteSize = Math.round(byteSize *.001 * 100) * .01;
|
||||
suffix = 'MB';
|
||||
}
|
||||
|
||||
var sizeParts = byteSize.toString().split('.');
|
||||
if (sizeParts.length > 1) {
|
||||
byteSize = sizeParts[0] + '.' + sizeParts[1].substr(0,2);
|
||||
}
|
||||
else {
|
||||
byteSize = sizeParts[0];
|
||||
}
|
||||
|
||||
return byteSize+suffix;
|
||||
}
|
||||
|
||||
jQuery("#hideErrors").click(function() {
|
||||
jQuery("#formErrors").hide();
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#uploadWarningsSummary a.showInfo").click(function() {
|
||||
jQuery("#uploadWarningsSummary").hide();
|
||||
jQuery("#uploadWarnings").show();
|
||||
|
@ -85,137 +65,145 @@ jQuery(document).ready(function(){
|
|||
return false;
|
||||
});
|
||||
|
||||
{/literal}
|
||||
{if $upload_mode eq 'html'}
|
||||
{literal}
|
||||
function addUploadBox() {
|
||||
var uploadBox = '<p class="file"><input type="file" size="60" name="image_upload[]"></p>';
|
||||
jQuery(uploadBox).appendTo("#uploadBoxes");
|
||||
}
|
||||
jQuery("#uploader").pluploadQueue({
|
||||
// General settings
|
||||
browse_button : 'addFiles',
|
||||
container : 'uploadForm',
|
||||
|
||||
// runtimes : 'html5,flash,silverlight,html4',
|
||||
runtimes : 'html5',
|
||||
|
||||
addUploadBox();
|
||||
// url : '../upload.php',
|
||||
url : 'ws.php?method=pwg.images.upload&format=json',
|
||||
|
||||
chunk_size: '500kb',
|
||||
|
||||
filters : {
|
||||
// Maximum file size
|
||||
max_file_size : '1000mb',
|
||||
// Specify what files to browse for
|
||||
mime_types: [
|
||||
{title : "Image files", extensions : "{/literal}{$file_exts}{literal}"}
|
||||
]
|
||||
},
|
||||
|
||||
jQuery("#addUploadBox A").click(function () {
|
||||
addUploadBox();
|
||||
});
|
||||
// Rename files by clicking on their titles
|
||||
// rename: true,
|
||||
|
||||
jQuery("#uploadForm").submit(function() {
|
||||
return checkUploadStart();
|
||||
});
|
||||
{/literal}
|
||||
{elseif $upload_mode eq 'multiple'}
|
||||
// Enable ability to drag'n'drop files onto the widget (currently only HTML5 supports that)
|
||||
dragdrop: true,
|
||||
|
||||
var uploadify_path = '{$uploadify_path}';
|
||||
var upload_id = '{$upload_id}';
|
||||
var session_id = '{$session_id}';
|
||||
var pwg_token = '{$pwg_token}';
|
||||
var buttonText = "{'Select files'|@translate}";
|
||||
var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
|
||||
|
||||
{literal}
|
||||
jQuery("#uploadify").uploadify({
|
||||
'uploader' : uploadify_path + '/uploadify.php',
|
||||
'langFile' : uploadify_path + '/uploadifyLang_en.js',
|
||||
'swf' : uploadify_path + '/uploadify.swf',
|
||||
'checkExisting' : false,
|
||||
|
||||
buttonCursor : 'pointer',
|
||||
'buttonText' : buttonText,
|
||||
'width' : 300,
|
||||
'cancelImage' : uploadify_path + '/cancel.png',
|
||||
'queueID' : 'fileQueue',
|
||||
'auto' : false,
|
||||
'multi' : true,
|
||||
'fileTypeDesc' : 'Photo files',
|
||||
'fileTypeExts' : '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF;{/literal}{if $tif_enabled}*.tif;*.TIF;*.tiff;*.TIFF{/if}{literal}',
|
||||
'fileSizeLimit' : sizeLimit,
|
||||
'progressData' : 'percentage',
|
||||
requeueErrors : false,
|
||||
'onSelect' : function(event,ID,fileObj) {
|
||||
jQuery("#fileQueue").show();
|
||||
},
|
||||
'onQueueComplete' : function(stats) {
|
||||
jQuery("input[name=submit_upload]").click();
|
||||
},
|
||||
onUploadError: function (file,errorCode,errorMsg,errorString,swfuploadifyQueue) {
|
||||
/* uploadify calls the onUploadError trigger when the user cancels a file! */
|
||||
/* There no error so we skip it to avoid panic. */
|
||||
if ("Cancelled" == errorString) {
|
||||
return false;
|
||||
preinit: {
|
||||
Init: function (up, info) {
|
||||
jQuery('#uploader_container').removeAttr("title"); //remove the "using runtime" text
|
||||
|
||||
jQuery('#startUpload').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
up.start();
|
||||
});
|
||||
|
||||
jQuery('#cancelUpload').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
up.stop();
|
||||
up.trigger('UploadComplete', up.files);
|
||||
});
|
||||
}
|
||||
|
||||
var msg = file.name+', '+errorString;
|
||||
|
||||
/* Let's put the error message in the form to display once the form is */
|
||||
/* performed, it makes support easier when user can copy/paste the error */
|
||||
/* thrown. */
|
||||
jQuery("#uploadForm").append('<input type="hidden" name="onUploadError[]" value="'+msg+'">');
|
||||
|
||||
jQuery.jGrowl(
|
||||
'<p></p>onUploadError '+msg,
|
||||
{
|
||||
theme: 'error',
|
||||
header: 'ERROR',
|
||||
life: 4000,
|
||||
sticky: false
|
||||
}
|
||||
);
|
||||
|
||||
return false;
|
||||
},
|
||||
onUploadSuccess: function (file,data,response) {
|
||||
var data = jQuery.parseJSON(data);
|
||||
jQuery("#uploadedPhotos").parent("fieldset").show();
|
||||
|
||||
/* Let's display the thumbnail of the uploaded photo, no need to wait the */
|
||||
/* end of the queue */
|
||||
jQuery("#uploadedPhotos").prepend('<img src="'+data.thumbnail_url+'" class="thumbnail"> ');
|
||||
},
|
||||
onUploadComplete: function(file,swfuploadifyQueue) {
|
||||
var max = parseInt(jQuery("#progressMax").text());
|
||||
var next = parseInt(jQuery("#progressCurrent").text())+1;
|
||||
var addToProgressBar = 2;
|
||||
if (next <= max) {
|
||||
jQuery("#progressCurrent").text(next);
|
||||
}
|
||||
else {
|
||||
addToProgressBar = 1;
|
||||
}
|
||||
init : {
|
||||
// update custom button state on queue change
|
||||
QueueChanged : function(up) {
|
||||
jQuery('#startUpload').prop('disabled', up.files.length == 0);
|
||||
},
|
||||
|
||||
UploadProgress: function(up, file) {
|
||||
jQuery('#uploadingActions .progressbar').width(up.total.percent+'%');
|
||||
},
|
||||
|
||||
BeforeUpload: function(up, file) {
|
||||
//console.log('[BeforeUpload]', file);
|
||||
|
||||
// hide buttons
|
||||
jQuery('#startUpload, #addFiles').hide();
|
||||
jQuery('#uploadingActions').show();
|
||||
|
||||
jQuery("#progressbar").progressbar({
|
||||
value: jQuery("#progressbar").progressbar("option", "value") + addToProgressBar
|
||||
});
|
||||
// warn user if she wants to leave page while upload is running
|
||||
jQuery(window).bind('beforeunload', function() {
|
||||
return "{/literal}{'Upload in progress'|translate|escape}{literal}";
|
||||
});
|
||||
|
||||
// no more change on category/level
|
||||
jQuery("select[name=level]").attr("disabled", "disabled");
|
||||
|
||||
// You can override settings before the file is uploaded
|
||||
up.setOption(
|
||||
'multipart_params',
|
||||
{
|
||||
category : jQuery("select[name=category] option:selected").val(),
|
||||
level : jQuery("select[name=level] option:selected").val(),
|
||||
pwg_token : pwg_token
|
||||
// name : file.name
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
FileUploaded: function(up, file, info) {
|
||||
// Called when file has finished uploading
|
||||
//console.log('[FileUploaded] File:', file, "Info:", info);
|
||||
|
||||
// hide item line
|
||||
jQuery('#'+file.id).hide();
|
||||
|
||||
var data = jQuery.parseJSON(info.response);
|
||||
|
||||
jQuery("#uploadedPhotos").parent("fieldset").show();
|
||||
|
||||
html = '<a href="admin.php?page=photo-'+data.result.image_id+'" target="_blank">';
|
||||
html += '<img src="'+data.result.src+'" class="thumbnail" title="'+data.result.name+'">';
|
||||
html += '</a> ';
|
||||
|
||||
jQuery("#uploadedPhotos").prepend(html);
|
||||
|
||||
// do not remove file, or it will reset the progress bar :-/
|
||||
// up.removeFile(file);
|
||||
uploadedPhotos.push(parseInt(data.result.image_id));
|
||||
uploadCategory = data.result.category;
|
||||
},
|
||||
|
||||
UploadComplete: function(up, files) {
|
||||
// Called when all files are either uploaded or failed
|
||||
//console.log('[UploadComplete]');
|
||||
|
||||
jQuery(".selectAlbum, .selectFiles, #permissions, .showFieldset").hide();
|
||||
|
||||
jQuery(".infos").append('<ul><li>'+sprintf(photosUploaded_label, uploadedPhotos.length)+'</li></ul>');
|
||||
|
||||
html = sprintf(
|
||||
albumSummary_label,
|
||||
'<a href="admin.php?page=album-'+uploadCategory.id+'">'+uploadCategory.label+'</a>',
|
||||
parseInt(uploadCategory.nb_photos)
|
||||
);
|
||||
|
||||
jQuery(".infos ul").append('<li>'+html+'</li>');
|
||||
|
||||
jQuery(".infos").show();
|
||||
|
||||
// TODO: use a new method pwg.caddie.empty +
|
||||
// pwg.caddie.add(uploadedPhotos) instead of relying on huge GET parameter
|
||||
// (and remove useless code from admin/photos_add_direct.php)
|
||||
|
||||
jQuery(".batchLink").attr("href", "admin.php?page=photos_add§ion=direct&batch="+uploadedPhotos.join(","));
|
||||
jQuery(".batchLink").html(sprintf(batch_Label, uploadedPhotos.length));
|
||||
|
||||
jQuery(".afterUploadActions").show();
|
||||
jQuery('#uploadingActions').hide();
|
||||
|
||||
// user can safely leave page without warning
|
||||
jQuery(window).unbind('beforeunload');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
jQuery("input[type=button]").click(function() {
|
||||
if (!checkUploadStart()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
jQuery("#uploadify").uploadifySettings(
|
||||
'postData',
|
||||
{
|
||||
'category_id' : jQuery("select[name=category] option:selected").val(),
|
||||
'level' : jQuery("select[name=level] option:selected").val(),
|
||||
'upload_id' : upload_id,
|
||||
'session_id' : session_id,
|
||||
'pwg_token' : pwg_token
|
||||
}
|
||||
);
|
||||
|
||||
nb_files = jQuery(".uploadifyQueueItem").size();
|
||||
jQuery("#progressMax").text(nb_files);
|
||||
jQuery("#progressbar").progressbar({max: nb_files*2, value:1});
|
||||
jQuery("#progressCurrent").text(1);
|
||||
|
||||
jQuery("#uploadProgress").show();
|
||||
|
||||
jQuery("#uploadify").uploadifyUpload();
|
||||
});
|
||||
|
||||
});
|
||||
{/literal}
|
||||
{/if}
|
||||
});
|
||||
{/footer_script}
|
||||
|
||||
|
@ -225,6 +213,10 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
|
|||
|
||||
<div id="photosAddContent">
|
||||
|
||||
<div class="infos" style="display:none"></div>
|
||||
|
||||
<p class="afterUploadActions" style="margin:10px; display:none;"><a class="batchLink"></a> | <a href="">{'Add another set of photos'|@translate}</a></p>
|
||||
|
||||
{if count($setup_errors) > 0}
|
||||
<div class="errors">
|
||||
<ul>
|
||||
|
@ -247,82 +239,18 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
|
|||
{/if}
|
||||
|
||||
|
||||
{if !empty($thumbnails)}
|
||||
<fieldset>
|
||||
<legend>{'Uploaded Photos'|@translate}</legend>
|
||||
<div>
|
||||
{foreach from=$thumbnails item=thumbnail}
|
||||
<a href="{$thumbnail.link}" class="externalLink">
|
||||
<img src="{$thumbnail.src}" alt="{$thumbnail.file}" title="{$thumbnail.title}" class="thumbnail">
|
||||
</a>
|
||||
{/foreach}
|
||||
</div>
|
||||
<p id="batchLink"><a href="{$batch_link}">{$batch_label}</a></p>
|
||||
</fieldset>
|
||||
<p style="margin:10px"><a href="{$another_upload_link}">{'Add another set of photos'|@translate}</a></p>
|
||||
{else}
|
||||
|
||||
<div id="formErrors" class="errors" style="display:none">
|
||||
<ul>
|
||||
<li id="noAlbum">{'Select an album'|@translate}</li>
|
||||
<li id="noPhoto">{'Select at least one photo'|@translate}</li>
|
||||
</ul>
|
||||
<div class="hideButton" style="text-align:center"><a href="#" id="hideErrors">{'Hide'|@translate}</a></div>
|
||||
</div>
|
||||
|
||||
|
||||
<form id="uploadForm" enctype="multipart/form-data" method="post" action="{$form_action}" class="properties">
|
||||
{if $upload_mode eq 'multiple'}
|
||||
<input name="upload_id" value="{$upload_id}" type="hidden">
|
||||
{/if}
|
||||
|
||||
<fieldset>
|
||||
<form id="uploadForm" enctype="multipart/form-data" method="post" action="{$form_action}">
|
||||
<fieldset class="selectAlbum">
|
||||
<legend>{'Drop into album'|@translate}</legend>
|
||||
|
||||
<span id="albumSelection"{if count($category_options) == 0} style="display:none"{/if}>
|
||||
<select id="albumSelect" name="category">
|
||||
{html_options options=$category_options selected=$category_options_selected}
|
||||
</select>
|
||||
<br>{'... or '|@translate}</span><a href="#" class="addAlbumOpen" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
|
||||
<span id="albumSelection" style="display:none">
|
||||
<select data-selectize="categories" data-value="{$selected_category|@json_encode|escape:html}"
|
||||
data-default="first" name="category" style="width:600px"></select>
|
||||
<br>{'... or '|@translate}</span>
|
||||
<a href="#" data-add-album="category" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Select files'|@translate}</legend>
|
||||
|
||||
{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">{$upload_max_filesize_shorthand}B. {$upload_file_types}. {if isset($max_upload_resolution)}{$max_upload_resolution}Mpx{/if} <a class="icon-info-circled-1 showInfo" title="{'Learn more'|@translate}"></a></p>
|
||||
|
||||
<p id="uploadWarnings">
|
||||
{'Maximum file size: %sB.'|@translate:$upload_max_filesize_shorthand}
|
||||
{'Allowed file types: %s.'|@translate:$upload_file_types}
|
||||
{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>
|
||||
|
||||
|
||||
|
||||
{if $upload_mode eq 'html'}
|
||||
<div id="uploadBoxes"></div>
|
||||
<div id="addUploadBox">
|
||||
<a href="javascript:">{'+ Add an upload box'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<p id="uploadModeInfos">{'You are using the Browser uploader. Try the <a href="%s">Flash uploader</a> instead.'|@translate:$switch_url}</p>
|
||||
|
||||
{elseif $upload_mode eq 'multiple'}
|
||||
<div id="uploadify">You've got a problem with your JavaScript</div>
|
||||
|
||||
<div id="fileQueue" style="display:none"></div>
|
||||
|
||||
<p id="uploadModeInfos">{'You are using the Flash uploader. Problems? Try the <a href="%s">Browser uploader</a> instead.'|@translate:$switch_url}</p>
|
||||
|
||||
{/if}
|
||||
</fieldset>
|
||||
|
||||
<p class="showFieldset"><a id="showPermissions" href="#">{'Manage Permissions'|@translate}</a></p>
|
||||
<p class="showFieldset" style="display:none"><a id="showPermissions" href="#">{'Manage Permissions'|@translate}</a></p>
|
||||
|
||||
<fieldset id="permissions" style="display:none">
|
||||
<legend>{'Who can see these photos?'|@translate}</legend>
|
||||
|
@ -332,30 +260,48 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
|
|||
</select>
|
||||
</fieldset>
|
||||
|
||||
{if $upload_mode eq 'html'}
|
||||
<p>
|
||||
<input class="submit" type="submit" name="submit_upload" value="{'Start Upload'|@translate}">
|
||||
</p>
|
||||
{elseif $upload_mode eq 'multiple'}
|
||||
<p style="margin-bottom:1em">
|
||||
<input class="submit" type="button" value="{'Start Upload'|@translate}">
|
||||
<input type="submit" name="submit_upload" style="display:none">
|
||||
</p>
|
||||
{/if}
|
||||
</form>
|
||||
<fieldset class="selectFiles" style="display:none">
|
||||
<legend>{'Select files'|@translate}</legend>
|
||||
|
||||
<button id="addFiles" class="buttonLike icon-plus-circled">{'Add Photos'|translate}</button>
|
||||
|
||||
{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}
|
||||
|
||||
<div id="uploadProgress" style="display:none">
|
||||
{'Photo %s of %s'|@translate:'<span id="progressCurrent">1</span>':'<span id="progressMax">10</span>'}
|
||||
<br>
|
||||
<div id="progressbar"></div>
|
||||
</div>
|
||||
<p id="uploadWarningsSummary">{$upload_max_filesize_shorthand}B. {$upload_file_types}. {if isset($max_upload_resolution)}{$max_upload_resolution}Mpx{/if} <a class="icon-info-circled-1 showInfo" title="{'Learn more'|@translate}"></a></p>
|
||||
|
||||
<p id="uploadWarnings">
|
||||
{'Maximum file size: %sB.'|@translate:$upload_max_filesize_shorthand}
|
||||
{'Allowed file types: %s.'|@translate:$upload_file_types}
|
||||
{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 id="uploader">
|
||||
<p>Your browser doesn't have HTML5 support.</p>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<div id="uploadingActions" style="display:none">
|
||||
<button id="cancelUpload" class="buttonLike icon-cancel-circled">{'Cancel'|translate}</button>
|
||||
|
||||
<div class="big-progressbar">
|
||||
<div class="progressbar" style="width:0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button id="startUpload" class="buttonLike icon-upload" disabled>{'Start Upload'|translate}</button>
|
||||
|
||||
</form>
|
||||
|
||||
<fieldset style="display:none">
|
||||
<legend>{'Uploaded Photos'|@translate}</legend>
|
||||
<div id="uploadedPhotos"></div>
|
||||
</fieldset>
|
||||
|
||||
{/if} {* empty($thumbnails) *}
|
||||
{/if} {* $setup_errors *}
|
||||
|
||||
</div> <!-- photosAddContent -->
|
||||
|
|
|
@ -1,37 +1,45 @@
|
|||
{include file='include/autosize.inc.tpl'}
|
||||
{include file='include/dbselect.inc.tpl'}
|
||||
{include file='include/datepicker.inc.tpl'}
|
||||
{include file='include/colorbox.inc.tpl'}
|
||||
|
||||
{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/chosen.css"}
|
||||
{combine_script id='LocalStorageCache' load='footer' path='admin/themes/default/js/LocalStorageCache.js'}
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function() {
|
||||
jQuery(".chzn-select").chosen();
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
|
||||
{combine_script id='jquery.tokeninput' load='async' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
|
||||
{footer_script require='jquery.tokeninput'}
|
||||
jQuery(document).ready(function() {ldelim}
|
||||
jQuery("#tags").tokenInput(
|
||||
[{foreach from=$tags item=tag name=tags}{ldelim}"name":"{$tag.name|@escape:'javascript'}","id":"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}],
|
||||
{ldelim}
|
||||
hintText: '{'Type in a search term'|@translate}',
|
||||
noResultsText: '{'No results'|@translate}',
|
||||
searchingText: '{'Searching...'|@translate}',
|
||||
newText: ' ({'new'|@translate})',
|
||||
animateDropdown: false,
|
||||
preventDuplicates: true,
|
||||
allowFreeTagging: true
|
||||
}
|
||||
);
|
||||
});
|
||||
{/footer_script}
|
||||
{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}
|
||||
pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#date_creation_year", "#date_creation_linked_date", "#date_creation_action_set");
|
||||
(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();
|
||||
}());
|
||||
{/footer_script}
|
||||
|
||||
<h2>{$TITLE} › {'Edit photo'|@translate} {$TABSHEET_TITLE}</h2>
|
||||
|
@ -45,7 +53,7 @@ pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#da
|
|||
|
||||
<tr>
|
||||
<td id="albumThumbnail">
|
||||
<img src="{$TN_SRC}" alt="{'Thumbnail'|@translate}" class="Thumbnail">
|
||||
<a href="{$FILE_SRC}" class="preview-box icon-zoom-in" title="{$TITLE|htmlspecialchars}"><img src="{$TN_SRC}" alt="{'Thumbnail'|translate}"></a>
|
||||
</td>
|
||||
<td id="albumLinks" style="width:400px;vertical-align:top;">
|
||||
<ul style="padding-left:15px;margin:0;">
|
||||
|
@ -92,47 +100,36 @@ pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#da
|
|||
<p>
|
||||
<strong>{'Creation date'|@translate}</strong>
|
||||
<br>
|
||||
<select id="date_creation_day" name="date_creation_day">
|
||||
<option value="0">--</option>
|
||||
{section name=day start=1 loop=32}
|
||||
<option value="{$smarty.section.day.index}" {if $smarty.section.day.index==$DATE_CREATION_DAY_VALUE}selected="selected"{/if}>{$smarty.section.day.index}</option>
|
||||
{/section}
|
||||
</select>
|
||||
|
||||
<select id="date_creation_month" name="date_creation_month">
|
||||
{html_options options=$month_list selected=$DATE_CREATION_MONTH_VALUE}
|
||||
</select>
|
||||
|
||||
<input id="date_creation_year" name="date_creation_year" type="text" size="4" maxlength="4" value="{$DATE_CREATION_YEAR_VALUE}">
|
||||
<input id="date_creation_linked_date" name="date_creation_linked_date" type="hidden" size="10" disabled="disabled">
|
||||
<input name="date_creation_time" type="hidden" value="{$DATE_CREATION_TIME_VALUE}">
|
||||
<a href="#" id="unset_date_creation" style="display:none">unset</a>
|
||||
<input type="hidden" name="date_creation" value="{$DATE_CREATION}">
|
||||
<label>
|
||||
<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}</strong>
|
||||
<br>
|
||||
<select data-placeholder="Select albums..." class="chzn-select" multiple style="width:700px;" name="associate[]">
|
||||
{html_options options=$associate_options selected=$associate_options_selected}
|
||||
</select>
|
||||
<select data-selectize="categories" data-value="{$associated_albums|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-default="{$STORAGE_ALBUM}" name="associate[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Representation of albums'|@translate}</strong>
|
||||
<br>
|
||||
<select data-placeholder="Select albums..." class="chzn-select" multiple style="width:700px;" name="represent[]">
|
||||
{html_options options=$represent_options selected=$represent_options_selected}
|
||||
</select>
|
||||
<select data-selectize="categories" data-value="{$represented_albums|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="represent[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Tags'|@translate}</strong>
|
||||
<br>
|
||||
<select id="tags" name="tags">
|
||||
{foreach from=$tag_selection item=tag}
|
||||
<option value="{$tag.id}" class="selected">{$tag.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
<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:600px;"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
@ -31,11 +31,33 @@ jQuery(document).ready(function(){
|
|||
$('.pluginBox').sortElements(sortPlugins);
|
||||
$.get("admin.php?plugins_new_order="+sortOrder);
|
||||
});
|
||||
|
||||
jQuery('#filter').keyup(function(){
|
||||
var filter = $(this).val();
|
||||
if (filter.length>2) {
|
||||
$('.pluginBox').hide();
|
||||
$('#availablePlugins .pluginBox input[name="name"]').each(function(){
|
||||
if ($(this).val().toUpperCase().indexOf(filter.toUpperCase()) != -1) {
|
||||
$(this).parents('div').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
$('.pluginBox').show();
|
||||
}
|
||||
});
|
||||
jQuery("#filter").focus();
|
||||
jQuery(".titrePage input[name='Clear']").click(function(){
|
||||
$("#filter").val('');
|
||||
$(".pluginBox").show();
|
||||
});
|
||||
});
|
||||
{/literal}{/footer_script}
|
||||
|
||||
<div class="titrePage">
|
||||
<span class="sort">
|
||||
{'Filter'|@translate} : <input type="text" id="filter">
|
||||
<input type="button" name="Clear" Value="{'Cancel'|@translate}"> |
|
||||
{'Sort order'|@translate} :
|
||||
{html_options name="selectOrder" options=$order_options selected=$order_selected}
|
||||
</span>
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
<div class="titrePage">
|
||||
<h2>{'Profile'|@translate}</h2>
|
||||
</div>
|
||||
|
||||
{$PROFILE_CONTENT}
|
|
@ -1,93 +0,0 @@
|
|||
<form method="post" name="profile" action="{$F_ACTION}" id="profile" class="properties">
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Registration'|@translate}</legend>
|
||||
<input type="hidden" name="redirect" value="{$REDIRECT}">
|
||||
<ul>
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="username">{'Username'|@translate}</label>
|
||||
</span>
|
||||
{if not $SPECIAL_USER}
|
||||
<input type="text" name="username" id="username" value="{$USERNAME}">
|
||||
{else}
|
||||
{$USERNAME}
|
||||
{/if}
|
||||
</li>
|
||||
{if not $SPECIAL_USER} {* can modify password + email*}
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="mail_address">{'Email address'|@translate}</label>
|
||||
</span>
|
||||
<input type="text" name="mail_address" id="mail_address" value="{$EMAIL}">
|
||||
</li>
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="use_new_pwd">{'New password'|@translate}</label>
|
||||
</span>
|
||||
<input type="password" name="use_new_pwd" id="use_new_pwd" value="">
|
||||
</li>
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="passwordConf">{'Confirm Password'|@translate}</label>
|
||||
</span>
|
||||
<input type="password" name="passwordConf" id="passwordConf" value="">
|
||||
</li>
|
||||
{/if}
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{'Preferences'|@translate}</legend>
|
||||
|
||||
<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="{$NB_IMAGE_PAGE}">
|
||||
</li>
|
||||
{if not $SPECIAL_USER}
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="template">{'Theme'|@translate}</label>
|
||||
</span>
|
||||
{html_options id=template name=theme options=$template_options selected=$template_selection}
|
||||
</li>
|
||||
<li>
|
||||
<span class="property">
|
||||
<label for="language">{'Language'|@translate}</label>
|
||||
</span>
|
||||
{html_options id=language name=language options=$language_options selected=$language_selection}
|
||||
</li>
|
||||
{/if}
|
||||
<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="{$RECENT_PERIOD}">
|
||||
</li>
|
||||
<li>
|
||||
<span class="property">{'Expand all albums'|@translate}</span>
|
||||
{html_radios name='expand' options=$radio_options selected=$EXPAND}
|
||||
</li>
|
||||
{if $ACTIVATE_COMMENTS}
|
||||
<li>
|
||||
<span class="property">{'Show number of comments'|@translate}</span>
|
||||
{html_radios name='show_nb_comments' options=$radio_options selected=$NB_COMMENTS}
|
||||
</li>
|
||||
{/if}
|
||||
<li>
|
||||
<span class="property">{'Show number of hits'|@translate}</span>
|
||||
{html_radios name='show_nb_hits' options=$radio_options selected=$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}">
|
||||
<input class="submit" type="reset" name="reset" value="{'Reset'|@translate}">
|
||||
</p>
|
||||
|
||||
</form>
|
|
@ -12,8 +12,29 @@
|
|||
|
||||
.dtBar {
|
||||
text-align:left;
|
||||
padding-left: 20px;
|
||||
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}
|
||||
|
||||
<h2>{$ratings|@count} {'Users'|@translate}</h2>
|
||||
|
@ -42,103 +63,154 @@
|
|||
</form>
|
||||
|
||||
{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}
|
||||
var oTable = jQuery('#rateTable').dataTable({
|
||||
sDom : '<"dtBar"f>rt',
|
||||
bPaginate: false,
|
||||
aaSorting: [[5,'desc']],
|
||||
sDom : '<"dtBar"filp>rt<"dtBar"ilp>',
|
||||
iDisplayLength: 100,
|
||||
aLengthMenu: [ [25, 50, 100, 500, -1], [25, 50, 100, 500, "All"]],
|
||||
aaSorting: [], //[[1,'desc']],
|
||||
bAutoWidth: false,
|
||||
bSortClasses: false,
|
||||
aoColumnDefs: [
|
||||
/*{
|
||||
aTargets: ["dtc_user"]
|
||||
},*/
|
||||
{
|
||||
aTargets: ["dtc_user"],
|
||||
sType: "string",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_date"],
|
||||
asSorting: ["desc","asc"]
|
||||
asSorting: ["desc","asc"],
|
||||
sType: "string",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_stat"],
|
||||
asSorting: ["desc","asc"],
|
||||
bSearchable: false
|
||||
bSearchable: false,
|
||||
sType: "numeric",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_rate"],
|
||||
asSorting: ["desc","asc"],
|
||||
bSearchable: false
|
||||
bSearchable: false,
|
||||
sType: "html",
|
||||
sClass: null
|
||||
},
|
||||
{
|
||||
aTargets: ["dtc_del"],
|
||||
bSortable: false,
|
||||
bSearchable: false
|
||||
bSearchable: false,
|
||||
sType: "string",
|
||||
sClass: null
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
function del(elt,uid,aid){
|
||||
if (!confirm('{'Are you sure?'|@translate|@escape:'javascript'}'))
|
||||
return false;
|
||||
var tr = elt;
|
||||
while ( tr.nodeName != "TR") tr = tr.parentNode;
|
||||
tr = jQuery(tr).fadeTo(1000, 0.4);
|
||||
|
||||
(new PwgWS('{$ROOT_URL|@escape:javascript}')).callService(
|
||||
'pwg.rates.delete', { user_id:uid, anonymous_id:aid},
|
||||
{
|
||||
method: 'POST',
|
||||
onFailure: function(num, text) { tr.stop(); tr.fadeTo(0,1); alert(num + " " + text); },
|
||||
onSuccess: function(result){
|
||||
if (result)
|
||||
oTable.fnDeleteRow(tr[0]);
|
||||
else
|
||||
alert(result);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return false;
|
||||
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();
|
||||
if (!confirm('{'Are you sure?'|@translate|@escape:'javascript'}'))
|
||||
return;
|
||||
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.fnDeleteRow(tr[0]);
|
||||
else
|
||||
alert(result);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
{/footer_script}
|
||||
<table id="rateTable">
|
||||
<thead>
|
||||
<tr class="throw">
|
||||
<td class="dtc_user">{'Username'|@translate}</td>
|
||||
<td class="dtc_date">{'Last'|@translate}</td>
|
||||
<td class="dtc_stat">{'Number of rates'|@translate}</td>
|
||||
<td class="dtc_stat">{'Average rate'|@translate}</td>
|
||||
<td class="dtc_stat">{'Variation'|@translate}</td>
|
||||
<td class="dtc_stat">{'Consensus deviation'|@translate|@replace:' ':'<br>'}</td>
|
||||
<td class="dtc_stat">{'Consensus deviation'|@translate|@replace:' ':'<br>'} {$CONSENSUS_TOP_NUMBER}</td>
|
||||
<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}
|
||||
<td class="dtc_rate">{$rate}</td>
|
||||
<th class="dtc_rate">{$rate}</th>
|
||||
{/foreach}
|
||||
<td class="dtc_del"></td>
|
||||
<th class="dtc_del"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{foreach from=$ratings item=rating key=user}
|
||||
<tr>
|
||||
<td>{$user}</td>
|
||||
<td>{$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 from=$rates item=rate_arr}<img src="{$image_urls[$rate_arr.id].tn}" alt="thumb-{$rate_arr.id}" title="{$rate_arr.date}"></img>
|
||||
{/foreach}{/capture}
|
||||
<a class="cluetip" title="|{$rate_over|@htmlspecialchars}">{$rates|@count}</a>
|
||||
{/if}</td>
|
||||
{/foreach}
|
||||
<td><a onclick="return del(this,{$rating.uid},'{$rating.aid}');" class="icon-trash"></a></td>
|
||||
<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.cluetip' load='footer' require='jquery' path='themes/default/js/plugins/jquery.cluetip.js'}
|
||||
{footer_script require='jquery.cluetip'}
|
||||
jQuery(document).ready(function(){ldelim}
|
||||
jQuery('.cluetip').cluetip({ldelim}
|
||||
width: {$TN_WIDTH}, showTitle:false, splitTitle: '|'
|
||||
{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}
|
|
@ -40,6 +40,7 @@ body {
|
|||
#content {
|
||||
min-height:0;
|
||||
border:none;
|
||||
margin:1em auto;
|
||||
}
|
||||
|
||||
#theHeader {
|
||||
|
@ -103,6 +104,7 @@ input[type="submit"], input[type="button"], a.bigButton {
|
|||
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 {
|
||||
|
@ -171,11 +173,11 @@ input[type="text"]:focus, input[type="password"]:focus, select:focus {
|
|||
<table>
|
||||
<tr>
|
||||
<td>{'Username'|@translate}</td>
|
||||
<td><input type="text" name="username" id="username" size="25" maxlength="40" style="width: 150px;"></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" size="25" maxlength="25" style="width: 150px;"></td>
|
||||
<td><input type="password" name="password" id="password" style="width: 150px;"></td>
|
||||
</tr>
|
||||
</table>
|
||||
{/if}
|
||||
|
@ -214,7 +216,7 @@ input[type="text"]:focus, input[type="password"]:focus, select:focus {
|
|||
</fieldset>
|
||||
|
||||
<p>
|
||||
<a class="bigButton" href="index.php">{'Home'|@translate}</a>
|
||||
<a class="bigButton" href="{$button_link}">{$button_label}</a>
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
{combine_script id='jquery.dataTables' load='footer' path='themes/default/js/plugins/jquery.dataTables.js'}
|
||||
{combine_css path="themes/default/js/plugins/datatables/css/jquery.dataTables.css"}
|
||||
|
||||
{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'}
|
||||
{combine_css path="themes/default/js/plugins/chosen.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='jquery.underscore' load='footer' path='themes/default/js/plugins/underscore.js'}
|
||||
|
||||
|
@ -33,6 +33,12 @@ var truefalse = {
|
|||
'true':"{'Yes'|translate}",
|
||||
'false':"{'No'|translate}",
|
||||
};
|
||||
|
||||
var statusLabels = {
|
||||
{foreach from=$label_of_status key=status item=label}
|
||||
'{$status}' : '{$label|escape:javascript}',
|
||||
{/foreach}
|
||||
};
|
||||
{/footer_script}
|
||||
|
||||
{footer_script}{literal}
|
||||
|
@ -259,11 +265,7 @@ jQuery(document).ready(function() {
|
|||
|
||||
user.email = user.email || '';
|
||||
|
||||
jQuery("#action select[name=status] option").each(function() {
|
||||
if (user.status == jQuery(this).val()) {
|
||||
user.statusLabel = jQuery(this).html();
|
||||
}
|
||||
});
|
||||
user.statusLabel = statusLabels[user.status];
|
||||
|
||||
/* Render the underscore template */
|
||||
_.templateSettings.variable = "user";
|
||||
|
@ -274,7 +276,25 @@ jQuery(document).ready(function() {
|
|||
|
||||
jQuery("#user"+userId).append(template(user));
|
||||
|
||||
jQuery(".chzn-select").chosen();
|
||||
/* groups select */
|
||||
jQuery('[data-selectize=groups]').selectize({
|
||||
valueField: 'value',
|
||||
labelField: 'label',
|
||||
searchField: ['label'],
|
||||
plugins: ['remove_button']
|
||||
});
|
||||
|
||||
var groupSelectize = jQuery('[data-selectize=groups]')[0].selectize;
|
||||
|
||||
groupSelectize.load(function(callback) {
|
||||
callback(user.groupOptions);
|
||||
});
|
||||
|
||||
jQuery.each(jQuery.grep(user.groupOptions, function(group) {
|
||||
return group.isSelected;
|
||||
}), function(i, group) {
|
||||
groupSelectize.addItem(group.value);
|
||||
});
|
||||
|
||||
/* nb_image_page slider */
|
||||
var nb_image_page_init = getSliderKeyFromValue(jQuery('#user'+userId+' input[name=nb_image_page]').val(), nb_image_page_values);
|
||||
|
@ -1086,11 +1106,8 @@ span.infos, span.errors {background-image:none; padding:2px 5px; margin:0;border
|
|||
<div class="userProperty"><label><input type="checkbox" name="enabled_high"<% if (user.enabled_high == 'true') { %> checked="checked"<% } %>> <strong>{'High definition enabled'|translate}</strong></label></div>
|
||||
|
||||
<div class="userProperty"><strong>{'Groups'|translate}</strong><br>
|
||||
<select multiple class="chzn-select" style="width:340px;" name="group_id[]">
|
||||
<% _.each( user.groupOptions, function( option ){ %>
|
||||
<option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option>
|
||||
<% }); %>
|
||||
</select>
|
||||
<select data-selectize="groups" placeholder="{'Type in a search term'|translate}"
|
||||
name="group_id[]" multiple style="width:340px;"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -574,11 +574,6 @@ img.ui-datepicker-trigger {
|
|||
text-align:left;
|
||||
}
|
||||
|
||||
#photosAddContent FIELDSET {
|
||||
width:650px;
|
||||
margin:0 auto 20px auto;
|
||||
}
|
||||
|
||||
#photosAddContent P {
|
||||
margin:0;
|
||||
}
|
||||
|
@ -977,8 +972,10 @@ LEGEND {
|
|||
#batchManagerGlobal #applyFilterBlock {margin-top:20px;}
|
||||
#batchManagerGlobal .useFilterCheckbox {display:none;}
|
||||
|
||||
#batchManagerGlobal #filter_dimension blockquote {margin:5px 0 20px 15px;}
|
||||
#batchManagerGlobal #filter_dimension .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;}
|
||||
#batchManagerGlobal blockquote {margin:5px 0 20px 15px;}
|
||||
#batchManagerGlobal .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;}
|
||||
|
||||
#batchManagerGlobal #duplicates_options label {margin-left:10px;}
|
||||
|
||||
#order_filters a.addFilter {font-weight:normal;margin-left:20px;}
|
||||
#order_filters a.removeFilter {font-weight:normal;}
|
||||
|
@ -988,6 +985,11 @@ LEGEND {
|
|||
#order_filters .order_by_is_custom {display:block;font-weight:normal;font-style:italic;margin-left:20px;}
|
||||
|
||||
/* Upload Form */
|
||||
.plupload_header {display:none;}
|
||||
#uploadForm .plupload_container {padding:0}
|
||||
#uploadForm .plupload_scroll .plupload_filelist {height:250px;}
|
||||
#uploadForm li.plupload_droptext {line-height:230px;font-size:2em;}
|
||||
|
||||
#uploadBoxes .file {margin-bottom:5px;text-align:left;}
|
||||
#uploadBoxes {margin-top:20px;}
|
||||
#addUploadBox {margin-bottom:2em;}
|
||||
|
@ -998,11 +1000,49 @@ p#uploadWarningsSummary .showInfo {margin-left:3px;}
|
|||
p#uploadWarnings {display:none;text-align:left;margin-bottom:1em;font-size:90%;color:#999;}
|
||||
p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;}
|
||||
|
||||
#photosAddContent p.showFieldset {text-align:left;margin: 0 auto 10px auto;width: 650px;}
|
||||
#photosAddContent p.showFieldset {text-align:left;margin: 1em;}
|
||||
|
||||
#uploadProgress {width:650px; margin:10px auto;font-size:90%;}
|
||||
#progressbar {border:1px solid #ccc; background-color:#eee;}
|
||||
.ui-progressbar-value { background-image: url(images/pbar-ani.gif); height:10px;margin:-1px;border:1px solid #E78F08;}
|
||||
#uploadForm .plupload_buttons, #uploadForm .plupload_progress { display:none !important; }
|
||||
#uploadForm #startUpload { margin:5px 0 15px 15px; padding:5px 10px; font-size:1.1em; }
|
||||
#uploadForm #startUpload:before { margin-right:0.5em; }
|
||||
#uploadForm #addFiles { margin-right:10px; float:left; }
|
||||
#uploadForm #uploadingActions { margin:10px 10px 10px 15px; }
|
||||
#uploadForm .big-progressbar { vertical-align:middle; display:inline-block; margin-left:10px; }
|
||||
|
||||
.big-progressbar {
|
||||
width:100%;
|
||||
max-width:600px;
|
||||
background:#fff;
|
||||
padding:0;
|
||||
border-radius:5px;
|
||||
position:relative;
|
||||
height:18px;
|
||||
}
|
||||
|
||||
@keyframes animatedBackground {
|
||||
from { background-position: 0 0; }
|
||||
to { background-position: 33px 0; }
|
||||
}
|
||||
|
||||
@-webkit-keyframes animatedBackground {
|
||||
from { background-position: 0 0; }
|
||||
to { background-position: 33px 0; }
|
||||
}
|
||||
|
||||
.big-progressbar .progressbar {
|
||||
height:18px;
|
||||
min-width:5px;
|
||||
background:#444;
|
||||
border-radius:5px 0 0 5px;
|
||||
background-size:33px 25px;
|
||||
animation: animatedBackground 1s linear infinite;
|
||||
-webkit-animation: animatedBackground 1s linear infinite;
|
||||
}
|
||||
|
||||
/* Selectize */
|
||||
.selectize-dropdown [data-selectable], .selectize-dropdown .optgroup-header {
|
||||
padding: 0px 5px !important;
|
||||
}
|
||||
|
||||
/* Tag Manager */
|
||||
.warningDeletion {display:none;font-style:italic;}
|
||||
|
@ -1043,7 +1083,17 @@ p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;}
|
|||
}
|
||||
|
||||
/* Album Manager */
|
||||
#addAlbumForm input[name="category_name"], #formCreateAlbum input[name="virtual_name"] {
|
||||
#addAlbumForm {
|
||||
text-align:left;
|
||||
padding:1em;
|
||||
}
|
||||
#addAlbumForm .selectize-dropdown-content {
|
||||
max-height:170px;
|
||||
}
|
||||
#addAlbumForm input[name="category_name"] {
|
||||
width:600px;
|
||||
}
|
||||
#formCreateAlbum input[name="virtual_name"] {
|
||||
width:300px;
|
||||
}
|
||||
|
||||
|
@ -1162,6 +1212,8 @@ a.group_perm {
|
|||
#userList .openUserDetails {visibility:hidden;}
|
||||
#userList tr:hover .openUserDetails {visibility:visible;}
|
||||
#userList .icon-cancel-circled {visibility:visible;}
|
||||
#userList_length {float:none;}
|
||||
#userList_filter {margin-top:-20px;}
|
||||
|
||||
.userProperties {max-width:730px;}
|
||||
.userPropertiesContainer {border-top:1px solid #ddd;margin-top:1em;}
|
||||
|
@ -1171,3 +1223,70 @@ a.group_perm {
|
|||
.userProperty {width:340px;float:left;margin-bottom:15px;}
|
||||
.userActions {float:right;text-align:right;}
|
||||
|
||||
.preview-box.icon-zoom-in {
|
||||
display:block;
|
||||
position:relative;
|
||||
}
|
||||
.preview-box.icon-zoom-in:before {
|
||||
opacity:0;
|
||||
position:absolute;
|
||||
margin:-22px 0 0 -22px;
|
||||
top:50%;
|
||||
left:50%;
|
||||
font-size:50px;
|
||||
line-height:50px;
|
||||
color:white;
|
||||
z-index:100;
|
||||
text-shadow:0 0 20px rgba(0,0,0,0.4);
|
||||
-webkit-transition:opacity 200ms ease;
|
||||
transition:opacity 200ms ease;
|
||||
}
|
||||
.preview-box.icon-zoom-in:hover:before {
|
||||
opacity:0.9;
|
||||
}
|
||||
.preview-box.icon-zoom-in img {
|
||||
opacity:1;
|
||||
-webkit-transition:opacity 200ms ease;
|
||||
transition:opacity 200ms ease;
|
||||
}
|
||||
.preview-box.icon-zoom-in:hover img {
|
||||
opacity:0.5;
|
||||
}
|
||||
|
||||
/* table in help/quick_search.html */
|
||||
table.qsearch_help_table {
|
||||
border-collapse:collapse;
|
||||
text-align:left;
|
||||
margin:1em;
|
||||
}
|
||||
table.qsearch_help_table q {
|
||||
font-family: Courier, Fixed;
|
||||
font-weight: bold;
|
||||
}
|
||||
table.qsearch_help_table q:before {
|
||||
content: '\'';
|
||||
color: green;
|
||||
}
|
||||
table.qsearch_help_table q:after {
|
||||
content: '\'';
|
||||
color: green;
|
||||
}
|
||||
table.qsearch_help_table td {
|
||||
border: 1px solid #ccc;
|
||||
padding:5px;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.font-checkbox [class*=icon-check]:before {
|
||||
font-size:16px;
|
||||
line-height:16px;
|
||||
margin-right:0;
|
||||
margin-left:0;
|
||||
}
|
||||
.font-checkbox .icon-check-empty {
|
||||
position:relative;
|
||||
left:-1px;
|
||||
}
|
||||
.font-checkbox input[type=checkbox], .font-checkbox input[type=radio] {
|
||||
display:none;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,6 @@ $themeconf = array(
|
|||
'icon_dir' => 'themes/default/icon',
|
||||
'admin_icon_dir' => 'admin/themes/default/icon',
|
||||
'mime_icon_dir' => 'themes/default/icon/mimetypes/',
|
||||
'local_head' => 'local_head.tpl',
|
||||
'colorscheme' => 'dark',
|
||||
);
|
||||
?>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
/* text color */
|
||||
body, h3, dt, .throw, .content, label, LEGEND {
|
||||
color:#666;
|
||||
color:#777;
|
||||
}
|
||||
|
||||
INPUT, select, textarea { color:#999; background-color: #444; }
|
||||
|
@ -136,6 +136,7 @@ margin-top:4px; padding-bottom:3px; padding-top:3px; top:1px;
|
|||
}
|
||||
.tabsheet a:hover, .tabsheet li.selected_tab a { color: #F36; }
|
||||
.tabsheet a span { background-color:#222; font-size:10px; margin-right:2px; padding:0 3px 0 1px; }
|
||||
|
||||
/* menubar is on all admin pages => No specific css file */
|
||||
#menubar {
|
||||
background:transparent url(images/menuBoxBottom_new.png) no-repeat scroll left bottom;
|
||||
|
@ -144,20 +145,20 @@ padding:0; width:207px; z-index:99; text-align: left;
|
|||
}
|
||||
|
||||
#menubar dd {
|
||||
background: transparent url(images/menubar-detail.png) repeat-y top left;
|
||||
background: #111 url(images/menubar-detail.png) repeat-y top left;
|
||||
margin: 0; padding: 0 0 10px 0; }
|
||||
#menubar dl {
|
||||
background:transparent url(images/menuBoxTop_new.png) no-repeat scroll left top;
|
||||
width: 207px; border:0; margin: 0; padding: 0; display: block; min-height:35px; }
|
||||
#menubar dl.first {
|
||||
#menubar dl:first-of-type{
|
||||
background:transparent url(images/menubar-top.png) no-repeat scroll left 1px; }
|
||||
#menubar dl.last { padding: 0 0 24px 0;}
|
||||
#menubar dl:last-of-type { padding: 0 0 24px 0;}
|
||||
#menubar dt {
|
||||
margin: 0; display: block; background: none; left:10px; font-weight:bold;
|
||||
position:relative; padding: 5px 1px 4px 5px; top:-8px; font-size: 13px; color: #666; outline:none;
|
||||
cursor:pointer;
|
||||
}
|
||||
#menubar dt span { background-color: #111; }
|
||||
#menubar dt * { background-color: #111; }
|
||||
#menubar li { margin: 0 0 0 12px; }
|
||||
#menubar li.external { list-style-image:url(images/external_inactive.png); padding:10px 0px 0pt 10px; }
|
||||
#menubar li.external:hover { list-style-image:url(images/external_active.png); }
|
||||
|
@ -238,6 +239,12 @@ INPUT[type="text"].large { width: 317px; }
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
.buttonLike:disabled, input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled {
|
||||
color:#666;
|
||||
border-color:#666;
|
||||
cursor:not-allowed;
|
||||
}
|
||||
|
||||
.bigbutton { background:transparent url(images/quickLocalSync_inactiv.png) no-repeat scroll left top; display: block;
|
||||
color:#111; font-size:28px; height:161px; margin: 0 20px 0 auto; padding:0 18px 0; text-align:center; width:625px;
|
||||
position:relative; z-index: 50;}
|
||||
|
@ -289,7 +296,15 @@ div.token-input-dropdown {background-color:#eee !important;border-color:#666 !im
|
|||
div.token-input-dropdown ul li {background-color:#eee !important;}
|
||||
div.token-input-dropdown ul li.token-input-selected-dropdown-item {background-color:#FF7800 !important;}
|
||||
|
||||
#progressbar {border:1px solid #666; background-color:#666;}
|
||||
.big-progressbar {
|
||||
background:#1a1e22;
|
||||
box-shadow:inset 0px 1px 1px 0px black, 0px 1px 1px 0px #36393F;
|
||||
}
|
||||
.big-progressbar .progressbar {
|
||||
background:#ff3363;
|
||||
background:#ff3363 linear-gradient(135deg, rgba(0,0,0,0) 44%,rgba(0,0,0,0.2) 44%,rgba(0,0,0,0.2) 57%,rgba(0,0,0,0) 57%);
|
||||
background-size:33px 25px;
|
||||
}
|
||||
|
||||
/* Album Properties */
|
||||
#albumThumbnail img, #albumLinks {
|
||||
|
@ -338,3 +353,9 @@ table.dataTable thead th {
|
|||
|
||||
.userPropertiesContainer {border-color:#333;}
|
||||
.userPrefs {border-color:#333;}
|
||||
|
||||
table.qsearch_help_table td {
|
||||
border-color: #444;
|
||||
}
|
||||
|
||||
.font-checkbox [class*=icon-check]:before { color:#aaa; }
|
|
@ -2,5 +2,6 @@
|
|||
$themeconf = array(
|
||||
'name' => 'roma',
|
||||
'parent' => 'default',
|
||||
'colorscheme' => 'dark',
|
||||
);
|
||||
?>
|
||||
|
|
|
@ -91,6 +91,7 @@ foreach ($themes->fs_themes as $theme_id => $fs_theme)
|
|||
if (in_array($theme_id, $db_theme_ids))
|
||||
{
|
||||
$tpl_theme['STATE'] = 'active';
|
||||
$tpl_theme['IS_DEFAULT'] = ($theme_id == $default_theme);
|
||||
$tpl_theme['DEACTIVABLE'] = true;
|
||||
|
||||
if (count($db_theme_ids) <= 1)
|
||||
|
@ -98,8 +99,11 @@ foreach ($themes->fs_themes as $theme_id => $fs_theme)
|
|||
$tpl_theme['DEACTIVABLE'] = false;
|
||||
$tpl_theme['DEACTIVATE_TOOLTIP'] = l10n('Impossible to deactivate this theme, you need at least one theme.');
|
||||
}
|
||||
|
||||
$tpl_theme['IS_DEFAULT'] = ($theme_id == $default_theme);
|
||||
if ($tpl_theme['IS_DEFAULT'])
|
||||
{
|
||||
$tpl_theme['DEACTIVABLE'] = false;
|
||||
$tpl_theme['DEACTIVATE_TOOLTIP'] = l10n('Impossible to deactivate the default theme.');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -172,6 +176,7 @@ $template->assign(
|
|||
)
|
||||
);
|
||||
|
||||
trigger_notify('loc_end_themes_installed');
|
||||
|
||||
$template->set_filenames(array('themes' => 'themes_installed.tpl'));
|
||||
$template->assign_var_from_handle('ADMIN_CONTENT', 'themes');
|
||||
|
|
|
@ -86,6 +86,7 @@ $template->assign(
|
|||
array(
|
||||
'users' => $users,
|
||||
'all_users' => join(',', $user_ids),
|
||||
'ACTIVATE_COMMENTS' => $conf['activate_comments'],
|
||||
'Double_Password' => $conf['double_password_type_in_admin']
|
||||
)
|
||||
);
|
||||
|
@ -99,6 +100,18 @@ $protected_users = array(
|
|||
$conf['webmaster_id'],
|
||||
);
|
||||
|
||||
// an admin can't delete other admin/webmaster
|
||||
if ('admin' == $user['status'])
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
user_id
|
||||
FROM '.USER_INFOS_TABLE.'
|
||||
WHERE status IN (\'webmaster\', \'admin\')
|
||||
;';
|
||||
$protected_users = array_merge($protected_users, query2array($query, null, 'user_id'));
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'PWG_TOKEN' => get_pwg_token(),
|
||||
|
@ -117,12 +130,19 @@ $template->assign(
|
|||
// Status options
|
||||
foreach (get_enums(USER_INFOS_TABLE, 'status') as $status)
|
||||
{
|
||||
// Only status <= can be assign
|
||||
if (is_autorize_status(get_access_type_status($status)))
|
||||
{
|
||||
$pref_status_options[$status] = l10n('user_status_'.$status);
|
||||
}
|
||||
$label_of_status[$status] = l10n('user_status_'.$status);
|
||||
}
|
||||
|
||||
$pref_status_options = $label_of_status;
|
||||
|
||||
// a simple "admin" can set/remove statuses webmaster/admin
|
||||
if ('admin' == $user['status'])
|
||||
{
|
||||
unset($pref_status_options['webmaster']);
|
||||
unset($pref_status_options['admin']);
|
||||
}
|
||||
|
||||
$template->assign('label_of_status', $label_of_status);
|
||||
$template->assign('pref_status_options', $pref_status_options);
|
||||
$template->assign('pref_status_selected', 'normal');
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue