add icons for Character groups

This commit is contained in:
coderkun 2014-04-29 14:18:04 +02:00
commit 2d9a41a5fe
3461 changed files with 594457 additions and 0 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,158 @@
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\SitesManager;
use Exception;
use Piwik\API\ResponseBuilder;
use Piwik\Common;
use Piwik\DataTable\Renderer\Json;
use Piwik\Date;
use Piwik\IP;
use Piwik\Piwik;
use Piwik\SettingsPiwik;
use Piwik\SettingsServer;
use Piwik\Site;
use Piwik\Url;
use Piwik\UrlHelper;
use Piwik\View;
/**
*
*/
class Controller extends \Piwik\Plugin\ControllerAdmin
{
/**
* Main view showing listing of websites and settings
*/
public function index()
{
$view = new View('@SitesManager/index');
Site::clearCache();
if (Piwik::hasUserSuperUserAccess()) {
$sitesRaw = API::getInstance()->getAllSites();
} else {
$sitesRaw = API::getInstance()->getSitesWithAdminAccess();
}
// Gets sites after Site.setSite hook was called
$sites = array_values( Site::getSites() );
if(count($sites) != count($sitesRaw)) {
throw new Exception("One or more website are missing or invalid.");
}
foreach ($sites as &$site) {
$site['alias_urls'] = API::getInstance()->getSiteUrlsFromId($site['idsite']);
$site['excluded_ips'] = explode(',', $site['excluded_ips']);
$site['excluded_parameters'] = explode(',', $site['excluded_parameters']);
$site['excluded_user_agents'] = explode(',', $site['excluded_user_agents']);
}
$view->adminSites = $sites;
$view->adminSitesCount = count($sites);
$timezones = API::getInstance()->getTimezonesList();
$view->timezoneSupported = SettingsServer::isTimezoneSupportEnabled();
$view->timezones = Common::json_encode($timezones);
$view->defaultTimezone = API::getInstance()->getDefaultTimezone();
$view->currencies = Common::json_encode(API::getInstance()->getCurrencyList());
$view->defaultCurrency = API::getInstance()->getDefaultCurrency();
$view->utcTime = Date::now()->getDatetime();
$excludedIpsGlobal = API::getInstance()->getExcludedIpsGlobal();
$view->globalExcludedIps = str_replace(',', "\n", $excludedIpsGlobal);
$excludedQueryParametersGlobal = API::getInstance()->getExcludedQueryParametersGlobal();
$view->globalExcludedQueryParameters = str_replace(',', "\n", $excludedQueryParametersGlobal);
$globalExcludedUserAgents = API::getInstance()->getExcludedUserAgentsGlobal();
$view->globalExcludedUserAgents = str_replace(',', "\n", $globalExcludedUserAgents);
$view->globalSearchKeywordParameters = API::getInstance()->getSearchKeywordParametersGlobal();
$view->globalSearchCategoryParameters = API::getInstance()->getSearchCategoryParametersGlobal();
$view->isSearchCategoryTrackingEnabled = \Piwik\Plugin\Manager::getInstance()->isPluginActivated('CustomVariables');
$view->allowSiteSpecificUserAgentExclude =
API::getInstance()->isSiteSpecificUserAgentExcludeEnabled();
$view->globalKeepURLFragments = API::getInstance()->getKeepURLFragmentsGlobal();
$view->currentIpAddress = IP::getIpFromHeader();
$view->showAddSite = (boolean)Common::getRequestVar('showaddsite', false);
$this->setBasicVariablesView($view);
return $view->render();
}
/**
* Records Global settings when user submit changes
*/
public function setGlobalSettings()
{
$response = new ResponseBuilder(Common::getRequestVar('format'));
try {
$this->checkTokenInUrl();
$timezone = Common::getRequestVar('timezone', false);
$excludedIps = Common::getRequestVar('excludedIps', false);
$excludedQueryParameters = Common::getRequestVar('excludedQueryParameters', false);
$excludedUserAgents = Common::getRequestVar('excludedUserAgents', false);
$currency = Common::getRequestVar('currency', false);
$searchKeywordParameters = Common::getRequestVar('searchKeywordParameters', $default = "");
$searchCategoryParameters = Common::getRequestVar('searchCategoryParameters', $default = "");
$enableSiteUserAgentExclude = Common::getRequestVar('enableSiteUserAgentExclude', $default = 0);
$keepURLFragments = Common::getRequestVar('keepURLFragments', $default = 0);
$api = API::getInstance();
$api->setDefaultTimezone($timezone);
$api->setDefaultCurrency($currency);
$api->setGlobalExcludedQueryParameters($excludedQueryParameters);
$api->setGlobalExcludedIps($excludedIps);
$api->setGlobalExcludedUserAgents($excludedUserAgents);
$api->setGlobalSearchParameters($searchKeywordParameters, $searchCategoryParameters);
$api->setSiteSpecificUserAgentExcludeEnabled($enableSiteUserAgentExclude == 1);
$api->setKeepURLFragmentsGlobal($keepURLFragments);
$toReturn = $response->getResponse();
} catch (Exception $e) {
$toReturn = $response->getResponseException($e);
}
return $toReturn;
}
/**
* Displays the admin UI page showing all tracking tags
* @return string
*/
function displayJavascriptCode()
{
$idSite = Common::getRequestVar('idSite');
Piwik::checkUserHasViewAccess($idSite);
$jsTag = Piwik::getJavascriptCode($idSite, SettingsPiwik::getPiwikUrl());
$view = new View('@SitesManager/displayJavascriptCode');
$this->setBasicVariablesView($view);
$view->idSite = $idSite;
$site = new Site($idSite);
$view->displaySiteName = $site->getName();
$view->jsTag = $jsTag;
return $view->render();
}
/**
* User will download a file called PiwikTracker.php that is the content of the actual script
*/
function downloadPiwikTracker()
{
$path = PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/';
$filename = 'PiwikTracker.php';
header('Content-type: text/php');
header('Content-Disposition: attachment; filename="' . $filename . '"');
return file_get_contents($path . $filename);
}
}

View file

