forked from verdnatura/hedera-web
Gestion de errores mejorada
This commit is contained in:
parent
29b7e51557
commit
f7f0a26710
|
@ -1,5 +1,5 @@
|
|||
Package: hedera-web
|
||||
Version: 1.0-47
|
||||
Version: 1.0-48
|
||||
Architecture: all
|
||||
Maintainer: Juan Ferrer Toribio <juan@verdnatura.es>
|
||||
Depends: apache2, php5-mysql, php-vn-web
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
<t>AddAddress</t>
|
||||
</button>
|
||||
</div>
|
||||
<div class="clear"/>
|
||||
</div>
|
||||
<div class="form">
|
||||
<htk-radio-group
|
||||
|
|
|
@ -18,7 +18,7 @@ Vn.Address = new Class
|
|||
|
||||
,onOperationsDone: function ()
|
||||
{
|
||||
(new Htk.Toast ()).showMessage (_('AddressChangedSuccessfully'));
|
||||
Htk.Toast.showMessage (_('AddressChangedSuccessfully'));
|
||||
this.onReturnClick ();
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ Vn.Conf = new Class
|
|||
this.conn.execQuery (query, this.onPasswordUpdate.bind (this), batch);
|
||||
}
|
||||
else
|
||||
(new Htk.Toast ()).showError (_('PasswordsDoesntMatch'));
|
||||
Htk.Toast.showError (_('PasswordsDoesntMatch'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ Vn.Conf = new Class
|
|||
return;
|
||||
|
||||
this.relogin ();
|
||||
(new Htk.Toast ()).showMessage (_('PasswordsChanged'));
|
||||
Htk.Toast.showMessage (_('PasswordsChanged'));
|
||||
}
|
||||
|
||||
,relogin: function ()
|
||||
|
|
|
@ -18,9 +18,7 @@ Vn.Photos = new Class
|
|||
}
|
||||
|
||||
,onImageUpload: function ()
|
||||
{
|
||||
var toast = new Htk.Toast ();
|
||||
|
||||
{
|
||||
this.gui.loaderPop ();
|
||||
this.$('submit').disabled = false;
|
||||
|
||||
|
@ -32,10 +30,10 @@ Vn.Photos = new Class
|
|||
{
|
||||
this.$('photo-id').value = '';
|
||||
this.$('photo-id').focus ();
|
||||
toast.showMessage (_('ImageUploaded'));
|
||||
Htk.Toast.showMessage (_('ImageUploaded'));
|
||||
}
|
||||
else
|
||||
toast.showError (response.error.message +' ('+ response.error.code +')');
|
||||
Htk.Toast.showError (response.error.message +' ('+ response.error.code +')');
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
|
|
|
@ -33,10 +33,10 @@ Vn.Contact = new Class
|
|||
if (response)
|
||||
{
|
||||
form.reset ();
|
||||
(new Htk.Toast ()).showMessage (_('DataSentSuccess'));
|
||||
Htk.Toast.showMessage (_('DataSentSuccess'));
|
||||
}
|
||||
else
|
||||
(new Htk.Toast ()).showError (_('ErrorSendingData'));
|
||||
Htk.Toast.showError (_('ErrorSendingData'));
|
||||
|
||||
form['captcha'].value = '';
|
||||
this.refreshCaptcha ();
|
||||
|
|
|
@ -26,7 +26,7 @@ Vn.Basket = new Class
|
|||
|
||||
,onConfigureClick: function ()
|
||||
{
|
||||
(new Htk.Toast ()).showWarning (_('RememberReconfiguringImpact'));
|
||||
Htk.Toast.showWarning (_('RememberReconfiguringImpact'));
|
||||
this.hash.set ({'form': 'ecomerce/checkout'});
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,10 @@ Vn.Catalog = new Class
|
|||
|
||||
this.$('header').style.backgroundColor = color;
|
||||
|
||||
var tr = this.$('items-grid').getNode ().querySelector ('thead tr');
|
||||
var tr = this.$('items-grid').getNode ()
|
||||
.getElementsByTagName ('thead')[0]
|
||||
.getElementsByTagName ('tr')[0];
|
||||
//.querySelector ('thead tr');
|
||||
tr.style.backgroundColor = color;
|
||||
}
|
||||
|
||||
|
@ -213,7 +216,7 @@ Vn.Catalog = new Class
|
|||
this.$('amount').value += grouping;
|
||||
}
|
||||
else
|
||||
(new Htk.Toast ()).showError (_('NoMoreAmountAvailable'));
|
||||
Htk.Toast.showError (_('NoMoreAmountAvailable'));
|
||||
}
|
||||
|
||||
,onEraseClick: function ()
|
||||
|
|
|
@ -117,13 +117,13 @@ button.basket:hover
|
|||
|
||||
.realms-box
|
||||
{
|
||||
text-align: left;
|
||||
box-shadow: 0 0 0.4em #AAA;
|
||||
background-color: rgba(1, 1, 1, .1);
|
||||
}
|
||||
.realms-box a
|
||||
{
|
||||
display: inline-block;
|
||||
display: block;
|
||||
float: left;
|
||||
line-height: 0;
|
||||
width: 33.3%;
|
||||
}
|
||||
|
@ -256,12 +256,8 @@ td.third-category
|
|||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
td.fixed-price
|
||||
td.price
|
||||
{
|
||||
color: green;
|
||||
}
|
||||
td.aprox-price
|
||||
{
|
||||
color: red;
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,8 @@
|
|||
<htk-column-text
|
||||
title="_Price"
|
||||
column="price"
|
||||
format="_from %.2d€"/>
|
||||
format="_from %.2d€"
|
||||
class="price"/>
|
||||
<htk-column-button
|
||||
column="id"
|
||||
image="image/add.svg"
|
||||
|
|
|
@ -62,12 +62,12 @@ Vn.Checkout = new Class
|
|||
|
||||
if (this.$('order-form').numRows > 0)
|
||||
{
|
||||
(new Htk.Toast ()).showMessage (_('OrderUpdated'));
|
||||
Htk.Toast.showMessage (_('OrderUpdated'));
|
||||
window.history.back();
|
||||
}
|
||||
else
|
||||
{
|
||||
(new Htk.Toast ()).showMessage (_('OrderStarted'));
|
||||
Htk.Toast.showMessage (_('OrderStarted'));
|
||||
this.hash.set ({'form': 'ecomerce/catalog'});
|
||||
}
|
||||
}
|
||||
|
@ -171,6 +171,18 @@ Vn.Checkout = new Class
|
|||
this.$('address-form').row = row;
|
||||
}
|
||||
|
||||
,onAgenciesReady: function (model)
|
||||
{
|
||||
if (model.ready && model.numRows == 0)
|
||||
Htk.Toast.showError (_('NoAgeciesAvailableForDate'));
|
||||
}
|
||||
|
||||
,onWarehousesReady: function (model)
|
||||
{
|
||||
if (model.ready && model.numRows == 0)
|
||||
Htk.Toast.showError (_('NoWarehousesAvailableForDate'));
|
||||
}
|
||||
|
||||
,calendarRestrict: function (date)
|
||||
{
|
||||
return date.getTime () >= this.today.getTime ()
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
JOIN vn2008.Vistas v ON o.delivery_method_id = v.vista_id
|
||||
</db-model>
|
||||
</db-form>
|
||||
<db-model property="model" id="agencies" auto-load="false" result-index="1">
|
||||
<db-model property="model" id="agencies" auto-load="false" result-index="1" on-status-changed="onAgenciesReady">
|
||||
CALL agency_list_from_date (#date, #address);
|
||||
SELECT a.Id_Agencia, a.description
|
||||
FROM t_agency t
|
||||
|
@ -32,7 +32,7 @@
|
|||
<item name="date" param="date"/>
|
||||
</sql-batch>
|
||||
</db-model>
|
||||
<db-model property="model" id="warehouses" auto-load="false" result-index="1">
|
||||
<db-model property="model" id="warehouses" auto-load="false" result-index="1" on-status-changed="onWarehousesReady">
|
||||
CALL agency_list_from_date (#date, NULL);
|
||||
SELECT a.Id_Agencia, SUBSTR(a.description, 5) description
|
||||
FROM t_agency t
|
||||
|
|
|
@ -41,6 +41,7 @@ Vn.Confirm = new Class
|
|||
|
||||
,onConfirmClick: function ()
|
||||
{
|
||||
this.disableButtons (true);
|
||||
this.$('confirm-query').execute ();
|
||||
}
|
||||
|
||||
|
@ -59,7 +60,7 @@ Vn.Confirm = new Class
|
|||
this.popup.showCenter ();
|
||||
}
|
||||
else
|
||||
this.hash.set ({'form': 'ecomerce/basket'});
|
||||
this.disableButtons (false);
|
||||
}
|
||||
|
||||
,onAcceptClick: function ()
|
||||
|
|
|
@ -41,7 +41,7 @@ Vn.New = new Class
|
|||
|
||||
,onOperationsDone: function ()
|
||||
{
|
||||
(new Htk.Toast ()).showMessage (_('NewChangedSuccessfully'));
|
||||
Htk.Toast.showMessage (_('NewChangedSuccessfully'));
|
||||
this.onReturnClick ();
|
||||
}
|
||||
|
||||
|
|
|
@ -196,6 +196,11 @@ input.button:hover
|
|||
background-color: #9C3;
|
||||
cursor: pointer;
|
||||
}
|
||||
button.flat:disabled,
|
||||
input.button:disabled
|
||||
{
|
||||
color: gray;
|
||||
}
|
||||
|
||||
/* Thin button */
|
||||
|
||||
|
@ -210,6 +215,10 @@ button.thin:hover
|
|||
{
|
||||
background-color: rgba(1,1,1,0.1);
|
||||
}
|
||||
button.thin:disabled
|
||||
{
|
||||
color: gray;
|
||||
}
|
||||
|
||||
/* Image */
|
||||
|
||||
|
@ -364,10 +373,12 @@ img.icon
|
|||
width: 50%;
|
||||
display: block;
|
||||
float: left;
|
||||
clear: left;
|
||||
}
|
||||
.masonry-box:nth-child(2n+0)
|
||||
{
|
||||
float: right;
|
||||
clear: right;
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 1400px)
|
||||
|
@ -627,26 +638,31 @@ img.icon
|
|||
z-index: 210;
|
||||
display: block;
|
||||
position: fixed;
|
||||
background-color: white;
|
||||
border-radius: 0.1em;
|
||||
box-shadow: 0 0 0.4em #666;
|
||||
padding: 0.5em;
|
||||
left: 50%;
|
||||
top: 4em;
|
||||
width: 20em;
|
||||
margin-left: -10.5em;
|
||||
width: 21em;
|
||||
margin-left: -11em;
|
||||
text-align: center;
|
||||
overflow: auto;
|
||||
max-height: 40em;
|
||||
}
|
||||
|
||||
.htk-toast.message
|
||||
.htk-toast > div
|
||||
{
|
||||
padding: .5em 2%;
|
||||
margin: .5em 2%;
|
||||
border-radius: 0.1em;
|
||||
box-shadow: 0 0 0.4em #666;
|
||||
width: 92%;
|
||||
}
|
||||
.htk-toast > .message
|
||||
{
|
||||
background-color: #BFB;
|
||||
}
|
||||
.htk-toast.warning
|
||||
.htk-toast > .warning
|
||||
{
|
||||
background-color: #FFB;
|
||||
}
|
||||
.htk-toast.error
|
||||
.htk-toast > .error
|
||||
{
|
||||
background-color: #FBB;
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
id="namedview3445"
|
||||
showgrid="false"
|
||||
inkscape:zoom="20.6"
|
||||
inkscape:cx="20"
|
||||
inkscape:cy="20"
|
||||
inkscape:cx="19.691218"
|
||||
inkscape:cy="19.902913"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
|
@ -47,7 +47,7 @@
|
|||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" /><rect
|
||||
style="fill:#3f51b5;stroke-width:2.652;stroke-miterlimit:3.86369991;stroke-dasharray:none;fill-opacity:1"
|
||||
style="fill:#795548;stroke-width:2.652;stroke-miterlimit:3.86369991;stroke-dasharray:none;fill-opacity:1"
|
||||
id="rect3049"
|
||||
width="40"
|
||||
height="40"
|
||||
|
@ -57,51 +57,51 @@
|
|||
transform="translate(-4.4638381,-117.67518)" /><g
|
||||
id="Guides"
|
||||
transform="translate(-4.4638381,-117.67518)" /><g
|
||||
id="g4239"
|
||||
transform="translate(-0.10053752,-2.4592427)"><path
|
||||
id="g4158"
|
||||
transform="translate(-0.33980594,-0.41262125)"><path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4214"
|
||||
d="m 11.165048,20.485436 8.200434,10.498644 -2.771451,4.783696 10.604652,-0.04021 -3.727098,-7.833035 6.282246,-11.145533 z"
|
||||
d="m 11.501403,17.977649 4.753832,12.877285 -0.926791,2.453599 10.604652,-0.04021 -1.057195,-2.444686 4.09778,-12.990193 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
style="fill:#8ed300;stroke-width:2.65199995;stroke-miterlimit:3.86369991;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3283"
|
||||
d="M 21.454596,21.671856" /><path
|
||||
d="M 20.577359,23.241739" /><path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2.65199995;stroke-miterlimit:3.86369991;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3317"
|
||||
d="M 21.454596,21.671856"
|
||||
d="M 20.577359,23.241739"
|
||||
stroke-miterlimit="3.8637" /><path
|
||||
d="M 20.270658,18.367696"
|
||||
d="M 19.393421,19.937579"
|
||||
id="path3387"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#8ed300" /><path
|
||||
stroke-miterlimit="3.8637"
|
||||
d="M 20.690578,17.915555 C 24.242197,12.6377 34.259342,14.775718 31.831833,24.422882 29.239197,23.079064 24.06567,13.244664 20.690578,17.915555 Z"
|
||||
d="M 20.97839,19.485438 C 24.530009,14.207583 34.547154,16.345601 32.119645,25.992765 29.527009,24.648947 24.353482,14.814547 20.97839,19.485438 Z"
|
||||
id="path3429"
|
||||
inkscape:connector-curvature="0"
|
||||
style="clip-rule:evenodd;fill:#3f51b5;fill-opacity:1;stroke:#ffffff;stroke-width:2.13580728;stroke-miterlimit:3.86369991" /><path
|
||||
style="clip-rule:evenodd;fill:#3f51b5;fill-opacity:1;stroke:#ffffff;stroke-width:2.13580728;stroke-miterlimit:3.86369991"
|
||||
style="clip-rule:evenodd;fill:#795548;fill-opacity:1;stroke:#ffffff;stroke-width:2.13580728;stroke-miterlimit:3.86369991" /><path
|
||||
style="clip-rule:evenodd;fill:#795548;fill-opacity:1;stroke:#ffffff;stroke-width:2.13580728;stroke-miterlimit:3.86369991"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3437"
|
||||
d="m 20.611539,18.624687 c -2.695237,-5.762527 4.296762,-13.2467988 11.316744,-6.1978 -2.487963,1.530364 -13.582926,0.899564 -11.316744,6.1978 z"
|
||||
d="M 20.899351,20.19457 C 18.204114,14.432043 25.196113,6.9477717 32.216095,13.996771 29.728132,15.527134 18.633169,14.896334 20.899351,20.19457 Z"
|
||||
stroke-miterlimit="3.8637" /><g
|
||||
style="fill:#3f51b5;fill-opacity:1"
|
||||
transform="matrix(0.68482697,0,0,0.68963482,1.3118311,3.1868137)"
|
||||
style="fill:#795548;fill-opacity:1"
|
||||
transform="matrix(0.68482697,0,0,0.68963482,1.5025557,1.5528137)"
|
||||
id="g4195"><g
|
||||
id="g3295"
|
||||
transform="matrix(0.36363636,0,0,0.36363636,-0.08672728,-5.14738)"
|
||||
style="fill:#3f51b5;fill-opacity:1;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"><path
|
||||
style="fill:#795548;fill-opacity:1;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"><path
|
||||
stroke-miterlimit="3.8637"
|
||||
d="m 25.409,81.75 c -1.393,-5.199 0.654,-10.508 4.746,-13.513 -0.251,-0.215 -0.496,-0.441 -0.734,-0.68 -4.955,-4.954 -4.955,-12.987 0,-17.941 3.804,-3.804 9.423,-4.688 14.07,-2.65 0.06,-0.322 0.133,-0.645 0.22,-0.966 1.813,-6.769 8.77,-10.785 15.538,-8.971 5.195,1.392 8.77,5.814 9.33,10.855 0.31,-0.109 0.626,-0.208 0.95,-0.294 6.768,-1.813 13.725,2.203 15.539,8.971 1.393,5.199 -0.654,10.509 -4.746,13.514 0.25,0.214 0.494,0.439 0.73,0.676 4.955,4.955 4.955,12.987 0,17.941 -3.8,3.8 -9.41,4.686 -14.054,2.657 -0.06,0.32 -0.133,0.642 -0.219,0.962 -1.813,6.768 -8.771,10.784 -15.539,8.971 -5.196,-1.392 -8.771,-5.816 -9.329,-10.859 -0.314,0.111 -0.635,0.211 -0.962,0.298 -6.77,1.812 -13.727,-2.204 -15.54,-8.971 z"
|
||||
id="path3297"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3f51b5;fill-opacity:1;stroke:#ffffff;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none" /></g><g
|
||||
style="fill:#795548;fill-opacity:1;stroke:#ffffff;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none" /></g><g
|
||||
id="g3313"
|
||||
transform="matrix(0.36363636,0,0,0.36363636,-0.08618165,-5.146909)"
|
||||
style="fill:#3f51b5;fill-opacity:1;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"><circle
|
||||
style="fill:#3f51b5;fill-opacity:1;stroke:#ffffff;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"
|
||||
style="fill:#795548;fill-opacity:1;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"><circle
|
||||
style="fill:#795548;fill-opacity:1;stroke:#ffffff;stroke-width:7.29300022;stroke-miterlimit:3.86369991;stroke-dasharray:none"
|
||||
id="circle3315"
|
||||
r="9.2849998"
|
||||
cy="69.153999"
|
||||
|
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
|
@ -7,15 +7,45 @@ require_once ('vn/hedera/util.php');
|
|||
use Vn\Hedera\Web;
|
||||
use Vn\Lib\Locale;
|
||||
|
||||
try {
|
||||
Web::sysInit ();
|
||||
ini_set ('log_errors', TRUE);
|
||||
ini_set ('error_log', Vn\Hedera\_LOG_DIR .'/hedera-web.log');
|
||||
|
||||
function myExitHandler ()
|
||||
{
|
||||
Web::deinit ();
|
||||
}
|
||||
catch (Exception $e)
|
||||
|
||||
function myGlobalErrorHandler ()
|
||||
{
|
||||
header ('Location: unavailable.html');
|
||||
myExitHandler ();
|
||||
exit (0);
|
||||
}
|
||||
|
||||
function myErrorHandler ($errno, $message, $file, $line, $context)
|
||||
{
|
||||
error_log ("$file:$line: $message");
|
||||
|
||||
switch ($errno)
|
||||
{
|
||||
case E_USER_ERROR:
|
||||
myGlobalErrorHandler ();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
function myExceptionHandler ($e)
|
||||
{
|
||||
error_log ($e->getFile () .':'. $e->getLine () .': '.$e->getMessage ());
|
||||
myGlobalErrorHandler ();
|
||||
}
|
||||
|
||||
set_error_handler ('myErrorHandler', E_ALL);
|
||||
set_exception_handler ('myExceptionHandler');
|
||||
|
||||
Web::sysInit ();
|
||||
|
||||
if (!Web::isHttps () && Web::$sysConn->getValue ('SELECT https FROM config'))
|
||||
{
|
||||
header ("Location: https://${_SERVER['SERVER_NAME']}${_SERVER['REQUEST_URI']}");
|
||||
|
@ -81,6 +111,6 @@ if (file_exists ($basePath))
|
|||
require ($basePath .'/html.php');
|
||||
}
|
||||
|
||||
Web::deinit ();
|
||||
myExitHandler ();
|
||||
|
||||
?>
|
||||
|
|
|
@ -234,10 +234,13 @@ Db.Conn.implement
|
|||
catch (e) {
|
||||
error = new Vn.Error ('Http', 'badReply', e.message);
|
||||
}
|
||||
|
||||
var errorHandled = false;
|
||||
|
||||
if (callback)
|
||||
callback (new Db.ResultSet (results, error));
|
||||
if (error)
|
||||
errorHandled = callback (new Db.ResultSet (results, error));
|
||||
|
||||
if (error && errorHandled != true)
|
||||
this.signalEmit ('error', error);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -39,6 +39,18 @@ Htk.Column = new Class
|
|||
type: Function
|
||||
,value: false
|
||||
},
|
||||
class:
|
||||
{
|
||||
type: String
|
||||
,set: function (x)
|
||||
{
|
||||
this._class = x;
|
||||
}
|
||||
,get: function ()
|
||||
{
|
||||
return this._class;
|
||||
}
|
||||
},
|
||||
grid:
|
||||
{
|
||||
type: Htk.Grid
|
||||
|
@ -67,7 +79,12 @@ Htk.Column = new Class
|
|||
**/
|
||||
,render: function (tr)
|
||||
{
|
||||
return this.td.cloneNode (true);
|
||||
var td = this.td.cloneNode (true);
|
||||
|
||||
if (this._class)
|
||||
td.className = this._class;
|
||||
|
||||
return td;
|
||||
}
|
||||
|
||||
,updateColumnIndex: function (model)
|
||||
|
|
|
@ -70,7 +70,8 @@ Htk.Repeater = new Class
|
|||
{
|
||||
this.parent (builder, node);
|
||||
|
||||
var template = node.querySelector ('template:first-of-type');
|
||||
var template = node.getElementsByTagName ('template')[0];
|
||||
//var template = node.querySelector ('template:first-of-type');
|
||||
|
||||
if (template)
|
||||
{
|
||||
|
|
|
@ -1,69 +1,117 @@
|
|||
/**
|
||||
* Class to show toast messages.
|
||||
**/
|
||||
Htk.Toast = new Class
|
||||
({
|
||||
Extends: Htk.Widget
|
||||
,Tag: 'htk-toast'
|
||||
Htk.Toast =
|
||||
{
|
||||
maxMessages: 6
|
||||
,timeout: 10 /* Seconds */
|
||||
,_container: null
|
||||
,_timeouts: null
|
||||
|
||||
,child: null
|
||||
,timerId: null
|
||||
|
||||
,initialize: function ()
|
||||
/**
|
||||
* Shows a normal toast message.
|
||||
*
|
||||
* @param String message The message text
|
||||
**/
|
||||
,showMessage: function (message)
|
||||
{
|
||||
this.createElement ('div');
|
||||
this.node.addEventListener ('mousedown', this.stopEvent);
|
||||
this._showText (message, 'message');
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a warning toast message.
|
||||
*
|
||||
* @param String message The message text
|
||||
**/
|
||||
,showWarning: function (message)
|
||||
{
|
||||
this._showText (message, 'warning');
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows an error toast message.
|
||||
*
|
||||
* @param String message The message text
|
||||
**/
|
||||
,showError: function (message)
|
||||
{
|
||||
this._showText (message, 'error');
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides all currently displayed toast messages.
|
||||
**/
|
||||
,hide: function ()
|
||||
{
|
||||
if (!this._container)
|
||||
return;
|
||||
|
||||
if (this._timeouts)
|
||||
for (var i = 0; i < this._timeouts.length; i++)
|
||||
clearTimeout (this._timeouts[i]);
|
||||
|
||||
this._timeouts = null;
|
||||
|
||||
document.removeEventListener ('mousedown', this.hideHandler);
|
||||
Vn.Node.remove (this._container);
|
||||
this._container = null;
|
||||
this.nodes = [];
|
||||
}
|
||||
|
||||
,showText: function (message, className)
|
||||
,_createContainer: function ()
|
||||
{
|
||||
this.hide ();
|
||||
|
||||
var textNode = document.createTextNode (message);
|
||||
|
||||
Vn.Node.removeChilds (this.node);
|
||||
this.node.appendChild (textNode);
|
||||
this.node.className = 'htk-toast '+ className;
|
||||
document.body.appendChild (this.node);
|
||||
if (this._container)
|
||||
return;
|
||||
|
||||
var container = document.createElement ('div');
|
||||
container.className = 'htk-toast';
|
||||
document.body.appendChild (container);
|
||||
|
||||
this.hideHandler = this.hide.bind (this);
|
||||
document.addEventListener ('mousedown', this.hideHandler);
|
||||
|
||||
// var marginLeft = -parseInt (this.node.offsetWidth / 2);
|
||||
// this.node.style.marginLeft = (marginLeft) +'px';
|
||||
|
||||
this.timerId = setTimeout (this.hide.bind (this), 10000);
|
||||
}
|
||||
|
||||
,showMessage: function (message)
|
||||
{
|
||||
this.showText (message, 'message');
|
||||
}
|
||||
|
||||
,showWarning: function (message)
|
||||
{
|
||||
this.showText (message, 'warning');
|
||||
}
|
||||
|
||||
,showError: function (message)
|
||||
{
|
||||
this.showText (message, 'error');
|
||||
this._timeouts = [];
|
||||
this._container = container;
|
||||
}
|
||||
|
||||
,hide: function ()
|
||||
,_showText: function (message, className)
|
||||
{
|
||||
if (this.timerId)
|
||||
this._createContainer ();
|
||||
|
||||
if (this._timeouts.length >= this.maxMessages)
|
||||
this._onMessageTimeout ();
|
||||
|
||||
var node = document.createElement ('div');
|
||||
node.className = className;
|
||||
node.addEventListener ('mousedown', this._onMessageMouseDown);
|
||||
|
||||
var textNode = document.createTextNode (message);
|
||||
node.appendChild (textNode);
|
||||
|
||||
this._container.appendChild (node);
|
||||
|
||||
var timeoutId = setTimeout (this._onMessageTimeout.bind (this), this.timeout * 1000);
|
||||
this._timeouts.push (timeoutId);
|
||||
}
|
||||
|
||||
,_onMessageTimeout: function ()
|
||||
{
|
||||
if (!this._container)
|
||||
return;
|
||||
|
||||
var nodes = this._container.childNodes;
|
||||
|
||||
if (nodes.length > 0)
|
||||
{
|
||||
clearTimeout (this.timerId);
|
||||
this.timerId = null;
|
||||
document.removeEventListener ('mousedown', this.hideHandler);
|
||||
document.body.removeChild (this.node);
|
||||
this.signalEmit ('closed');
|
||||
clearTimeout (this._timeouts.shift ());
|
||||
Vn.Node.remove (nodes[0]);
|
||||
}
|
||||
if (nodes.length == 0)
|
||||
this.hide ();
|
||||
}
|
||||
|
||||
,stopEvent: function (event)
|
||||
,_onMessageMouseDown: function (event)
|
||||
{
|
||||
event.stopPropagation ();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -133,11 +133,11 @@ Sql.Batch = new Class
|
|||
}
|
||||
}
|
||||
|
||||
,destroy: function ()
|
||||
,_destroy: function ()
|
||||
{
|
||||
for (var id in this.objects)
|
||||
this._unrefObject (this.objects[id]);
|
||||
|
||||
|
||||
this.parent ();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -55,7 +55,7 @@ Sql.List = new Class
|
|||
object.unref ();
|
||||
}
|
||||
|
||||
,destroy: function ()
|
||||
,_destroy: function ()
|
||||
{
|
||||
for (var i = 0; i < this.objects.length; i++)
|
||||
this._unrefObject (this.objects[i]);
|
||||
|
|
|
@ -313,12 +313,12 @@ Vn.Builder = new Class
|
|||
return [];
|
||||
}
|
||||
|
||||
,destroy: function ()
|
||||
,_destroy: function ()
|
||||
{
|
||||
for (var tag in this.tags)
|
||||
{
|
||||
var objects = this.tags[tag];
|
||||
|
||||
|
||||
for (var i = 0; i < objects.length; i++)
|
||||
objects[i].unref ();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* Class to handle the URL.
|
||||
**/
|
||||
Vn.HashListener = new Class
|
||||
({
|
||||
Extends: Vn.Object
|
||||
|
||||
,changed: function ()
|
||||
{
|
||||
this.signalEmit ('changed');
|
||||
}
|
||||
});
|
|
@ -0,0 +1,87 @@
|
|||
|
||||
Vn.HashParam = new Class
|
||||
({
|
||||
Extends: Vn.Object
|
||||
,Tag: 'vn-hash-param'
|
||||
,Parent: 'param'
|
||||
,Properties:
|
||||
{
|
||||
param:
|
||||
{
|
||||
type: Vn.Param
|
||||
,set: function (x)
|
||||
{
|
||||
this.link ({_param: x}, {'changed': this._onParamChange});
|
||||
this._refreshParam ();
|
||||
}
|
||||
,get: function ()
|
||||
{
|
||||
return this._param;
|
||||
}
|
||||
},
|
||||
key:
|
||||
{
|
||||
type: String
|
||||
,set: function (x)
|
||||
{
|
||||
this._key = x;
|
||||
this._onHashChange ();
|
||||
}
|
||||
,get: function ()
|
||||
{
|
||||
return this._key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
,lock: false
|
||||
,value: undefined
|
||||
,_key: null
|
||||
|
||||
,initialize: function (props)
|
||||
{
|
||||
this.parent (props);
|
||||
var listener = Vn.Hash.getListener ();
|
||||
this.link ({_listener: listener}, {'changed': this._onHashChange});
|
||||
this._onHashChange ();
|
||||
}
|
||||
|
||||
,_onHashChange: function ()
|
||||
{
|
||||
if (!this._key || !this._listener)
|
||||
return;
|
||||
|
||||
var newValue = Vn.Hash.get (this._key);
|
||||
|
||||
if (this.value != newValue)
|
||||
{
|
||||
this.value = newValue;
|
||||
this.signalEmit ('changed');
|
||||
this._refreshParam ();
|
||||
}
|
||||
}
|
||||
|
||||
,_refreshParam: function ()
|
||||
{
|
||||
if (this._param && !this.lock)
|
||||
{
|
||||
this.lock = true;
|
||||
this._param.value = this.value;
|
||||
this.lock = false;
|
||||
}
|
||||
}
|
||||
|
||||
,_onParamChange: function ()
|
||||
{
|
||||
if (this.lock)
|
||||
return;
|
||||
|
||||
var map = {};
|
||||
map[this.key] = this._param.value;
|
||||
|
||||
this.lock = true;
|
||||
Vn.Hash.add (map);
|
||||
this.lock = false;
|
||||
}
|
||||
});
|
||||
|
|
@ -55,7 +55,10 @@ Vn.Node =
|
|||
|
||||
,show: function (node)
|
||||
{
|
||||
node.style.display = '';
|
||||
var style = window.getComputedStyle (node);
|
||||
|
||||
if (style.display === 'none')
|
||||
node.style.display = 'initial';
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Addresses": "Direccions"
|
||||
|
||||
,"Return": "Tornar"
|
||||
,"AddAddress": "Afegir adreça"
|
||||
|
||||
,"SetAsDefault": "Establir com per defecte"
|
||||
,"RemoveAddress": "Esborrar direcció"
|
||||
,"EditAddress": "Modificar direcció"
|
||||
,"AreYouSureDeleteAddress": "Estàs segur de que vols eliminar la direcció?"
|
||||
}
|
|
@ -24,6 +24,6 @@
|
|||
,"Disc": "Desc"
|
||||
,"Subtotal": "Subtotal"
|
||||
|
||||
,"OrderItemsUpdated": "La teva comanda porta massa temps obert i ha estat actualitzat, els preus o quantitats dels teus articles poden haver canviat."
|
||||
,"RememberReconfiguringImpact": "Recorda que si tornes a configurar la comanda els preus o quantitats dels teus articles podrien canviar."
|
||||
,"OrderItemsUpdated": "La teva comanda porta massa temps obert i ha estat actualitzat, els preus o quantitats dels teus articles poden haver canviat"
|
||||
,"RememberReconfiguringImpact": "Recorda que si tornes a configurar la comanda els preus o quantitats dels teus articles podrien canviar"
|
||||
}
|
||||
|
|
|
@ -25,4 +25,7 @@
|
|||
|
||||
,"OrderStarted": "Comanda començada"
|
||||
,"OrderUpdated": "Comanda actualitzada"
|
||||
|
||||
,"NoAgeciesAvailableForDate": "No hi ha agències disponibles per a la data i el consignatari seleccionats, modifica la data d'enviament de la comanda"
|
||||
,"NoWarehousesAvailableForDate": "No hi ha magatzems disponibles per a la data seleccionada, modifica la data de recollida de la comanda"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"Checkout": "Finalitzar comanda"
|
||||
|
||||
,"OrderSummary": "Resum de la comanda"
|
||||
,"Arrival": "Arribada"
|
||||
,"%A, %e of %B": "%A, %e de %B"
|
||||
,"Agency": "Agència"
|
||||
,"Warehouse": "Magatzem"
|
||||
|
||||
,"DeliveryAddress": "Adreça d'enviament"
|
||||
|
||||
,"Import": "Import"
|
||||
,"TaxBase": "Base imposable"
|
||||
,"VAT": "IVA"
|
||||
,"Total": "Total"
|
||||
|
||||
,"Cancel": "Cancel"
|
||||
,"Modify": "Modificar"
|
||||
,"Confirm": "Confirmar"
|
||||
|
||||
,"OrderPlacedSuccessfully": "La teva comanda ha estat realitzat amb èxit"
|
||||
,"OrderReserved": "Hem reservat la teva comanda però sembla que hi ha hagut problemes amb el pagament. Contacta amb el teu comercial."
|
||||
,"Accept": "D'acord"
|
||||
,"PayNow": "Pagar ara"
|
||||
}
|
|
@ -24,6 +24,6 @@
|
|||
,"Disc": "Desc"
|
||||
,"Subtotal": "Subtotal"
|
||||
|
||||
,"OrderItemsUpdated": "Tu pedido lleva demasiado tiempo abierto y ha sido actualizado, los precios o cantidades de tus artículos pueden haber cambiado."
|
||||
,"RememberReconfiguringImpact": "Recuerda que si vuelves a configurar el pedido los precios o cantidades de tus artículos podrían cambiar."
|
||||
,"OrderItemsUpdated": "Tu pedido lleva demasiado tiempo abierto y ha sido actualizado, los precios o cantidades de tus artículos pueden haber cambiado"
|
||||
,"RememberReconfiguringImpact": "Recuerda que si vuelves a configurar el pedido los precios o cantidades de tus artículos podrían cambiar"
|
||||
}
|
||||
|
|
|
@ -25,4 +25,7 @@
|
|||
|
||||
,"OrderStarted": "Pedido empezado"
|
||||
,"OrderUpdated": "Pedido actualizado"
|
||||
|
||||
,"NoAgeciesAvailableForDate": "No hay agencias disponibles para la fecha y el consignatario seleccionados, modifica la fecha de envío del pedido"
|
||||
,"NoWarehousesAvailableForDate": "No hay almacenes disponibles para la fecha seleccionada, modifica la fecha de recogida del pedido"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Addresses": "Adresses"
|
||||
|
||||
,"Return": "Retour"
|
||||
,"AddAddress": "Ajouter une adresse"
|
||||
|
||||
,"SetAsDefault": "Définir par défaut"
|
||||
,"RemoveAddress": "Supprimer l'adresse"
|
||||
,"EditAddress": "Changement d'adresse"
|
||||
,"AreYouSureDeleteAddress": "Êtes-vous sûr de vouloir supprimer l'adresse?"
|
||||
}
|
|
@ -24,6 +24,6 @@
|
|||
,"Disc": "Desc"
|
||||
,"Subtotal": "Sous-total"
|
||||
|
||||
,"OrderItemsUpdated": "Ouvrez votre commande prend trop de temps et a été mis à jour, les prix ou les quantités de vos articles peuvent avoir changé."
|
||||
,"RememberReconfiguringImpact": "Rappelez-vous que si jamais vous commandez des prix fixés ou les quantités de vos articles pourraient changer."
|
||||
,"OrderItemsUpdated": "Ouvrez votre commande prend trop de temps et a été mis à jour, les prix ou les quantités de vos articles peuvent avoir changé"
|
||||
,"RememberReconfiguringImpact": "Rappelez-vous que si jamais vous commandez des prix fixés ou les quantités de vos articles pourraient changer"
|
||||
}
|
||||
|
|
|
@ -25,4 +25,7 @@
|
|||
|
||||
,"OrderStarted": "Ordre a commencé"
|
||||
,"OrderUpdated": "Mise à jour Ordre"
|
||||
|
||||
,"NoAgeciesAvailableForDate": "Aucun agences disponibles pour la date et le destinataire sélectionné, changer la date d'envoi de l'ordre"
|
||||
,"NoWarehousesAvailableForDate": "Pas de magasins disponibles à la date sélectionnée, changer la date de la collecte de l'ordre"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"Checkout": "Terminer la commande"
|
||||
|
||||
,"OrderSummary": "Résumé de la commande"
|
||||
,"Arrival": "Arrivée"
|
||||
,"%A, %e of %B": "%A %e %B"
|
||||
,"Agency": "Agence"
|
||||
,"Warehouse": "Entrepôt"
|
||||
|
||||
,"DeliveryAddress": "Adresse de livraison"
|
||||
|
||||
,"Import": "Montant"
|
||||
,"TaxBase": "Imposable"
|
||||
,"VAT": "TVA"
|
||||
,"Total": "Total"
|
||||
|
||||
,"Cancel": "Annuler"
|
||||
,"Modify": "Modifier"
|
||||
,"Confirm": "Confirmer"
|
||||
|
||||
,"OrderPlacedSuccessfully": "Votre commande a été complété avec succès"
|
||||
,"OrderReserved": "Nous avons réservé votre commande, mais il semble qu'il ya eu des problèmes avec le paiement Contactez vos ventes."
|
||||
,"Accept": "OK"
|
||||
,"PayNow": "Payer maintenant"
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"AddEditAddress": "Añadir o modificar dirección"
|
||||
|
||||
,"Name": "Consignatario"
|
||||
,"Address": "Dirección"
|
||||
,"City": "Ciudad"
|
||||
,"ZipCode": "Código postal"
|
||||
,"Country": "País"
|
||||
,"Province": "Provincia"
|
||||
|
||||
,"Return": "Volver"
|
||||
,"Accept": "Aceptar"
|
||||
|
||||
,"AddressChangedSuccessfully": "Dirección modificada correctamente"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"Configuration": "Configuración"
|
||||
|
||||
,"UserNumber": "Nº usuario"
|
||||
,"UserName": "Nombre de usuario"
|
||||
,"Password": "Contraseña"
|
||||
,"Email": "Correo electrónico"
|
||||
,"Billing": "Facturación"
|
||||
,"ReceiveInvoicesByEmail": "Recibir facturas por correo electrónico"
|
||||
|
||||
,"NewPassword": "Nueva contraseña"
|
||||
,"RepeatPassword": "Repetir contraseña"
|
||||
|
||||
,"MustReloginIfChange": "Para cambiar tu nombre de usuario deberás volver a iniciar sesión"
|
||||
,"PasswordsChanged": "¡Contraseña modificada!"
|
||||
,"PasswordsDoesntMatch": "¡Las contraseñas no coinciden!"
|
||||
|
||||
,"Addresses": "Direcciones"
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"AccessLog": "Registro de accesos"
|
||||
|
||||
,"UserNumber:": "Nº usuario:"
|
||||
,"User:": "Usuario:"
|
||||
,"Phone:": "Teléfono:"
|
||||
,"Mobile:": "Móvil:"
|
||||
|
||||
,"Access": "Acceso"
|
||||
,"OS": "SO"
|
||||
,"Browser": "Navegador"
|
||||
,"Version": "Versión"
|
||||
,"Javascript": "Javascript"
|
||||
,"Cookies": "Cookies"
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"ControlPanel": "Panel de control"
|
||||
|
||||
,"Module": "Módulo"
|
||||
,"Description": "Descripción"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"Photos": "Fotos"
|
||||
|
||||
,"Schema": "Esquema"
|
||||
,"ImageName": "Nombre de la imagen"
|
||||
,"Id": "Id"
|
||||
,"ImageFile": "Archivo de imagen"
|
||||
|
||||
,"Upload": "Enviar"
|
||||
|
||||
,"ImageUploaded": "Imagen subida correctamente"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"UserManagement": "Gestión de usuarios"
|
||||
|
||||
,"UserName:": "Nombre de usuario:"
|
||||
|
||||
,"UserNumber": "Nº usuario"
|
||||
,"UserName": "Nombre de usuario"
|
||||
,"Alias": "Alias"
|
||||
|
||||
,"AccessAsUser": "Suplantar usuario"
|
||||
,"AccessLog": "Registro de accesos"
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"Visits": "Visitas"
|
||||
,"VisitsManagement": "Gestión de visitas"
|
||||
|
||||
,"ActiveSessions": "Usuarios conectados"
|
||||
,"VisitsQuery": "Consulta de visitas"
|
||||
,"Refresh": "Actualizar"
|
||||
|
||||
,"ActiveSessions:": "Usuarios conectados:"
|
||||
,"NewVisitsTotal:": "Nuevas visitas:"
|
||||
|
||||
,"SessionNumber": "Nº sesión"
|
||||
,"User": "Usuario"
|
||||
,"Login": "Hora de acceso"
|
||||
,"LastActivity": "Última actividad"
|
||||
,"SO": "Sistema Operativo"
|
||||
,"Version": "Versión"
|
||||
,"NewVisit": "Nueva visita"
|
||||
|
||||
,"SelectDateInterval": "Selecciona un intérvalo de fechas"
|
||||
,"FromDate:": "Desde el día:"
|
||||
,"ToDate:": "Hasta el día:"
|
||||
,"VisitsTotal:": "Total visitas:"
|
||||
|
||||
,"Browser": "Navegador"
|
||||
,"MinVersion": "Versión mínima"
|
||||
,"MaxVersion": "Versión máxima"
|
||||
,"LastVisit": "Última visita"
|
||||
,"NewVisits": "Nuevas visitas"
|
||||
,"%a, %e %b %Y at %T": "%a, %e %b %Y a las %T"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"ListByAgency": "Bultos por agencia"
|
||||
|
||||
,"ShowByProvince": "Mostrar desglose por provincia"
|
||||
,"Agency": "Agencia"
|
||||
,"Exps": "Exps."
|
||||
,"Bundles": "Bultos"
|
||||
,"Prevision": "Prev."
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"ByProvince": "Desglose por provincia"
|
||||
|
||||
,"Return": "Volver"
|
||||
|
||||
,"SelectAgency": "Selecciona una agencia"
|
||||
,"Province": "Provincia"
|
||||
,"Expeditions": "Exps."
|
||||
,"Left": "Faltan"
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
{
|
||||
"QualityAndVariety": "Calidad, variedad y servicio"
|
||||
|
||||
,"MaximumFreshness": "Verdnatura te ofrece un producto con la máxima frescura garantizada, gracias a sus recepciones diarias de flor y planta procedentes de Holanda, Sudamérica, o desde el mismo productor."
|
||||
,"SquareMeters": "Más de 13.000m de instalaciones"
|
||||
,"AboutRealms": "Con flor cortada, verdes, artificial y complementos"
|
||||
,"AboutLocation": "Asentados en Valencia, Madrid, Barcelona, Holanda y Francia, ofrecemos venta directa en nuestras instalaciones y reparto a toda España mediante servicio propio o agencia."
|
||||
,"PurchaseThroughWeb": "Compra a través de nuestra web y recibe tu pedido cómodamente en tu floristería. ¡En menos de 24 horas!"
|
||||
|
||||
,"WhatMakeUsDifferent": "¿Que nos hace diferentes?"
|
||||
|
||||
,"DesignVariety": "La variedad en el diseño, la calidad de los materiales utilizados y nuestro servicio de reparto, te garantizan un muestrario de género dinámico, siempre fresco y atractivo."
|
||||
,"AdaptToYourNeeds": "Verdnatura se adapta a las necesidades de cada cliente ofreciéndote un amplio abanico de productos, garantizado siempre."
|
||||
,"TheBestQuality": "La mejor calidad al mejor precio. Sin olvidar nunca el diseño."
|
||||
|
||||
,"AtYourService": "Estamos a tu servicio"
|
||||
|
||||
,"BuyersAndTraders": "9 compradores especializados y nuestros 20 comerciales te asesorarán en todo lo que necesites."
|
||||
|
||||
,"Training": "Verdnatura formación"
|
||||
|
||||
,"GoodTraining": "En Verdnatura sabemos que una buena formación es imprescindible para el desarrollo óptimo de cualquier actividad, y cómo no, también la de florista."
|
||||
,"SpecialTrainingPrices": "Para que el presupuesto de una escuela no repercuta en la calidad de tu formación, colaboramos con una política de precios especiales para todas aquellas escuelas que lo soliciten realizar cursos en nuestras instalaciones de Verdnatura Silla."
|
||||
,"YoutubeChannel": "Y no te pierdas los vídeos de Canal Verdnatura en Youtube. Donde encontrarás un montón de consejos muy interesantes sobre el manejo de la flor."
|
||||
|
||||
,"HowWeWork": "¿Cómo trabajamos?"
|
||||
|
||||
,"FirstQualityControl": "1º control de calidad"
|
||||
,"SecondQualityControl": "2º control de calidad"
|
||||
,"ThirdQualityControl": "3º control de calidad"
|
||||
,"FourthQualityControl": "4º control de calidad"
|
||||
|
||||
,"AalsmeerAuction": "A las 5:00h, nuestros responsables de compras adquieren, en la subasta de Aalsmeer y Noaldwijk, el género que el productor ha cosechado el día anterior."
|
||||
,"BeforeAuction": "Tras su compra, este género entra rápidamente en Verdnatura Holland BV, nuestra empresa de Flora Holland, en Aalsmeer."
|
||||
,"DirectlyFromProviders": "Además de comprar a través de la subasta Holandesa, también compramos directamente a productores de Colombia, Ecuador, Thailandia, Malasia, África y Australia. Estos productos son supervisados directamente por nuestros delegados de compra ubicados en cada zona. Esta mercancía viajará a Amsterdam, sometida a un proceso de Vaacum y en menos de dos horas desde su aterrizaje, estará en nuestras instalaciones de Aalsmeer."
|
||||
,"GoodsDischarge": "A las 7:00h nuestros compañeros de Aalsmeer empiezan a recibir la mercancía comprada, pasando un primer control de calidad, y dándola de alta en nuestro stock. Ya está disponible para nuestros clientes en la web."
|
||||
,"GoodsTravel": "La mercancía viaja durante día y medio en camiones con compartimentos estancos a temperaturas diferentes, de manera que no se rompa la cadena de frío y viaje en las mejores condiciones."
|
||||
,"GoodsReception": "A la recepción de la mercancía el responsable de su compra revisa el estado en el que llega, aceptándola o rechazándola según el caso, se descarga en frío y rápidamente entra en nuestra cámara."
|
||||
,"CustomerOrders": "Nuestros clientes pueden hacer sus pedidos a través de la web, por teléfono o viniendo directamente a nuestras instalaciones. Tenemos un equipo de comerciales especializados que te asesorará en tu compra y que te informará de las novedades y artículos que puedan ser de tu interés, de forma que tu compra se ajuste a tus necesidades y quedes totalmente satisfecho."
|
||||
,"AfterOrder": "Una vez realizado el pedido, pasa al departamento de producción. Durante la preparación de este se realiza un nuevo control de calidad (el tercero) en el que se desechará la mercancía deficiente."
|
||||
,"BuyerControl": "En cuanto se finaliza la preparación, se realiza un nuevo control (el cuarto) donde un especialista cuenta y revisa el estado de los productos. En caso de que estos no cumplan con los estándares de calidad exigidos los rechaza y los sustituye por los adecuados."
|
||||
,"EmbeddedSection": "Seguidamente se lleva a la sección de encajado, donde el pedido es acondicionado para su correcta entrega. Cada tipo de entrega requiere un método de encajado adecuado para que el género viaje protegido y llegue al cliente en perfectas condiciones."
|
||||
,"AfterEmbedAgency": "En cuanto el producto ha sido encajado se almacena de nuevo en la cámara hasta su salida por agencia o por reparto propio, recibiéndolo el cliente, en 24h en el caso de la agencia o el mismo día en el caso del reparto, cómodamente en su domicilio."
|
||||
,"FreshnessGuaranteed": "Esta forma de trabajo garantiza la mayor frescura por la rapidez los procesos y por el mantenimiento de la cadena de frío desde compra hasta su recepción por nuestro cliente."
|
||||
|
||||
,"AboutSummary": "75 personas repartidas por casi todo el mundo para que nuestro cliente tenga el más amplio catálogo del sector, la flor más fresca, la planta más novedosa, los complementos más actuales, y el servicio más rápido posible."
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"IWantCustomer": "¡Quiero ser cliente!"
|
||||
|
||||
,"FillFormData": "Rellena el formulario con tus datos y en breve nos pondremos en contacto contigo."
|
||||
,"OrCallUs": "O si lo prefieres llámanos al 963 242 100."
|
||||
,"AllFieldsMandatory": "* Todos los campos son obligatorios."
|
||||
|
||||
,"Name": "Nombre"
|
||||
,"Surname": "Apellidos"
|
||||
,"EMail": "Correo electrónico"
|
||||
,"Message": "Mensaje"
|
||||
,"Address": "Dirección"
|
||||
,"PC": "Código postal"
|
||||
,"City": "Ciudad"
|
||||
,"Phone": "Teléfono"
|
||||
,"Send": "Enviar datos"
|
||||
|
||||
,"DataSentSuccess": "Tus datos han sido enviados correctamente. En breve nos pondremos en contacto contigo."
|
||||
,"ErrorSendingData": "Error al enviar los datos. Por favor, comprueba que has rellenado todos los campos y que has introducido el código anti-spam correctamente."
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"Sent": "Enviado"
|
||||
,"Author": "Autor"
|
||||
,"votes": "votos"
|
||||
,"NoAnswerSelected": "No has seleccionado ninguna respuesta"
|
||||
,"ThanksForVote": "¡Gracias por tu voto!"
|
||||
,"Vote": "Votar"
|
||||
,"Total": "Total"
|
||||
,"BrownserRecommend":
|
||||
"Verdnatura recomienda utilizar el navegador web Mozilla Firefox para obtener toda la funcionalidad de nuestra página web."
|
||||
,"PressHere": "Pulsa aquí para descargar Firefox"
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"ShowMap": "Mostrar mapa"
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
{}
|
|
@ -1,25 +0,0 @@
|
|||
{
|
||||
"AboutCompany": "¿Por qué Verdnatura?"
|
||||
,"StorePhoto": "Foto almacén"
|
||||
|
||||
,"BecauseOurBigCatalog": "Porque tenemos el catálogo más grande del sector, renovado diariamente."
|
||||
,"BecauseThisWeb": "Por esta página web, con stock en tiempo real siempre a tu disposición."
|
||||
,"BecauseOurShoppingDep": "Por nuestro departamento de compras con 9 compradores especializados."
|
||||
,"BecauseOrderIsEasy": "Porque es muy fácil hacer tu pedido por web, por teléfono o viniendo."
|
||||
,"BecauseOurPlant": "Por nuestras instalaciones, ven y visítanos. Te encantarán."
|
||||
,"BecauseOurSalesDep": "Por nuestro departamento comercial, con profesionales que siempre encontrarán una solución a tus necesidades."
|
||||
,"BecauseOurWorkShop": "Porque tenemos un taller de confección para ayudarte."
|
||||
,"BecauseWeHaveWhatYouNeed": "Porque tenemos lo que necesitas cuando lo necesitas..."
|
||||
|
||||
,"AboutDesc":
|
||||
"Somos una empresa dedicada a la venta mayorista y distribución de una amplia gama de complementos, verdes y flores naturales a floristerías u otros mayoristas."
|
||||
|
||||
,"AboutService":
|
||||
"Disponemos de servicio de reparto a domicilio con nuestros vehículos por toda la provincia de Valencia y áreas limitadas de Castellón, Alicante, Murcia, Albacete y Madrid enviamos al resto de la península mediante agencias de transporte con servicio 24/48 horas (Zeleris, Viaexpress). También realizamos venta directa a floristas en cualquiera de nuestras instalaciones."
|
||||
|
||||
,"AboutDisp":
|
||||
"Nuestra empresa dispone de más de 50 trabajadores y varias sucursales. La principal se encuentra situada en Valencia y cuenta con más de 8000 m2. También disponemos de un almacén situado en Mercaflor - Mercavalencia (Valencia) en el que únicamente realizamos venta directa."
|
||||
|
||||
,"AboutOrder":
|
||||
"Puedes realizar tus pedidos y reservas por teléfono llamando al 96 324 21 00, por Internet a través de nuestra página web o bien directamente en nuestras instalaciones."
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
"ShoppingBasket": "Cesta de la compra"
|
||||
|
||||
,"Delete": "Borrar pedido"
|
||||
,"GoToCatalog": "Ir al catálogo"
|
||||
,"ConfigureOrder": "Configurar pedido"
|
||||
,"Checkout": "Finalizar pedido"
|
||||
|
||||
,"OrderNumber": "Nº pedido"
|
||||
,"DateExit": "Fecha de salida"
|
||||
,"Warehouse": "Almacén"
|
||||
,"OrderTotal": "Total"
|
||||
|
||||
,"Amount": "Cantidad"
|
||||
,"Pack": "Pack"
|
||||
,"Stems": "Tallos"
|
||||
,"Avail": "Disp"
|
||||
,"Item": "Artículo"
|
||||
,"Cat": "Cat"
|
||||
,"S1": "Med"
|
||||
,"Color": "Color"
|
||||
,"Origin": "Origen"
|
||||
,"Price": "Precio"
|
||||
,"Disc": "Desc"
|
||||
,"Subtotal": "Subtotal"
|
||||
|
||||
,"OrderItemsUpdated": "Tu pedido lleva demasiado tiempo abierto y ha sido actualizado, los precios o cantidades de tus artículos pueden haber cambiado."
|
||||
,"RememberReconfiguringImpact": "Recuerda que si vuelves a configurar el pedido los precios o cantidades de tus artículos podrían cambiar."
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"Catalog": "Catálogo"
|
||||
,"SearchResults": "Resultados de búsqueda"
|
||||
|
||||
,"SelectFamily": "Selecciona una familia"
|
||||
,"SelectSubtype": "Selecciona un subtipo en el menú de la derecha"
|
||||
,"ArticleNotFound": "Artículo no encontrado"
|
||||
,"ArticleNotAvailable": "Artículo no disponible"
|
||||
,"NoMoreAmountAvailable": "No hay más cantidad disponible"
|
||||
|
||||
,"StartOrder": "Empezar pedido"
|
||||
,"ShoppingBasket": "Cesta de la compra"
|
||||
|
||||
,"Realm": "Familia"
|
||||
,"Subtype": "Subtipo"
|
||||
,"Date:": "Fecha:"
|
||||
,"Warehouse:": "Almacén:"
|
||||
,"Search:": "Buscar:"
|
||||
,"GeneralSearch": "Búsqueda general"
|
||||
|
||||
,"Amount": "Cant"
|
||||
,"Aval": "Disp"
|
||||
,"Name": "Nombre"
|
||||
,"S1": "Med"
|
||||
,"S2": "S2"
|
||||
,"Stems": "Tallos"
|
||||
,"Cat": "Cat"
|
||||
,"Pack": "Pack"
|
||||
,"Origin": "Origen"
|
||||
,"Price": "Precio"
|
||||
|
||||
,"from %.2d€": "desde %.2d€"
|
||||
,"AddToBasket": "Añadir artículo"
|
||||
,"Add": "Añadir"
|
||||
,"Erase": "Borrar"
|
||||
,"Confirm": "Confirmar"
|
||||
|
||||
,"IndicativePhotos": "* Las fotos son orientativas"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"ConfigureOrder": "Configurar pedido"
|
||||
|
||||
,"Cancel": "Cancelar"
|
||||
,"Next": "Siguiente"
|
||||
|
||||
,"DeliveryOrPickupQuestion": "¿Quieres recibir o recoger el pedido?"
|
||||
,"ReceiveThroughtAgency": "Recibir por agencia"
|
||||
,"ReceiveThroughtRoute": "Reparto Verdnatura"
|
||||
,"PickupInStore": "Recoger en almacén"
|
||||
|
||||
,"OrderDateDeliveryQuestion": "¿Qué día quieres recibir el pedido?"
|
||||
,"OrderDatePickupQuestion": "¿Qué día quieres recoger el pedido?"
|
||||
,"AddressQuestion": "¿Dónde quieres recibir el pedido?"
|
||||
,"AgencyQuestion": "¿Por qué agencia quieres recibir el pedido?"
|
||||
,"PickupWarehouseQuestion": "¿En qué almacén quieres recoger el pedido?"
|
||||
|
||||
,"ConfirmToAccessCatalog": "Confirma los datos para acceder al catálogo"
|
||||
,"Arrival": "Llegada"
|
||||
,"Pickup": "Recogida"
|
||||
,"%A, %e of %B": "%A, %e de %B"
|
||||
,"Agency": "Agencia"
|
||||
,"Warehouse": "Almacén"
|
||||
,"Confirm": "Confirmar"
|
||||
|
||||
,"OrderStarted": "Pedido empezado"
|
||||
,"OrderUpdated": "Pedido actualizado"
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
"OpenOrders": "Pedidos abiertos"
|
||||
|
||||
,"StartOrder": "Empezar pedido"
|
||||
,"ContinueOrder": "Continuar pedido"
|
||||
,"OrderNumber": "Nº pedido"
|
||||
,"DateMake": "Fecha de creación"
|
||||
,"DateExit": "Fecha de salida"
|
||||
,"SendMethod": "Forma de envío"
|
||||
|
||||
,"LastOrders": "Últimos pedidos"
|
||||
|
||||
,"PendingBalance:": "Saldo pendiente:"
|
||||
,"PaymentInfo": "Para realizar una entrega a cuenta pulsa en el botón de la derecha y haz el pago en la empresa correspondiente. La cantidad que aparece es el saldo pendiente a día de hoy, no tiene en cuenta pedidos del futuro. Puedes realizar una entrega a cuenta de la cantidad que desees."
|
||||
,"MakePayment": "Realizar pago"
|
||||
,"Company": "Empresa"
|
||||
,"Pending": "Pendiente"
|
||||
,"Pay": "Pagar"
|
||||
,"Basket": "Cesta"
|
||||
,"ShoppingBasket": "Cesta de la compra"
|
||||
|
||||
,"SeeOrder": "Mostrar detalle del pedido"
|
||||
,"TicketNumber": "Nº ticket"
|
||||
,"SentAddress": "Dirección de envío"
|
||||
,"Consignee": "Consignatario"
|
||||
,"Boxes": "Bultos"
|
||||
,"TotalWithVAT": "Total con IVA"
|
||||
,"Pending": "Pendiente"
|
||||
,"PayOrder": "Pagar pedido"
|
||||
|
||||
,"AmountToPay:": "Cantidad a pagar (€):"
|
||||
,"AmountError": "La cantidad debe ser un número positivo e inferior o igual al importe pendiente"
|
||||
,"PayError": "Error al realizar el pago"
|
||||
|
||||
,"%A, %e of %B": "%A, %e de %B"
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
{
|
||||
"OrderDetail": "Detalle del pedido"
|
||||
|
||||
,"Print": "Imprimir albarán"
|
||||
|
||||
,"TicketNumber:": "Nº ticket:"
|
||||
,"DateExit:": "Fecha de envío:"
|
||||
,"SendMethod:": "Forma de envío:"
|
||||
,"Notes:": "Notas:"
|
||||
,"TicketTotal:": "Total pedido:"
|
||||
,"(VATIncluded)": "(IVA incluído)"
|
||||
|
||||
,"PC": "Código postal"
|
||||
,"City": "Ciudad"
|
||||
,"Province": "Provincia"
|
||||
,"Address": "Domicilio"
|
||||
,"Consignee": "Consignatario"
|
||||
|
||||
,"ItemNumber": "Nº artículo"
|
||||
,"Amount": "Cant"
|
||||
,"Item": "Artículo"
|
||||
,"Category": "Categoría"
|
||||
,"S1": "Med"
|
||||
,"Stems": "Tallos"
|
||||
,"Color": "Color"
|
||||
,"Origin": "Origen"
|
||||
,"Price": "Precio"
|
||||
,"Disc": "Desc"
|
||||
,"Subtotal": "Subtotal"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"AddEditNew": "Añadir o editar noticia"
|
||||
|
||||
,"Title": "Título"
|
||||
,"NewBody": "Cuerpo"
|
||||
,"Tag": "Etiqueta"
|
||||
|
||||
,"Return": "Volver"
|
||||
,"Accept": "Aceptar"
|
||||
|
||||
,"NewChangedSuccessfully": "Noticia modificada correctamente"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"NewsManagement": "Gestión de noticias"
|
||||
|
||||
,"AddNew": "Añadir noticia"
|
||||
,"EditNew": "Editar noticia"
|
||||
|
||||
,"NewNum": "Nº noticia"
|
||||
,"Date": "Fecha"
|
||||
,"Author": "Autor"
|
||||
,"Title": "Título"
|
||||
,"Priority": "Prioridad"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
Vn.Locale.add
|
||||
({
|
||||
"ConnError": "Error en la conexión"
|
||||
,"InternalError": "Se ha producido un error interno"
|
||||
,"BadServerReply": "Respuesta del servidor incorrecta"
|
||||
,"ModelNotUpdatable": "Este modelo no es actualizable"
|
||||
,"RowNotExists": "El registro no existe o a sido borrado"
|
||||
,"ColNotExists": "La columna no existe"
|
||||
});
|
|
@ -1,28 +0,0 @@
|
|||
Vn.Locale.add
|
||||
({
|
||||
"True": "Si"
|
||||
,"False": "No"
|
||||
,"Null": "Nulo"
|
||||
,"ChangeDate": "Cambiar Fecha"
|
||||
,"Sort": "Ordenar"
|
||||
,"At": "a las"
|
||||
,"Of": "de"
|
||||
,"OfThe": "del"
|
||||
,"Remove": "Borrar"
|
||||
,"Loading": "Cargando"
|
||||
,"Loading...": "Cargando..."
|
||||
,"ReallyDelete": "¿Estás seguro de que quieres borrar la línea?"
|
||||
,"EmptyList": "Lista vacía"
|
||||
,"NoData": "Sin datos"
|
||||
,"ErrorLoadingData": "Error"
|
||||
,"Error": "Error"
|
||||
,"Image": "Imagen"
|
||||
,"File": "Archivo"
|
||||
,"FileName": "Nombre"
|
||||
,"UpdateImage": "Añadir o actualizar imagen"
|
||||
,"UploadFile": "Subir archivo"
|
||||
,"ImageAdded": "Imagen añadida correctamente"
|
||||
,"Close": "Cerrar"
|
||||
,"Previous": "Anterior"
|
||||
,"Next": "Siguiente"
|
||||
});
|
|
@ -1,81 +0,0 @@
|
|||
Vn.Locale.add
|
||||
({
|
||||
"Sunday": "Domingo"
|
||||
,"Monday": "Lunes"
|
||||
,"Tuesday": "Martes"
|
||||
,"Wednesday": "Miercoles"
|
||||
,"Thursday": "Jueves"
|
||||
,"Friday": "Viernes"
|
||||
,"Saturday": "Sábado"
|
||||
|
||||
,"Su": "Do"
|
||||
,"Mo": "Lu"
|
||||
,"Tu": "Ma"
|
||||
,"We": "Mi"
|
||||
,"Th": "Ju"
|
||||
,"Fr": "Vi"
|
||||
,"Sa": "Sa"
|
||||
|
||||
,"January": "Enero"
|
||||
,"February": "Febrero"
|
||||
,"March": "Marzo"
|
||||
,"April": "Abril"
|
||||
,"May": "Mayo"
|
||||
,"June": "Junio"
|
||||
,"July": "Julio"
|
||||
,"August": "Agosto"
|
||||
,"September": "Septiembre"
|
||||
,"October": "Octubre"
|
||||
,"November": "Noviembre"
|
||||
,"December": "Diciembre"
|
||||
|
||||
,"Jan": "Ene"
|
||||
,"Feb": "Feb"
|
||||
,"Mar": "Mar"
|
||||
,"Apr": "Abr"
|
||||
,"May": "May"
|
||||
,"Jun": "Jun"
|
||||
,"Jul": "Jul"
|
||||
,"Ago": "Ago"
|
||||
,"Sep": "Sep"
|
||||
,"Oct": "Oct"
|
||||
,"Nov": "Nov"
|
||||
,"Dec": "Dic"
|
||||
|
||||
,"AppName": "Verdnatura"
|
||||
,"Beta": "Beta"
|
||||
,"User": "Usuario"
|
||||
,"Password": "Contraseña"
|
||||
,"Remember": "Recordar"
|
||||
,"Enter": "Entrar"
|
||||
,"Exit": "Salir"
|
||||
,"Menu": "Menú"
|
||||
,"ErrorLoadingForm": "Error al cargar formulario"
|
||||
,"YoureVisitor": "¿Solo estás de visita?"
|
||||
,"NewVersionAvailable": "Hay una nueva actualización, la página se recargargará automaticamente para descargarla"
|
||||
,"ChangeLog": "Cambios recientes"
|
||||
,"CookiesNotification": "Al utilizar este sitio web aceptas el uso de cookies para la personalización de contenidos y análisis."
|
||||
,"ReturnToOldWebsite": "Web antigua"
|
||||
,"TestTheNewWebsite": "¡Prueba la nueva web!"
|
||||
|
||||
,"Home": "Inicio"
|
||||
,"Orders": "Pedidos"
|
||||
,"Catalog": "Catálogo"
|
||||
,"Training": "Formación"
|
||||
,"Configuration": "Configuración"
|
||||
,"Account": "Cuenta"
|
||||
,"Adresses": "Direcciones"
|
||||
,"About": "Conócenos"
|
||||
,"Why": "¿Por qué?"
|
||||
,"Location": "Localización"
|
||||
,"Administration": "Administración"
|
||||
,"Users": "Usuarios"
|
||||
,"Visits": "Visitas"
|
||||
,"Photos": "Fotos"
|
||||
,"Agencies": "Agencias"
|
||||
,"News": "Noticias"
|
||||
,"Contact": "Quiero ser cliente"
|
||||
|
||||
,"SessionExpired": "Has estado demasiado tiempo inactivo y la sesión ha expirado."
|
||||
,"InvalidLogin": "Usuario o contraseña incorrectos. Recuerda que se hace distinción entre mayúsculas y minúsculas."
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"User": "Usuario"
|
||||
,"Password": "Contraseña"
|
||||
,"NotCloseSession": "No cerrar sesión"
|
||||
,"IWantToKnowMore": "¡Quiero saber más!"
|
||||
,"Enter": "Entrar"
|
||||
,"LoginMail": "clientes@verdnatura.es"
|
||||
,"LoginPhone": "+34 963 242 100"
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"PaymentComplete": "Pago terminado, ya puedes volver a nuestra página web."
|
||||
,"ReturnToWeb": "Volver a Verdnatura"
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"UpdateYourBrowser": "Actualiza tu navegador"
|
||||
,"ContinueAnyway": "Continuar de todos modos"
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"Welcome": "Bienvenido/a"
|
||||
,"Exit": "Salir"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"InvalidAction": "Acción inválida"
|
||||
|
||||
,"EmptyQuery": "Consulta vacia"
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
@ -30,7 +29,7 @@
|
|||
<div id="content">
|
||||
<div id="menu-box">
|
||||
<div id="menu-overflow">
|
||||
<a id="test-link" href="//test-www.verdnatura.es"></a>
|
||||
<a id="test-link" href="#"></a>
|
||||
<ul id="menu"></ul>
|
||||
</div>
|
||||
<div id="links">
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
|
||||
Vn.Module = new Class
|
||||
({
|
||||
initialize: function (gui, formInfo)
|
||||
Extends: Vn.Object
|
||||
|
||||
,initialize: function (gui, formInfo)
|
||||
{
|
||||
this.gui = gui;
|
||||
this.conn = gui.conn;
|
||||
|
@ -17,7 +19,10 @@ Vn.Module = new Class
|
|||
**/
|
||||
,$: function (objectId)
|
||||
{
|
||||
return this.builder.get (objectId);
|
||||
if (this.builder)
|
||||
return this.builder.get (objectId);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,6 +30,8 @@ Vn.Module = new Class
|
|||
**/
|
||||
,open: function ()
|
||||
{
|
||||
this.close ();
|
||||
|
||||
this.builder = new Vn.Builder ();
|
||||
this.builder.signalData = this;
|
||||
this.builder.loadXml (Vn.getXml ('forms/'+ this.formInfo.path +'/ui.xml'));
|
||||
|
@ -56,8 +63,18 @@ Vn.Module = new Class
|
|||
if (this.node)
|
||||
{
|
||||
Vn.Node.remove (this.node);
|
||||
this.builder.unref ();
|
||||
this.node = null;
|
||||
}
|
||||
if (this.builder)
|
||||
{
|
||||
this.builder.unref ();
|
||||
this.builder = null;
|
||||
}
|
||||
}
|
||||
|
||||
,_destroy: function ()
|
||||
{
|
||||
this.close ();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ Vn.Tpv =
|
|||
this._onTransactionStart.bind (this), batch);
|
||||
}
|
||||
else if (!isNaN (amount))
|
||||
(new Htk.Toast ()).showError (_('AmountError'));
|
||||
Htk.Toast.showError (_('AmountError'));
|
||||
}
|
||||
|
||||
,_onTransactionStart: function (resultSet)
|
||||
|
@ -77,7 +77,7 @@ Vn.Tpv =
|
|||
form.submit ();
|
||||
}
|
||||
else
|
||||
(new Htk.Toast ()).showWarning (_('PayError'));
|
||||
Htk.Toast.showWarning (_('PayError'));
|
||||
}
|
||||
|
||||
,_makeUrl: function (status, order)
|
||||
|
@ -87,6 +87,7 @@ Vn.Tpv =
|
|||
path += location.pathname;
|
||||
path += location.search ? location.search : '';
|
||||
path += Vn.Hash.make ({
|
||||
'form': 'ecomerce/orders',
|
||||
'tpv_status': status,
|
||||
'tpv_order': order
|
||||
}, true);
|
||||
|
@ -113,7 +114,7 @@ Vn.BasketChecker =
|
|||
var isOk = status == 'UPDATED' || status == 'OK';
|
||||
|
||||
if (status == 'UPDATED')
|
||||
(new Htk.Toast ()).showWarning (_('OrderItemsUpdated'));
|
||||
Htk.Toast.showWarning (_('OrderItemsUpdated'));
|
||||
if (callback)
|
||||
callback (isOk);
|
||||
if (!isOk)
|
||||
|
|
|
@ -44,7 +44,7 @@ Vn.Web =
|
|||
if (!Vn.Cookie.check ('hedera_cookies'))
|
||||
{
|
||||
Vn.Cookie.set ('hedera_cookies', true);
|
||||
(new Htk.Toast ()).showWarning (_('CookiesNotification'));
|
||||
Htk.Toast.showWarning (_('CookiesNotification'));
|
||||
}
|
||||
|
||||
this.conn = new Db.Conn ();
|
||||
|
@ -168,11 +168,12 @@ Vn.Web =
|
|||
case 'Version':
|
||||
this.newVersion (error);
|
||||
break;
|
||||
case 'Conn':
|
||||
(new Htk.Toast ()).showError (error.message);
|
||||
case 'User':
|
||||
Htk.Toast.showError (error.message);
|
||||
break;
|
||||
default:
|
||||
console.warn (error.message);
|
||||
Htk.Toast.showError (_('InternalError'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,8 +209,6 @@ Vn.Web =
|
|||
if (this.skipVersion)
|
||||
return;
|
||||
|
||||
this.skipVersion = true;
|
||||
|
||||
var reload;
|
||||
var message = _('NewVersionAvailable') +"\n\n"+ error.message;
|
||||
|
||||
|
@ -219,7 +218,10 @@ Vn.Web =
|
|||
reload = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
reload = confirm (message);
|
||||
this.skipVersion = true;
|
||||
}
|
||||
|
||||
if (reload)
|
||||
{
|
||||
|
@ -318,6 +320,7 @@ Vn.Web =
|
|||
if (this.activeForm)
|
||||
{
|
||||
this.activeForm.close ();
|
||||
this.activeForm.unref ();
|
||||
this.activeForm = null;
|
||||
}
|
||||
|
||||
|
@ -427,7 +430,7 @@ Vn.Web =
|
|||
}
|
||||
}
|
||||
else
|
||||
(new Htk.Toast ()).showError (_('ErrorLoadingForm'));
|
||||
Htk.Toast.showError (_('ErrorLoadingForm'));
|
||||
|
||||
var callbacks = formInfo.callbacks;
|
||||
formInfo.callbacks = [];
|
||||
|
@ -440,7 +443,7 @@ Vn.Web =
|
|||
|
||||
,unload: function ()
|
||||
{
|
||||
this.hashParam.destroy ();
|
||||
this.hashParam.unref ();
|
||||
this.conn.disconnect ('error', this.onConnError, this);
|
||||
this.conn.disconnect ('loading-changed', this.onConnLoading, this);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,46 @@ use Vn\Lib\Locale;
|
|||
use Vn\Rest;
|
||||
use Vn\Hedera\Web;
|
||||
|
||||
ini_set ('log_errors', TRUE);
|
||||
ini_set ('error_log', Vn\Hedera\_LOG_DIR .'/hedera-web.log');
|
||||
|
||||
function myExitHandler ()
|
||||
{
|
||||
Web::deinit ();
|
||||
Rest\Service::sendReply ();
|
||||
}
|
||||
|
||||
function myGlobalErrorHandler ()
|
||||
{
|
||||
Rest\Service::setError ('PHP', 'internalError', 'An internal error has occurred');
|
||||
myExitHandler ();
|
||||
exit (0);
|
||||
}
|
||||
|
||||
function myErrorHandler ($errno, $message, $file, $line, $context)
|
||||
{
|
||||
error_log ("$file:$line: $message");
|
||||
|
||||
switch ($errno)
|
||||
{
|
||||
case E_USER_ERROR:
|
||||
myGlobalErrorHandler ();
|
||||
default:
|
||||
Rest\Service::addWarning ('PHP', 'internalMessage', 'Something has gone wrong');
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
function myExceptionHandler ($e)
|
||||
{
|
||||
error_log ($e->getFile () .':'. $e->getLine () .': '.$e->getMessage ());
|
||||
myGlobalErrorHandler ();
|
||||
}
|
||||
|
||||
set_error_handler ('myErrorHandler', E_ALL);
|
||||
set_exception_handler ('myExceptionHandler');
|
||||
|
||||
Rest\Service::init ();
|
||||
|
||||
try {
|
||||
|
@ -62,12 +102,7 @@ catch (Rest\Exception $e)
|
|||
{
|
||||
Rest\Service::setError ($e->getDomain (), $e->getCode (), $e->getMessage ());
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
Rest\Service::setError ('PHP', 'exception', $e->getMessage ());
|
||||
}
|
||||
|
||||
Web::deinit ();
|
||||
Rest\Service::sendReply ();
|
||||
myExitHandler ();
|
||||
|
||||
?>
|
||||
|
|
|
@ -8,7 +8,7 @@ class RestMod extends Rest\Module
|
|||
function run ()
|
||||
{
|
||||
if (!isset ($_REQUEST['sql']) || $_REQUEST['sql'] == '')
|
||||
throw new Rest\Exception ('Conn', 'emptyQuery', s('EmptyQuery'));
|
||||
throw new Rest\Exception ('Db', 'emptyQuery', s('EmptyQuery'));
|
||||
|
||||
$results = [];
|
||||
$conn = $this->conn;
|
||||
|
@ -113,12 +113,60 @@ class RestMod extends Rest\Module
|
|||
$results[] = TRUE;
|
||||
}
|
||||
while ($conn->moreResults () && $conn->nextResult ());
|
||||
|
||||
// Checks for warnings
|
||||
|
||||
if ($conn->checkWarnings ()
|
||||
&& ($result = $conn->query ('SHOW WARNINGS')))
|
||||
{
|
||||
$sql = 'SELECT description, @warn code '.
|
||||
'FROM sql_message WHERE code = @warn';
|
||||
|
||||
while ($row = $result->fetch_assoc ())
|
||||
{
|
||||
if ($row['Code'] == 1265
|
||||
&& ($warning = $conn->getRow ($sql)))
|
||||
Rest\Service::addWarning ('User', $warning['code'], $warning['description']);
|
||||
else
|
||||
trigger_error ("Db\\Conn: ${row['Code']}: ${row['Message']}", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
// Checks for errors
|
||||
|
||||
$conn->checkError ();
|
||||
}
|
||||
catch (Db\Exception $e)
|
||||
{
|
||||
throw new Rest\Exception ('Conn', $e->getCode (), $e->getMessage ());
|
||||
$row = NULL;
|
||||
$code = $e->getCode ();
|
||||
$message = $e->getMessage ();
|
||||
|
||||
switch ($code)
|
||||
{
|
||||
case 1644: // ER_SIGNAL_EXCEPTION
|
||||
{
|
||||
$sql = 'SELECT description, #code code '.
|
||||
'FROM sql_message WHERE code = #code';
|
||||
$row = $conn->getRow ($sql, ['code' => $message]);
|
||||
break;
|
||||
}
|
||||
case 1305: // ER_SP_DOES_NOT_EXIST
|
||||
{
|
||||
if (strpos ($message, 'EXCEPTION') === FALSE)
|
||||
break;
|
||||
|
||||
$sql = 'SELECT description, @err code '.
|
||||
'FROM sql_message WHERE code = @err';
|
||||
$row = $conn->getRow ($sql);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($row)
|
||||
throw new Rest\Exception ('User', $row['code'], $row['description']);
|
||||
else
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
|
|
@ -19,8 +19,6 @@ class Service
|
|||
static function init ()
|
||||
{
|
||||
self::$reply = new Reply ();
|
||||
set_error_handler ('Vn\Rest\Service::errorHandler', E_ALL);
|
||||
set_exception_handler ('Vn\Rest\Service::exceptionHandler');
|
||||
}
|
||||
|
||||
static function setData ($data)
|
||||
|
@ -43,33 +41,6 @@ class Service
|
|||
self::$reply->error =
|
||||
new Message ($domain, $code, $message);
|
||||
}
|
||||
|
||||
static function exceptionHandler ($e)
|
||||
{
|
||||
// XXX: Exception trace
|
||||
//$trace = array_pop (debug_backtrace (DEBUG_BACKTRACE_IGNORE_ARGS, 2));
|
||||
|
||||
self::setError ('PHP', 'exception', $e->getMessage ());
|
||||
self::sendReply ();
|
||||
}
|
||||
|
||||
static function errorHandler ($errno, $message, $file, $line, $context)
|
||||
{
|
||||
switch ($errno)
|
||||
{
|
||||
case E_ERROR:
|
||||
case E_PARSE:
|
||||
case E_CORE_ERROR:
|
||||
case E_USER_ERROR:
|
||||
case E_COMPILE_ERROR:
|
||||
self::setError ('PHP', $errno, "$file:$line:$message");
|
||||
break;
|
||||
default:
|
||||
self::addWarning ('PHP', $errno, "$file:$line:$message");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static function sendReply ()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue