-
- SELECT s.id, c.Cliente, e.date_time login, is_new,
- s.date_time last_activity, a.platform, a.browser, a.version
- FROM user_session s
- JOIN visit_user e ON s.visit_user_id = e.id
- JOIN visit_access c ON e.access_id = c.id
- JOIN visit_agent a ON c.agent_id = a.id
- JOIN visit v ON a.visit_id = v.id
- JOIN account.user u ON e.user_id = u.id
- JOIN vn2008.Clientes c ON e.user_id = c.Id_cliente
- ORDER BY last_activity DESC
+
+
+ SELECT s.id, c.Cliente, e.date_time login, is_new,
+ s.date_time last_activity, a.platform, a.browser, a.version
+ FROM user_session s
+ JOIN visit_user e ON s.visit_user_id = e.id
+ JOIN visit_access c ON e.access_id = c.id
+ JOIN visit_agent a ON c.agent_id = a.id
+ JOIN visit v ON a.visit_id = v.id
+ JOIN account.user u ON e.user_id = u.id
+ JOIN vn2008.Clientes c ON e.user_id = c.Id_cliente
+ ORDER BY last_activity DESC
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VisitsTotal:
+
+
+
+
+
+ NewVisitsTotal:
+
+
+
+
+
-
- SELECT browser
- ,MIN(CAST(version AS DECIMAL(4,1))) min_version
- ,MAX(CAST(version AS DECIMAL(4,1))) max_version
- ,MAX(e.date_time) last_visit
- ,COUNT(DISTINCT c.id) visits
- ,SUM(is_new) new_visits
- FROM visit_user e
- JOIN visit_access c ON e.access_id = c.id
- JOIN visit_agent a ON c.agent_id = a.id
- JOIN visit v ON a.visit_id = v.id
- WHERE e.date_time BETWEEN TIMESTAMP(#from,'00:00:00') AND TIMESTAMP(#to,'23:59:59')
- GROUP BY browser ORDER BY visits DESC
+
+
+ SELECT browser
+ ,MIN(CAST(version AS DECIMAL(4,1))) min_version
+ ,MAX(CAST(version AS DECIMAL(4,1))) max_version
+ ,MAX(e.date_time) last_visit
+ ,COUNT(DISTINCT c.id) visits
+ ,SUM(is_new) new_visits
+ FROM visit_user e
+ JOIN visit_access c ON e.access_id = c.id
+ JOIN visit_agent a ON c.agent_id = a.id
+ JOIN visit v ON a.visit_id = v.id
+ WHERE e.date_time BETWEEN TIMESTAMP(#from,'00:00:00') AND TIMESTAMP(#to,'23:59:59')
+ GROUP BY browser ORDER BY visits DESC
+
-
-
+
+
+
+
diff --git a/web/forms/cms/contact/style.css b/web/forms/cms/contact/style.css
index fea49768..00aeb54a 100755
--- a/web/forms/cms/contact/style.css
+++ b/web/forms/cms/contact/style.css
@@ -5,19 +5,19 @@
}
.contact .box
{
- max-width: 40em;
+ max-width: 30em;
+ padding: 2em;
}
-.contact .body
+.contact .form
{
position: relative;
text-align: left;
max-width: 25em;
- margin: 1em auto;
+ margin: 0 auto;
}
.contact form
{
margin: 0 auto;
- max-width: 25em;
}
.contact form p
{
diff --git a/web/forms/cms/contact/ui.xml b/web/forms/cms/contact/ui.xml
index 1f53409b..e7ae453f 100755
--- a/web/forms/cms/contact/ui.xml
+++ b/web/forms/cms/contact/ui.xml
@@ -4,7 +4,7 @@
-
+
FillFormData
diff --git a/web/forms/ecomerce/basket/style.css b/web/forms/ecomerce/basket/style.css
index f563b956..a57d55a4 100755
--- a/web/forms/ecomerce/basket/style.css
+++ b/web/forms/ecomerce/basket/style.css
@@ -54,6 +54,7 @@
margin-right: 1em;
float: left;
border-radius: 50%;
+ height: 3.2em;
}
.basket-line > p
{
diff --git a/web/forms/ecomerce/basket/ui.xml b/web/forms/ecomerce/basket/ui.xml
index d1fa0d76..c8d57f0f 100755
--- a/web/forms/ecomerce/basket/ui.xml
+++ b/web/forms/ecomerce/basket/ui.xml
@@ -28,8 +28,8 @@
SELECT i.id, i.amount, i.price, a.Article, a.Categoria,
a.Medida, a.Tallos, a.Color, o.Abreviatura, a.Foto
FROM basket_item i
- JOIN vn2008.Articles a ON a.Id_Article = i.item_id
- LEFT JOIN vn2008.Origen o ON a.id_origen = o.id
+ JOIN vn2008.Articles a ON a.Id_Article = i.item_id
+ LEFT JOIN vn2008.Origen o ON a.id_origen = o.id
@@ -38,7 +38,7 @@
form="iter"
column="ticket_id"
class="delete"
- tip="_SeeOrder"
+ tip="_Remove"
image="image/delete.svg"
on-click="onDeleteClick"/>
-
-
- SELECT n.id, c.Cliente, priority, image,
- CONCAT(LEFT(n.title, 25), '...') title
- FROM news n
- JOIN vn2008.Clientes c ON n.user_id = c.Id_Cliente
- ORDER BY priority, n.date_time DESC
-
-
+
+
+
+ SELECT n.id, c.Cliente, priority, image, title
+ FROM news n
+ JOIN vn2008.Clientes c ON n.user_id = c.Id_Cliente
+ ORDER BY priority, n.date_time DESC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Priority
+
+
+
+
+
diff --git a/web/image/incognito.svg b/web/image/incognito.svg
new file mode 100644
index 00000000..e7ccf679
--- /dev/null
+++ b/web/image/incognito.svg
@@ -0,0 +1,56 @@
+
+
diff --git a/web/image/supplant.png b/web/image/supplant.png
deleted file mode 100755
index d596c2bf..00000000
Binary files a/web/image/supplant.png and /dev/null differ
diff --git a/web/image/supplant.svg b/web/image/supplant.svg
new file mode 100644
index 00000000..743eb22c
--- /dev/null
+++ b/web/image/supplant.svg
@@ -0,0 +1,81 @@
+
+
+
+
\ No newline at end of file
diff --git a/web/js/hedera/gui.css b/web/js/hedera/gui.css
index 73c462a0..0e2338b0 100755
--- a/web/js/hedera/gui.css
+++ b/web/js/hedera/gui.css
@@ -161,6 +161,9 @@
.vn-gui .welcome
{
display: block;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
}
.vn-gui .supplant
{
@@ -170,6 +173,12 @@
.vn-gui .supplant > span
{
font-size: 1.1em;
+
+ max-width: 10em;
+ display: inline-block;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
}
.vn-gui .supplant > button
{
diff --git a/web/js/hedera/gui.js b/web/js/hedera/gui.js
index f609cd02..b2c88d47 100755
--- a/web/js/hedera/gui.js
+++ b/web/js/hedera/gui.js
@@ -20,7 +20,7 @@ Vn.Gui = new Class
var sql = 'SELECT default_form, image_dir, image_host FROM config;'
+'SELECT production_domain, test_domain FROM config;'
- +'SELECT name FROM customer_account;'
+ +'SELECT name FROM customer_user;'
+'CALL form_list ();';
this.conn.execQuery (sql, this.onMainQueryDone.bind (this));
},
@@ -69,6 +69,9 @@ Vn.Gui = new Class
Vn.Cookie.set ('hedera_cookies', true);
Htk.Toast.showWarning (_('By using this site you accept cookies'));
}
+
+ if (Vn.Cookie.check ('hedera_supplant'))
+ this.supplantUser (Vn.Cookie.get ('hedera_supplant'));
}
,show: function ()
@@ -293,6 +296,8 @@ Vn.Gui = new Class
this.newVersionBlock = false;
}
+
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++ Menu
,createMenu: function (res, sectionMap, parent, ul)
{
@@ -322,16 +327,16 @@ Vn.Gui = new Class
li.appendChild (submenu);
li.addEventListener ('mouseover',
- this.onLiMouseHover.bind (this, submenu, a));
+ this._onLiMouseHover.bind (this, submenu, a));
li.addEventListener ('mouseout',
- this.onLiMouseOut.bind (this));
+ this._onLiMouseOut.bind (this));
this.createMenu (res, sectionMap, formId, submenu);
}
}
}
- ,onLiMouseHover: function (submenu, parent)
+ ,_onLiMouseHover: function (submenu, parent)
{
if (this.menuShown)
return;
@@ -345,7 +350,7 @@ Vn.Gui = new Class
submenu.style.top = rect.top +'px';
}
- ,onLiMouseOut: function ()
+ ,_onLiMouseOut: function ()
{
this.timeout = setTimeout (this.hideSubmenu.bind (this), 160);
}
@@ -365,6 +370,8 @@ Vn.Gui = new Class
}
}
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++ Forms
+
,_onFormChange: function ()
{
var formPath = this.hashParam.value;
@@ -460,6 +467,8 @@ Vn.Gui = new Class
}
}
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++ Reports
+
,openReport: function (reportName, batch)
{
this.loaderPush ();
@@ -482,6 +491,8 @@ Vn.Gui = new Class
report.open (batch);
}
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++ Supplant
+
,supplantUser: function (userId, callback)
{
var batch = new Sql.Batch ();
@@ -496,7 +507,7 @@ Vn.Gui = new Class
,_onUserSupplant: function (userId, callback, resultSet)
{
this._supplantClear ();
- this._supplanted = userId;
+ Vn.Cookie.set ('hedera_supplant', userId);
resultSet.fetchResult ();
var userName = resultSet.fetchValue ();
@@ -510,10 +521,10 @@ Vn.Gui = new Class
,_supplantClear: function ()
{
- if (this._supplanted)
+ if (Vn.Cookie.check ('hedera_supplant'))
{
Vn.Node.hide (this.$('supplant'));
- this._supplanted = null;
+ Vn.Cookie.unset ('hedera_supplant');
}
}
@@ -528,6 +539,8 @@ Vn.Gui = new Class
this._supplantClear ();
this._onFormChange ();
}
+
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++ Destroy
,_destroy: function ()
{
diff --git a/web/js/hedera/style.css b/web/js/hedera/style.css
index 6bad5a12..787744fe 100755
--- a/web/js/hedera/style.css
+++ b/web/js/hedera/style.css
@@ -84,6 +84,23 @@ p
margin: 0.8em 0;
}
+/* Focus outline */
+
+*:focus
+{
+ outline: 1px solid rgba(1, 1, 1, 0.15);
+ -moz-outline-radius: .1em;
+}
+button::-moz-focus-inner
+{
+ border: none;
+}
+select:focus
+{
+ color: transparent;
+ text-shadow: 0 0 0 #333;
+}
+
/* Inputs */
input[type=text],
diff --git a/web/js/vn/builder.js b/web/js/vn/builder.js
index fa44974e..1560f086 100755
--- a/web/js/vn/builder.js
+++ b/web/js/vn/builder.js
@@ -346,6 +346,7 @@ Vn.Builder = new Class
,propCompile: function (context, klass, props, node, attribute, value)
{
+ var isLink = false;
var newValue = null;
var propName = attribute.replace (/-./g, this._replaceFunc);
var propInfo = klass.Properties[propName];
@@ -375,18 +376,20 @@ Vn.Builder = new Class
newValue = this._translateValue (value);
break;
case Function:
- newValue = this._getMethod (value).bind (this.signalData);
+ var method = this._getMethod (value);
+ newValue = method ? method.bind (this.signalData) : null;
break;
default:
if (propInfo.enumType)
newValue = propInfo.enumType[value];
- break;
+ else if (propInfo.type instanceof Function)
+ isLink = true;
}
- if (newValue !== null && newValue !== undefined)
- props[propName] = newValue;
- else if (propInfo.type instanceof Function)
+ if (isLink)
this._addLink (context, propName, value);
+ else if (newValue !== null && newValue !== undefined)
+ props[propName] = newValue;
else
this._showError ('Attribute \'%s\' invalid for tag \'%s\'',
attribute, node.tagName);