@ -0,0 +1,216 @@
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\SitesManager;
use Piwik\Menu\MenuAdmin;
use Piwik\Piwik;
/**
*
*/
class SitesManager extends \Piwik\Plugin
{
const KEEP_URL_FRAGMENT_USE_DEFAULT = 0;
const KEEP_URL_FRAGMENT_YES = 1;
const KEEP_URL_FRAGMENT_NO = 2;
/**
* @see Piwik\Plugin::getListHooksRegistered
*/
public function getListHooksRegistered()
{
return array(
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Menu.Admin.addItems' => 'addMenu',
'Tracker.Cache.getSiteAttributes' => 'recordWebsiteDataInCache',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
);
}
function addMenu()
{
MenuAdmin::getInstance()->add('CoreAdminHome_MenuManage', 'SitesManager_Sites',
array('module' => 'SitesManager', 'action' => 'index'),
Piwik::isUserHasSomeAdminAccess(),
$order = 1);
}
/**
* Get CSS files
*/
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/SitesManager/stylesheets/SitesManager.less";
$stylesheets[] = "plugins/Zeitgeist/stylesheets/base.less";
}
/**
* Get JavaScript files
*/
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "plugins/SitesManager/javascripts/SitesManager.js";
}
/**
* Hooks when a website tracker cache is flushed (website updated, cache deleted, or empty cache)
* Will record in the tracker config file all data needed for this website in Tracker.
*
* @param array $array
* @param int $idSite
* @return void
*/
public function recordWebsiteDataInCache(&$array, $idSite)
{
$idSite = (int)$idSite;
// add the 'hosts' entry in the website array
$array['hosts'] = $this->getTrackerHosts($idSite);
$website = API::getInstance()->getSiteFromId($idSite);
$array['excluded_ips'] = $this->getTrackerExcludedIps($website);
$array['excluded_parameters'] = self::getTrackerExcludedQueryParameters($website);
$array['excluded_user_agents'] = self::getExcludedUserAgents($website);
$array['keep_url_fragment'] = self::shouldKeepURLFragmentsFor($website);
$array['sitesearch'] = $website['sitesearch'];
$array['sitesearch_keyword_parameters'] = $this->getTrackerSearchKeywordParameters($website);
$array['sitesearch_category_parameters'] = $this->getTrackerSearchCategoryParameters($website);
}
/**
* Returns whether we should keep URL fragments for a specific site.
*
* @param array $site DB data for the site.
* @return bool
*/
private static function shouldKeepURLFragmentsFor($site)
{
if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_YES) {
return true;
} else if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_NO) {
return false;
}
return API::getInstance()->getKeepURLFragmentsGlobal();
}
private function getTrackerSearchKeywordParameters($website)
{
$searchParameters = $website['sitesearch_keyword_parameters'];
if (empty($searchParameters)) {
$searchParameters = API::getInstance()->getSearchKeywordParametersGlobal();
}
return explode(",", $searchParameters);
}
private function getTrackerSearchCategoryParameters($website)
{
$searchParameters = $website['sitesearch_category_parameters'];
if (empty($searchParameters)) {
$searchParameters = API::getInstance()->getSearchCategoryParametersGlobal();
}
return explode(",", $searchParameters);
}
/**
* Returns the array of excluded IPs to save in the config file
*
* @param array $website
* @return array
*/
private function getTrackerExcludedIps($website)
{
$excludedIps = $website['excluded_ips'];
$globalExcludedIps = API::getInstance()->getExcludedIpsGlobal();
$excludedIps .= ',' . $globalExcludedIps;
$ipRanges = array();
foreach (explode(',', $excludedIps) as $ip) {
$ipRange = API::getInstance()->getIpsForRange($ip);
if ($ipRange !== false) {
$ipRanges[] = $ipRange;
}
}
return $ipRanges;
}
/**
* Returns the array of excluded user agent substrings for a site. Filters out
* any garbage data & trims each entry.
*
* @param array $website The full set of information for a site.
* @return array
*/
private static function getExcludedUserAgents($website)
{
$excludedUserAgents = API::getInstance()->getExcludedUserAgentsGlobal();
if (API::getInstance()->isSiteSpecificUserAgentExcludeEnabled()) {
$excludedUserAgents .= ',' . $website['excluded_user_agents'];
}
return self::filterBlankFromCommaSepList($excludedUserAgents);
}
/**
* Returns the array of URL query parameters to exclude from URLs
*
* @param array $website
* @return array
*/
public static function getTrackerExcludedQueryParameters($website)
{
$excludedQueryParameters = $website['excluded_parameters'];
$globalExcludedQueryParameters = API::getInstance()->getExcludedQueryParametersGlobal();
$excludedQueryParameters .= ',' . $globalExcludedQueryParameters;
return self::filterBlankFromCommaSepList($excludedQueryParameters);
}
/**
* Trims each element of a comma-separated list of strings, removes empty elements and
* returns the result (as an array).
*
* @param string $parameters The unfiltered list.
* @return array The filtered list of strings as an array.
*/
static private function filterBlankFromCommaSepList($parameters)
{
$parameters = explode(',', $parameters);
$parameters = array_filter($parameters, 'strlen');
$parameters = array_unique($parameters);
return $parameters;
}
/**
* Returns the hosts alias URLs
* @param int $idSite
* @return array
*/
private function getTrackerHosts($idSite)
{
$urls = API::getInstance()->getSiteUrlsFromId($idSite);
$hosts = array();
foreach ($urls as $url) {
$url = parse_url($url);
if (isset($url['host'])) {
$hosts[] = $url['host'];
}
}
return $hosts;
}
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = "General_Save";
$translationKeys[] = "General_OrCancel";
$translationKeys[] = "SitesManager_OnlyOneSiteAtTime";
$translationKeys[] = "SitesManager_DeleteConfirm";
}
}

View file

@ -0,0 +1,473 @@
/*!
* Piwik - Web Analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
// NOTE: if you cannot find the definition of a variable here, look in index.twig
function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrency) {
var timezones = _timezones;
var currencies = _currencies;
var defaultTimezone = _defaultTimezone;
var defaultCurrency = _defaultCurrency;
var siteBeingEdited = false;
var siteBeingEditedName = '';
function sendDeleteSiteAJAX(idSite) {
var ajaxHandler = new ajaxHelper();
ajaxHandler.addParams({
idSite: idSite,
module: 'API',
format: 'json',
method: 'SitesManager.deleteSite'
}, 'GET');
ajaxHandler.redirectOnSuccess();
ajaxHandler.setLoadingElement();
ajaxHandler.send(true);
}
function sendAddSiteAJAX(row) {
var siteName = $(row).find('input#name').val();
var urls = $(row).find('textarea#urls').val();
urls = urls.trim().split("\n");
var excludedIps = $(row).find('textarea#excludedIps').val();
excludedIps = piwikHelper.getApiFormatTextarea(excludedIps);
var timezone = $(row).find('#timezones option:selected').val();
var currency = $(row).find('#currencies option:selected').val();
var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val();
excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters);
var excludedUserAgents = $(row).find('textarea#excludedUserAgents').val();
excludedUserAgents = piwikHelper.getApiFormatTextarea(excludedUserAgents);
var keepURLFragments = $('#keepURLFragmentSelect', row).val();
var ecommerce = $(row).find('#ecommerce option:selected').val();
var sitesearch = $(row).find('#sitesearch option:selected').val();
var searchKeywordParameters = $('input#searchKeywordParameters').val();
var searchCategoryParameters = $('input#searchCategoryParameters').val();
var ajaxHandler = new ajaxHelper();
ajaxHandler.addParams({
module: 'API',
format: 'json',
method: 'SitesManager.addSite'
}, 'GET');
ajaxHandler.addParams({
siteName: siteName,
timezone: timezone,
currency: currency,
ecommerce: ecommerce,
excludedIps: excludedIps,
excludedQueryParameters: excludedQueryParameters,
excludedUserAgents: excludedUserAgents,
keepURLFragments: keepURLFragments,
siteSearch: sitesearch,
searchKeywordParameters: searchKeywordParameters,
searchCategoryParameters: searchCategoryParameters,
urls: urls
}, 'POST');
ajaxHandler.redirectOnSuccess();
ajaxHandler.setLoadingElement();
ajaxHandler.send(true);
}
function sendUpdateSiteAJAX(row) {
var siteName = $(row).find('input#siteName').val();
var idSite = $(row).children('#idSite').html();
var urls = $(row).find('textarea#urls').val();
urls = urls.trim().split("\n");
var excludedIps = $(row).find('textarea#excludedIps').val();
excludedIps = piwikHelper.getApiFormatTextarea(excludedIps);
var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val();
excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters);
var excludedUserAgents = $(row).find('textarea#excludedUserAgents').val();
excludedUserAgents = piwikHelper.getApiFormatTextarea(excludedUserAgents);
var keepURLFragments = $('#keepURLFragmentSelect', row).val();
var timezone = $(row).find('#timezones option:selected').val();
var currency = $(row).find('#currencies option:selected').val();
var ecommerce = $(row).find('#ecommerce option:selected').val();
var sitesearch = $(row).find('#sitesearch option:selected').val();
var searchKeywordParameters = $('input#searchKeywordParameters').val();
var searchCategoryParameters = $('input#searchCategoryParameters').val();
var ajaxHandler = new ajaxHelper();
ajaxHandler.addParams({
module: 'API',
format: 'json',
method: 'SitesManager.updateSite',
idSite: idSite
}, 'GET');
ajaxHandler.addParams({
siteName: siteName,
timezone: timezone,
currency: currency,
ecommerce: ecommerce,
excludedIps: excludedIps,
excludedQueryParameters: excludedQueryParameters,
excludedUserAgents: excludedUserAgents,
keepURLFragments: keepURLFragments,
siteSearch: sitesearch,
searchKeywordParameters: searchKeywordParameters,
searchCategoryParameters: searchCategoryParameters,
urls: urls
}, 'POST');
ajaxHandler.redirectOnSuccess();
ajaxHandler.setLoadingElement();
ajaxHandler.send(true);
}
function sendGlobalSettingsAJAX() {
var timezone = $('#defaultTimezone').find('option:selected').val();
var currency = $('#defaultCurrency').find('option:selected').val();
var excludedIps = $('textarea#globalExcludedIps').val();
excludedIps = piwikHelper.getApiFormatTextarea(excludedIps);
var excludedQueryParameters = $('textarea#globalExcludedQueryParameters').val();
excludedQueryParameters = piwikHelper.getApiFormatTextarea(excludedQueryParameters);
var globalExcludedUserAgents = $('textarea#globalExcludedUserAgents').val();
globalExcludedUserAgents = piwikHelper.getApiFormatTextarea(globalExcludedUserAgents);
var globalKeepURLFragments = $('#globalKeepURLFragments').is(':checked') ? 1 : 0;
var searchKeywordParameters = $('input#globalSearchKeywordParameters').val();
var searchCategoryParameters = $('input#globalSearchCategoryParameters').val();
var enableSiteUserAgentExclude = $('input#enableSiteUserAgentExclude').is(':checked') ? 1 : 0;
var ajaxHandler = new ajaxHelper();
ajaxHandler.addParams({
module: 'SitesManager',
format: 'json',
action: 'setGlobalSettings'
}, 'GET');
ajaxHandler.addParams({
timezone: timezone,
currency: currency,
excludedIps: excludedIps,
excludedQueryParameters: excludedQueryParameters,
excludedUserAgents: globalExcludedUserAgents,
keepURLFragments: globalKeepURLFragments,
enableSiteUserAgentExclude: enableSiteUserAgentExclude,
searchKeywordParameters: searchKeywordParameters,
searchCategoryParameters: searchCategoryParameters
}, 'POST');
ajaxHandler.redirectOnSuccess();
ajaxHandler.setLoadingElement('#ajaxLoadingGlobalSettings');
ajaxHandler.setErrorElement('#ajaxErrorGlobalSettings');
ajaxHandler.send(true);
}
this.init = function () {
$('.addRowSite').click(function () {
piwikHelper.hideAjaxError();
$('.addRowSite').toggle();
var excludedUserAgentCell = '';
if ($('#exclude-user-agent-header').is(':visible')) {
excludedUserAgentCell = '<td><textarea cols="20" rows="4" id="excludedUserAgents"></textarea><br />' + excludedUserAgentsHelp + '</td>';
}
var numberOfRows = $('table#editSites')[0].rows.length;
var newRowId = 'rowNew' + numberOfRows;
var submitButtonHtml = '<input type="submit" class="addsite submit" value="' + _pk_translate('General_Save') + '" />';
$($.parseHTML(' <tr id="' + newRowId + '">\
<td>&nbsp;</td>\
<td><input id="name" value="Name" size="15" /><br/><br/><br/>' + submitButtonHtml + '</td>\
<td><textarea cols="25" rows="3" id="urls">http://siteUrl.com/\nhttp://siteUrl2.com/</textarea><br />' + aliasUrlsHelp + keepURLFragmentSelectHTML + '</td>\
<td><textarea cols="20" rows="4" id="excludedIps"></textarea><br />' + excludedIpHelp + '</td>\
<td><textarea cols="20" rows="4" id="excludedQueryParameters"></textarea><br />' + excludedQueryParametersHelp + '</td>' +
excludedUserAgentCell +
'<td>' + getSitesearchSelector(false) + '</td>\
<td>' + getTimezoneSelector(defaultTimezone) + '<br />' + timezoneHelp + '</td>\
<td>' + getCurrencySelector(defaultCurrency) + '<br />' + currencyHelp + '</td>\
<td>' + getEcommerceSelector(0) + '<br />' + ecommerceHelp + '</td>\
<td>' + submitButtonHtml + '</td>\
<td><span class="cancel link_but">' + sprintf(_pk_translate('General_OrCancel'), "", "") + '</span></td>\
</tr>'))
.appendTo('#editSites')
;
piwikHelper.lazyScrollTo('#' + newRowId);
$('.addsite').click(function () {
sendAddSiteAJAX($('tr#' + newRowId));
});
$('.cancel').click(function () {
piwikHelper.hideAjaxError();
$(this).parents('tr').remove();
$('.addRowSite').toggle();
});
return false;
});
// when click on deleteuser, the we ask for confirmation and then delete the user
$('.deleteSite').click(function () {
piwikHelper.hideAjaxError();
var idRow = $(this).attr('id');
var nameToDelete = $(this).parent().parent().find('input#siteName').val() || $(this).parent().parent().find('td#siteName').html();
var idsiteToDelete = $(this).parent().parent().find('#idSite').html();
$('#confirm').find('h2').text(sprintf(_pk_translate('SitesManager_DeleteConfirm'), '"' + nameToDelete + '" (idSite = ' + idsiteToDelete + ')'));
piwikHelper.modalConfirm('#confirm', { yes: function () {
sendDeleteSiteAJAX(idsiteToDelete);
}});
}
);
var alreadyEdited = [];
$('.editSite')
.click(function () {
piwikHelper.hideAjaxError();
var idRow = $(this).attr('id');
if (alreadyEdited[idRow] == 1) return;
if (siteBeingEdited) {
$('#alert').find('h2').text(sprintf(_pk_translate('SitesManager_OnlyOneSiteAtTime'), '"' + $("<div/>").html(siteBeingEditedName).text() + '"'));
piwikHelper.modalConfirm('#alert', {});
return;
}
siteBeingEdited = true;
alreadyEdited[idRow] = 1;
$('tr#' + idRow + ' .editableSite').each(
// make the fields editable
// change the EDIT button to VALID button
function (i, n) {
var contentBefore = $(n).html();
var idName = $(n).attr('id');
if (idName == 'siteName') {
siteBeingEditedName = contentBefore;
var contentAfter = '<input id="' + idName + '" value="' + piwikHelper.htmlEntities( piwikHelper.htmlDecode(contentBefore))+ '" size="15" />';
var inputSave = $('<br/><input style="margin-top:50px" type="submit" class="submit" value="' + _pk_translate('General_Save') + '" />')
.click(function () { submitUpdateSite($(this).parent()); });
var spanCancel = $('<div><br/>' + sprintf(_pk_translate('General_OrCancel'), "", "") + '</div>')
.click(function () { piwikHelper.refreshAfter(0); });
$(n)
.html(contentAfter)
.keypress(submitSiteOnEnter)
.append(inputSave)
.append(spanCancel);
}
else if (idName == 'urls') {
var keepURLFragmentsForSite = $(this).closest('tr').attr('data-keep-url-fragments');
var contentAfter = '<textarea cols="25" rows="3" id="urls">' + contentBefore.replace(/<br *\/? *> */gi, "\n") + '</textarea>';
contentAfter += '<br />' + aliasUrlsHelp + keepURLFragmentSelectHTML;
$(n).html(contentAfter).find('select').val(keepURLFragmentsForSite);
}
else if (idName == 'excludedIps') {
var contentAfter = '<textarea cols="20" rows="4" id="excludedIps">' + contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea>';
contentAfter += '<br />' + excludedIpHelp;
$(n).html(contentAfter);
}
else if (idName == 'excludedQueryParameters') {
var contentAfter = '<textarea cols="20" rows="4" id="excludedQueryParameters">' + contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea>';
contentAfter += '<br />' + excludedQueryParametersHelp;
$(n).html(contentAfter);
}
else if (idName == 'excludedUserAgents') {
var contentAfter = '<textarea cols="20" rows="4" id="excludedUserAgents">' +
contentBefore.replace(/<br *\/? *>/gi, "\n") + '</textarea><br />' + excludedUserAgentsHelp;
$(n).html(contentAfter);
}
else if (idName == 'timezone') {
var contentAfter = getTimezoneSelector(contentBefore);
contentAfter += '<br />' + timezoneHelp;
$(n).html(contentAfter);
}
else if (idName == 'currency') {
var contentAfter = getCurrencySelector(contentBefore);
contentAfter += '<br />' + currencyHelp;
$(n).html(contentAfter);
}
else if (idName == 'ecommerce') {
var ecommerceActive = contentBefore.indexOf("ecommerceActive") > 0 ? 1 : 0;
contentAfter = getEcommerceSelector(ecommerceActive) + '<br />' + ecommerceHelp;
$(n).html(contentAfter);
}
else if (idName == 'sitesearch') {
contentAfter = getSitesearchSelector(contentBefore);
$(n).html(contentAfter);
onClickSiteSearchUseDefault();
}
}
);
$(this)
.toggle()
.parent()
.prepend($('<input type="submit" class="updateSite submit" value="' + _pk_translate('General_Save') + '" />')
.click(function () { sendUpdateSiteAJAX($('tr#' + idRow)); })
);
});
$('#globalSettingsSubmit').click(function () {
sendGlobalSettingsAJAX();
});
$('#defaultTimezone').html(getTimezoneSelector(defaultTimezone));
$('#defaultCurrency').html(getCurrencySelector(defaultCurrency));
$('td.editableSite').click(function (event) {
$(this).parent().find('.editSite').click();
});
};
function getSitesearchSelector(contentBefore) {
var globalKeywordParameters = $('input#globalSearchKeywordParameters').val().trim();
var globalCategoryParameters = $('input#globalSearchCategoryParameters').val().trim();
if (contentBefore) {
var enabled = contentBefore.indexOf("sitesearchActive") > 0 ? 1 : 0;
var spanSearch = $(contentBefore).filter('.sskp');
var searchKeywordParameters = spanSearch.attr('sitesearch_keyword_parameters').trim();
var searchCategoryParameters = spanSearch.attr('sitesearch_category_parameters').trim();
var checked = globalKeywordParameters.length && !searchKeywordParameters.trim().length;
} else {
var searchKeywordParameters = globalKeywordParameters;
var searchCategoryParameters = globalCategoryParameters;
var enabled = searchKeywordParameters.length || searchCategoryParameters.length; // default is enabled
var checked = enabled;
}
var searchGlobalHasValues = globalKeywordParameters.trim().length;
var html = '<select id="sitesearch" onchange="return onClickSiteSearchUseDefault();">';
var selected = ' selected="selected" ';
html += '<option ' + (enabled ? selected : '') + ' value="1">' + sitesearchEnabled + '</option>';
html += '<option ' + (enabled ? '' : selected) + ' value="0">' + sitesearchDisabled + '</option>';
html += '</select>';
html += '<span style="font-size: 11px;"><br/>';
if (searchGlobalHasValues) {
var checkedStr = checked ? ' checked ' : '';
html += '<span id="sitesearchUseDefault"' + (!enabled ? ' style="display:none" ' : '') + '><input type="checkbox" '
+ checkedStr + ' id="sitesearchUseDefaultCheck" onclick="return onClickSiteSearchUseDefault();"> '
+ sitesearchUseDefault + ' </span>';
+ '</label>';
html += '<div ' + ((checked && enabled) ? '' : 'style="display-none"') + ' class="searchDisplayParams form-description">'
+ searchKeywordLabel + ' (' + strDefault + ') ' + ': '
+ piwikHelper.htmlEntities( globalKeywordParameters )
+ (globalCategoryParameters.length ? ', ' + searchCategoryLabel + ': ' + piwikHelper.htmlEntities(globalCategoryParameters) : '')
+ '</div>';
}
html += '<div id="sitesearchIntro">' + sitesearchIntro + '</div>';
html += '<div id="searchSiteParameters">';
html += '<br/><label><div style="margin-bottom:3px">'
+ piwikHelper.htmlEntities(searchKeywordLabel)
+ '</div><input type="text" size="22" id="searchKeywordParameters" value="'
+ piwikHelper.htmlEntities(searchKeywordParameters)
+ '" style="font-size:9pt;font-family:monospace"></input>'
+ searchKeywordHelp + '</label>';
// if custom var plugin is disabled, category tracking not supported
if (globalCategoryParameters != 'globalSearchCategoryParametersIsDisabled') {
html += '<br/><label><div style="margin-bottom:3px">' + searchCategoryLabel + '</div><input type="text" size="22" id="searchCategoryParameters" value="' + searchCategoryParameters + '" style="font-size:9pt;font-family:monospace"></input>' + searchCategoryHelp + '</label>';
}
html += '</div></span>';
return html;
}
function getEcommerceSelector(enabled) {
var html = '<select id="ecommerce">';
var selected = ' selected="selected" ';
html += '<option ' + (enabled ? '' : selected) + ' value="0">' + ecommerceDisabled + '</option>';
html += '<option ' + (enabled ? selected : '') + ' value="1">' + ecommerceEnabled + '</option>';
html += '</select>';
return html;
}
function getTimezoneSelector(selectedTimezone) {
var html = '<select id="timezones">';
for (var continent in timezones) {
html += '<optgroup label="' + continent + '">';
for (var timezoneId in timezones[continent]) {
var selected = '';
if (timezoneId == selectedTimezone) {
selected = ' selected="selected" ';
}
html += '<option ' + selected + ' value="' + timezoneId + '">' + timezones[continent][timezoneId] + '</option>';
}
html += "</optgroup>\n";
}
html += '</select>';
return html;
}
function getCurrencySelector(selectedCurrency) {
var html = '<select id="currencies">';
for (var currency in currencies) {
var selected = '';
if (currency == selectedCurrency) {
selected = ' selected="selected" ';
}
html += '<option ' + selected + ' value="' + currency + '">' + currencies[currency] + '</option>';
}
html += '</select>';
return html;
}
function submitSiteOnEnter(e) {
var key = e.keyCode || e.which;
if (key == 13) {
submitUpdateSite(this);
$(this).find('.addsite').click();
}
}
function submitUpdateSite(self) {
$(self).parent().find('.updateSite').click();
}
}
function onClickSiteSearchUseDefault() {
// Site Search enabled
if ($('select#sitesearch').val() == "1") {
$('#sitesearchUseDefault').show();
// Use default is checked
if ($('#sitesearchUseDefaultCheck').is(':checked')) {
$('#searchSiteParameters').hide();
$('#sitesearchIntro').show();
$('#searchKeywordParameters,#searchCategoryParameters').val('');
$('.searchDisplayParams').show();
// Use default is unchecked
} else {
$('#sitesearchIntro').hide();
$('.searchDisplayParams').hide();
$('#searchSiteParameters').show();
}
} else {
$('.searchDisplayParams').hide();
$('#sitesearchUseDefault').hide();
$('#searchSiteParameters').hide();
$('#sitesearchIntro').show();
}
}
$(function () {
// when code element is clicked, select the text
$('.trackingHelp code').click(function() {
// credit where credit is due:
// http://stackoverflow.com/questions/1173194/select-all-div-text-with-single-mouse-click
var range;
if (document.body.createTextRange) // MSIE
{
range = document.body.createTextRange();
range.moveToElementText(this);
range.select();
}
else if (window.getSelection) // others
{
range = document.createRange();
range.selectNodeContents(this);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
})
.click();
});

View file

@ -0,0 +1,69 @@
.trackingHelp ul {
padding-left: 40px;
list-style-type: square;
}
.trackingHelp ul li {
margin-bottom: 10px;
}
.trackingHelp h2 {
margin-top: 20px;
}
.trackingHelp p {
text-align: justify;
}
.addRowSite {
text-decoration: none;
}
.addRowSite:before {
display: inline-block;
content: url(plugins/UsersManager/images/add.png);
vertical-align: middle;
}
#editSites {
vertical-align: top;
}
#editSites h4 {
font-size: .8em;
margin: 1em 0 1em 0;
font-weight: bold;
}
#editSites .entityTable tr td {
vertical-align: top;
padding-top: 7px;
}
#editSites .addRowSite:hover,
#editSites .editableSite:hover,
#editSites .addsite:hover,
#editSites .cancel:hover,
#editSites .deleteSite:hover,
#editSites .editSite:hover,
#editSites .updateSite:hover {
cursor: pointer;
}
#editSites .addRowSite a {
text-decoration: none;
}
#editSites .addRowSite {
padding: 1em;
font-weight: bold;
}
.ecommerceInactive,
.sitesearchInactive {
color: #666666;
}
#searchSiteParameters {
display: none;
}

View file

@ -0,0 +1,18 @@
<h2>{{ 'SitesManager_TrackingTags'|translate(displaySiteName) }}</h2>
<div class='trackingHelp'>
<p>{{ 'Installation_JSTracking_Intro'|translate }}</p>
<p>{{ 'CoreAdminHome_JSTrackingIntro3'|translate('<a href="http://piwik.org/integrate/" target="_blank">','</a>')|raw }}</p>
<h3>{{ 'General_JsTrackingTag'|translate }}</h3>
<p>{{ 'CoreAdminHome_JSTracking_CodeNote'|translate("&lt;/body&gt;")|raw }}</p>
<pre class="code-pre"><code>{{ jsTag|raw }}</code></pre>
<br/>
<p>{{ 'CoreAdminHome_JSTrackingIntro5'|translate('<a target="_blank" href="http://piwik.org/docs/javascript-tracking/">','</a>')|raw }}</p>
<p>{{ 'Installation_JSTracking_EndNote'|translate('<em>','</em>')|raw }}</p>
</div>

View file

@ -0,0 +1,6 @@
{% extends 'admin.twig' %}
{% block content %}
{% include "@SitesManager/_displayJavascriptCode.twig" %}
{% endblock %}

View file

@ -0,0 +1,426 @@
{% extends 'admin.twig' %}
{% block content %}
{% import 'macros.twig' as piwik %}
{% import 'ajaxMacros.twig' as ajax %}
{% set excludedIpHelpPlain %}
{{ 'SitesManager_HelpExcludedIps'|translate("1.2.3.*","1.2.*.*") }}
<br/><br/>
{{ 'SitesManager_YourCurrentIpAddressIs'|translate("<i>" ~ currentIpAddress ~ "</i>")|raw }}
{% endset %}
{% set excludedIpHelp=piwik.inlineHelp(excludedIpHelpPlain) %}
{% set defaultTimezoneHelpPlain %}
{% if timezoneSupported %}
{{ 'SitesManager_ChooseCityInSameTimezoneAsYou'|translate }}
{% else %}
{{ 'SitesManager_AdvancedTimezoneSupportNotFound'|translate }}
{% endif %}
<br/><br/>
{{ 'SitesManager_UTCTimeIs'|translate(utcTime) }}
{% endset %}
{% set timezoneHelpPlain %}
{{ defaultTimezoneHelpPlain }}
<br/><br/>
{{ 'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate }}
{% endset %}
{% set currencyHelpPlain %}
{{ piwik.inlineHelp('SitesManager_CurrencySymbolWillBeUsedForGoals'|translate) }}
{% endset %}
{% set ecommerceHelpPlain %}
{{ 'SitesManager_EcommerceHelp'|translate }}
<br/>
{{ 'SitesManager_PiwikOffersEcommerceAnalytics'|translate("<a href='http://piwik.org/docs/ecommerce-analytics/' target='_blank'>","</a>")|raw }}
{% endset %}
{% set excludedQueryParametersHelp %}
{{ 'SitesManager_ListOfQueryParametersToExclude'|translate }}
<br/><br/>
{{ 'SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters'|translate("phpsessid, sessionid, ...") }}
{% endset %}
{% set excludedQueryParametersHelp=piwik.inlineHelp(excludedQueryParametersHelp) %}
{% set excludedUserAgentsHelp %}
{{ 'SitesManager_GlobalExcludedUserAgentHelp1'|translate }}
<br/><br/>
{{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }} {{ 'SitesManager_GlobalExcludedUserAgentHelp2'|translate }}
{% endset %}
{% set excludedUserAgentsHelp=piwik.inlineHelp(excludedUserAgentsHelp) %}
{% set keepURLFragmentSelectHTML %}
<h4 style="display:inline-block;">{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</h4>
<select id="keepURLFragmentSelect">
<option value="0"> {% if globalKeepURLFragments %}{{ 'General_Yes'|translate }}{% else %}{{ 'General_No'|translate }}{% endif %}
({{ 'General_Default'|translate }})
</option>
<option value="1">{{ 'General_Yes'|translate }}</option>
<option value="2">{{ 'General_No'|translate }}</option>
</select>
{% endset %}
<script type="text/javascript">
var excludedIpHelp = '{{ excludedIpHelp|e('js') }}';
var aliasUrlsHelp = '{{ piwik.inlineHelp('SitesManager_AliasUrlHelp'|translate)|e('js') }}';
var excludedQueryParametersHelp = '{{ excludedQueryParametersHelp|e('js') }}';
var excludedUserAgentsHelp = '{{ excludedUserAgentsHelp|e('js') }}';
var timezoneHelp = '{{ piwik.inlineHelp(timezoneHelpPlain)|e('js') }}';
var currencyHelp = '{{ currencyHelpPlain|e('js') }}';
var ecommerceHelp = '{{ piwik.inlineHelp(ecommerceHelpPlain)|e('js') }}';
var ecommerceEnabled = '{{ 'SitesManager_EnableEcommerce'|translate|e('js') }}';
var ecommerceDisabled = '{{ 'SitesManager_NotAnEcommerceSite'|translate|e('js') }}';
{% set defaultTimezoneHelp=piwik.inlineHelp(defaultTimezoneHelpPlain) %}
{% set searchKeywordHelp=piwik.inlineHelp('SitesManager_SearchKeywordParametersDesc'|translate) %}
{% set searchCategoryHelpText %}
{{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryParametersDesc'|translate }}
{% endset %}
{% set searchCategoryHelp=piwik.inlineHelp(searchCategoryHelpText) %}
var sitesearchEnabled = '{{ 'SitesManager_EnableSiteSearch'|translate|e('js') }}';
var sitesearchDisabled = '{{ 'SitesManager_DisableSiteSearch'|translate|e('js') }}';
var searchKeywordHelp = '{{ searchKeywordHelp|e('js') }}';
var searchCategoryHelp = '{{ searchCategoryHelp|e('js') }}';
var sitesearchDesc = '{{ 'SitesManager_TrackingSiteSearch'|translate|e('js') }}';
var keepURLFragmentSelectHTML = '{{ keepURLFragmentSelectHTML|e('js') }}';
var sitesManager = new SitesManager({{ timezones|raw }}, {{ currencies|raw }}, '{{ defaultTimezone|raw }}', '{{ defaultCurrency|raw }}');
{% set searchKeywordLabel='SitesManager_SearchKeywordLabel'|translate %}
{% set searchCategoryLabel='SitesManager_SearchCategoryLabel'|translate %}
var searchKeywordLabel = '{{ searchKeywordLabel|e('js') }}';
var searchCategoryLabel = '{{ searchCategoryLabel|e('js') }}';
{% set sitesearchIntro='SitesManager_SiteSearchUse'|translate %}
var sitesearchIntro = '{{ piwik.inlineHelp(sitesearchIntro)|e('js') }}';
var sitesearchUseDefault = '{% if isSuperUser %}{{ 'SitesManager_SearchUseDefault'|translate('<a href="#globalSiteSearch">','</a>')|e('js') }}{% else %}{{ 'SitesManager_SearchUseDefault'|translate('','')|e('js') }}{% endif %}';
var strDefault = '{{ 'General_Default'|translate|e('js') }}';
$(function () {
sitesManager.init();
});
</script>
<h2 piwik-enriched-headline help-url="http://piwik.org/docs/manage-websites/">{{ 'SitesManager_WebsitesManagement'|translate }}</h2>
<p>{{ 'SitesManager_MainDescription'|translate }}
{{ 'SitesManager_YouCurrentlyHaveAccessToNWebsites'|translate("<strong>" ~ adminSitesCount ~ "</strong>")|raw }}
{% if isSuperUser %}
<br/>
{{ 'SitesManager_SuperUserAccessCan'|translate("<a href='#globalSettings'>","</a>")|raw }}
{% endif %}
</p>
{{ ajax.errorDiv() }}
{{ ajax.loadingDiv() }}
{% set createNewWebsite %}
<a href="javascript:" class="addRowSite">
{{ 'SitesManager_AddSite'|translate }}
</a>
{% endset %}
{% if adminSites|length == 0 %}
{{ 'SitesManager_NoWebsites'|translate }}
{% else %}
<div class="ui-confirm" id="confirm">
<h2></h2>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
<div class="entityContainer">
{% if isSuperUser %}
{{ createNewWebsite }}
{% endif %}
<table class="entityTable dataTable" id="editSites">
<thead>
<tr>
<th>{{ 'General_Id'|translate }}</th>
<th>{{ 'General_Name'|translate }}</th>
<th>{{ 'SitesManager_Urls'|translate }}</th>
<th>{{ 'SitesManager_ExcludedIps'|translate }}</th>
<th>{{ 'SitesManager_ExcludedParameters'|translate|replace({" ":"<br />"})|raw }}</th>
<th id='exclude-user-agent-header'
{% if not allowSiteSpecificUserAgentExclude %}style="display:none;"{% endif %}>{{ 'SitesManager_ExcludedUserAgents'|translate }}</th>
<th>{{ 'Actions_SubmenuSitesearch'|translate }}</th>
<th>{{ 'SitesManager_Timezone'|translate }}</th>
<th>{{ 'SitesManager_Currency'|translate }}</th>
<th>{{ 'Goals_Ecommerce'|translate }}</th>
<th></th>
<th></th>
<th>{{ 'General_JsTrackingTag'|translate }}</th>
</tr>
</thead>
<tbody>
{% for i,site in adminSites %}
<tr id="row{{ site.idsite }}" data-keep-url-fragments="{{ site.keep_url_fragment }}">
<td id="idSite">{{ site.idsite }}</td>
<td id="siteName" class="editableSite">
{{- site.name|raw -}}
</td>
<td id="urls" class="editableSite">
{%- for url in site.alias_urls -%}
{{- url|trim|replace({'http://': ''})|raw -}}<br />
{%- endfor -%}
</td>
<td id="excludedIps" class="editableSite">
{%- for ip in site.excluded_ips -%}
{{- ip -}}<br/>
{%- endfor -%}
</td>
<td id="excludedQueryParameters" class="editableSite">
{%- for parameter in site.excluded_parameters -%}
{{- parameter|raw -}}<br />
{%- endfor -%}
</td>
<td id="excludedUserAgents" class="editableSite"
{% if not allowSiteSpecificUserAgentExclude %}style="display:none;"{% endif %}>
{%- for ua in site.excluded_user_agents -%}
{{- ua|raw -}}<br />
{%- endfor -%}
</td>
<td id="sitesearch" class="editableSite">
{% if site.sitesearch %}
<span class="sitesearchActive">{{ 'General_Yes'|translate }}</span>
{% else %}
<span class="sitesearchInactive">-</span>
{% endif %}
<span class="sskp" sitesearch_keyword_parameters="{{- site.sitesearch_keyword_parameters -}}"
sitesearch_category_parameters="{{- site.sitesearch_category_parameters -}}"
id="sitesearch_parameters">
</span>
</td>
<td id="timezone" class="editableSite">{{ site.timezone }}</td>
<td id="currency" class="editableSite">{{ site.currency }}</td>
<td id="ecommerce" class="editableSite">
{% if site.ecommerce %}
<span class='ecommerceActive'>{{ 'General_Yes'|translate }}</span>
{% else %}
<span class='ecommerceInactive'>-</span>
{% endif %}
</td>
<td>
<span id="row{{ site.idsite }}" class='editSite link_but'>
<img src='plugins/Zeitgeist/images/ico_edit.png' title="{{ 'General_Edit'|translate }}"
border="0"/>
<span>{{ 'General_Edit'|translate }}</span>
</span>
</td>
<td>
<span id="row{{ site.idsite }}" class="deleteSite link_but">
<img src='plugins/Zeitgeist/images/ico_delete.png' title="{{ 'General_Delete'|translate }}"
border="0"/>
<span>{{ 'General_Delete'|translate }}</span>
</span>
</td>
<td>
<a href='{{ linkTo({'module':'CoreAdminHome','action':'trackingCodeGenerator','idSite':site.idsite,'updated':false }) }}'>
{{ 'SitesManager_ShowTrackingTag'|translate }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if isSuperUser %}
{{ createNewWebsite }}
{% endif %}
</div>
{% endif %}
{# Admin users use these values for Site Search column, when editing websites #}
{% if not isSuperUser %}
<input type="hidden" size="15" id="globalSearchKeywordParameters"
value="{{ globalSearchKeywordParameters }}"/>
<input type="hidden" size="15" id="globalSearchCategoryParameters"
value="{{ globalSearchCategoryParameters }}"/>
{% endif %}
{% if isSuperUser %}
<br/>
<h2 id="globalSettings">{{ 'SitesManager_GlobalWebsitesSettings'|translate }}</h2>
<br/>
<table style="width:600px;" class="adminTable">
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_GlobalListExcludedIps'|translate }}</strong>
<p>{{ 'SitesManager_ListOfIpsToBeExcludedOnAllWebsites'|translate }} </p>
</td>
</tr>
<tr>
<td>
<textarea cols="30" rows="3" id="globalExcludedIps">
{{- globalExcludedIps -}}
</textarea>
</td>
<td>
<label for="globalExcludedIps">{{ excludedIpHelp }}</label>
</td>
</tr>
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_GlobalListExcludedQueryParameters'|translate }}</strong>
<p>{{ 'SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites'|translate }} </p>
</td>
</tr>
<tr>
<td>
<textarea cols="30" rows="3" id="globalExcludedQueryParameters">
{{- globalExcludedQueryParameters -}}
</textarea>
</td>
<td>
<label for="globalExcludedQueryParameters">{{ excludedQueryParametersHelp }}</label>
</td>
</tr>
{# global excluded user agents #}
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_GlobalListExcludedUserAgents'|translate }}</strong>
<p>{{ 'SitesManager_GlobalListExcludedUserAgents_Desc'|translate }}</p>
</td>
</tr>
<tr>
<td>
<textarea cols="30" rows="3" id="globalExcludedUserAgents">
{{- globalExcludedUserAgents -}}
</textarea>
</td>
<td><label for="globalExcludedUserAgents">{{ excludedUserAgentsHelp }}</label>
</td>
</tr>
<tr>
<td>
<input type="checkbox" id="enableSiteUserAgentExclude" name="enableSiteUserAgentExclude"
{% if allowSiteSpecificUserAgentExclude %}checked="checked"{% endif %}/>
<label for="enableSiteUserAgentExclude">
{{ 'SitesManager_EnableSiteSpecificUserAgentExclude'|translate }}
</label>
<span id="enableSiteUserAgentExclude-loading" class="loadingPiwik" style="display:none;">
<img src="plugins/Zeitgeist/images/loading-blue.gif"/>
</span>
</td>
<td>
{{ piwik.inlineHelp('SitesManager_EnableSiteSpecificUserAgentExclude_Help'|translate('<a href="#editSites">','</a>'))|raw }}
</td>
</tr>
{# global keep URL fragments #}
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_KeepURLFragments'|translate }}</strong>
<p>{{ 'SitesManager_KeepURLFragmentsHelp'|translate("<em>#</em>","<em>example.org/index.html#first_section</em>","<em>example.org/index.html</em>")|raw }}
</p>
<input type="checkbox" id="globalKeepURLFragments" name="globalKeepURLFragments"
{% if globalKeepURLFragments %}checked="checked"{% endif %}/>
<label for="globalKeepURLFragments">{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</label>
<p>{{ 'SitesManager_KeepURLFragmentsHelp2'|translate }}</p>
</td>
</tr>
{# global site search #}
<tr>
<td colspan="2">
<strong id="globalSiteSearch">{{ 'SitesManager_TrackingSiteSearch'|translate }}</strong>
<p>{{ sitesearchIntro }}</p>
<span class="form-description" style="font-size:8pt;">
{{ 'SitesManager_SearchParametersNote'|translate }} {{ 'SitesManager_SearchParametersNote2'|translate }}
</span>
</td>
</tr>
<tr>
<td colspan="2">
<label>{{ searchKeywordLabel }} &nbsp;
<input type="text" size="15" id="globalSearchKeywordParameters"
value="{{ globalSearchKeywordParameters|raw }}"/>
<div style='width: 200px;float:right;'>{{ searchKeywordHelp }}</div>
</label>
</td>
</tr>
<tr>
<td colspan="2">
{% if not isSearchCategoryTrackingEnabled %}
<input value='globalSearchCategoryParametersIsDisabled' id="globalSearchCategoryParameters"
type='hidden'/>
<span class='form-description'>Note: you could also track your Internal Search Engine Categories, but the plugin Custom Variables is required. Please enable the plugin CustomVariables (or ask your Piwik admin).</span>
{% else %}
{{ 'Goals_Optional'|translate }} {{ 'SitesManager_SearchCategoryDesc'|translate }} <br/>
</td>
</tr>
<tr>
<td colspan="2">
<label>{{ searchCategoryLabel }} &nbsp;
<input type="text" size="15" id="globalSearchCategoryParameters"
value="{{ globalSearchCategoryParameters|raw }}"/>
<div style='width: 200px;float:right;'>{{ searchCategoryHelp }}</div>
</label>
{% endif %}
</td>
</tr>
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_DefaultTimezoneForNewWebsites'|translate }}</strong>
<p>{{ 'SitesManager_SelectDefaultTimezone'|translate }} </p>
</td>
</tr>
<tr>
<td>
<div id='defaultTimezone'></div>
</td>
<td>
{{ defaultTimezoneHelp }}
</td>
</tr>
<tr>
<td colspan="2">
<strong>{{ 'SitesManager_DefaultCurrencyForNewWebsites'|translate }}</strong>
<p>{{ 'SitesManager_SelectDefaultCurrency'|translate }}</p>
</td>
</tr>
<tr>
<td>
<div id='defaultCurrency'></div>
</td>
<td>
{{ currencyHelpPlain }}
</td>
</tr>
</table>
<span style="margin-left:20px;">
<input type="submit" class="submit" id='globalSettingsSubmit' value="{{ 'General_Save'|translate }}"/>
</span>
{{ ajax.errorDiv('ajaxErrorGlobalSettings') }}
{{ ajax.loadingDiv('ajaxLoadingGlobalSettings') }}
{% endif %}
{% if showAddSite %}
<script type="text/javascript">
$(document).ready(function () {
$('.addRowSite:first').trigger('click');
});
</script>
{% endif %}
<br/><br/><br/><br/>
{% endblock %}