33 / 50
Jul 2020

The header is good, but I have these errors in the console now. while selecting the input

jquery.js?1594672809:6702 Uncaught TypeError: Cannot read property 'defaultView' of null
    at getStyles (jquery.js?1594672809:6702)
    at curCSS (jquery.js?1594672809:6715)
    at Function.css (jquery.js?1594672809:7172)
    at jquery.js?1594672809:7349
    at access (jquery.js?1594672809:4428)
    at jQuery.fn.init.css (jquery.js?1594672809:7331)
    at datepicker_getZindex (jquery-ui.js?1594672814:3783)
    at HTMLInputElement._showDatepicker (jquery-ui.js?1594672814:4526)
    at HTMLInputElement.dispatch (jquery.js?1594672809:5226)
    at HTMLInputElement.elemData.handle (jquery.js?1594672809:4878)

HTML

<input type="text" id="input-datepicker" value="2020-07-17" class="hasDatepicker" size="10">

JS

$(document).ready(function () {
  egw.calendar(jQuery('#input-datepicker'), false, function(v){});
});

image

That’s probably caused by you not taking care of our asynchronous loading of javascript files.

You need to wait for javascript files to be loaded:

egw_LAB.wait(function() {
   jQuery(document).ready(function () {
      egw.calendar(jQuery('#input-datepicker'), false, function(v){});
   });
}

If you would use our rendering engine / eTemplate2, all that would be taken care of automatic!

Ralf

An other possibility is to store your javascript in our standard place $app/js/app.js, then it will be loaded automatic and started after all javascript is loaded and ready to run.

Ralf

The egw_LAB.wait(function() doesn’t seem to work, all egw_js files are still loaded after my custom js file.
I still get the same errors in the console.

I tried the other possibility you mentioned as per the standard, created an app.js file and placed the following code inside.

app.classes.myapp = AppJS.extend(
  {
    appname: 'myapp',


    /**
     * Initialize javascript for this application
     *
     * @memberOf myapp
     */
    init: function() {
      console.log("app test my cutom app");
      egw.calendar(jQuery('#input-datepicker'), false, function(v){});
    },


  });

But I couldn’t see the app.js loaded in the network tab, is there any any other code that needs to be added in the app.js file for it to be picked up ?

The app js doesn’t seem to load. I used the code given in the above comment.
Also the egw_LAB.wait(function() { doesn’t do anything in my custom JS file.

Please help, this is the last step I want to fix in my new upgraded version

I modified our example app branch step1 as an example for you:

cd /path/to/egroupware
git clone -b step1
patch -p1 -d example <<EOF
diff --git a/js/app.js b/js/app.js
new file mode 100644
index 0000000..ad7835a
--- /dev/null
+++ b/js/app.js
@@ -0,0 +1,9 @@
+/*egw:uses
+       /vendor/bower-asset/jquery/dist/jquery.js;
+       /vendor/bower-asset/jquery-ui/jquery-ui.js;
+*/
+egw_LAB.wait(function() {
+       jQuery(function () {
+               egw.calendar(jQuery('#input-datepicker'), false, function(v){});
+       });
+});
diff --git a/src/Ui.php b/src/Ui.php
index 92087e7..560a81e 100644
--- a/src/Ui.php
+++ b/src/Ui.php
@@ -12,6 +12,8 @@

 namespace EGroupware\Example;

+use EGroupware\Api\Framework;
+
 class Ui
 {
        /**
@@ -30,6 +32,9 @@ class Ui
         */
        public function index(array $content=null)
        {
+               Framework::includeJS('/example/js/app.js');
+               echo $GLOBALS['egw']->framework->header();
                echo "Hello World :)";
+               echo "<p><input type='text' id='input-datepicker' value=''/></p>\n";
        }
 }
EOF

The loading works, but jQuery still throws that TypeError.

As far as I can tell that’s a problem/bug in jQuery :frowning:

Ralf

Thanks for the insight Ralf

This worked for me, just using simple datepicker, no wait function and egw calendar. So there is something up with egw calendar initialization

// egw_LAB.wait(function() {
           jQuery(function () {
              // egw.calendar(jQuery('#input-datepicker'), false, function(v){});
             jQuery( "#input-datepicker" ).datepicker();
             });
    // });

Added other datepicker properties and it seems to be working fine this way

Hi Ralf.

I finished removing the deprecated code for latest upgrade version 20.1 on my local server.
However after starting the upgrade on production server, I ran into the same access log errors.

2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: # Instance=default, User=vish, Request=POST https://project.qa.com:8081/egroupware/json.php?menuaction=home.jdots_framework.ajax_exec.t>
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: PHP Warning: Creating default object from empty value in /home/www.project.com/public_html/egroupware/api/src/Db.php on line 510
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #1 /home/www.project.com/public_html/egroupware/api/src/Db.php(344): EGroupware\Api\Db->_connect()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #2 /home/www.project.com/public_html/egroupware/api/src/Db.php(604): EGroupware\Api\Db->connect()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #3 [internal function]: EGroupware\Api\Db->__wakeup()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #4 /home/www.project.com/public_html/egroupware/api/src/loader.php(79): unserialize()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #5 /home/www.project.com/public_html/egroupware/header.inc.php(92): require_once('/home/www.temps...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #6 /home/www.project.com/public_html/egroupware/json.php(110): include_once('/home/www.temps...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #7 {main}
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: # Instance=default, User=vish, Request=GET https://project.qa.com:8081/egroupware/json.php?menuaction=EGroupware\Api\Framework::ajax_ge>
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: PHP Warning: Creating default object from empty value in /home/www.project.com/public_html/egroupware/api/src/Db.php on line 510
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #1 /home/www.project.com/public_html/egroupware/api/src/Db.php(344): EGroupware\Api\Db->_connect()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #2 /home/www.project.com/public_html/egroupware/api/src/Db.php(604): EGroupware\Api\Db->connect()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #3 [internal function]: EGroupware\Api\Db->__wakeup()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #4 /home/www.project.com/public_html/egroupware/api/src/loader.php(79): unserialize()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #5 /home/www.project.com/public_html/egroupware/header.inc.php(92): require_once('/home/www.project...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #6 /home/www.project.com/public_html/egroupware/json.php(110): include_once('/home/www.project...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #7 {main}
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: # Instance=default, User=vish, Request=POST https://project.qa.com:8081/egroupware/json.php?menuaction=status.jdots_framework.ajax_exec>
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: Database error (EGroupware\Api\Db\Exception\InvalidSql): Invalid SQL: UPDATE egw_access_log SET  WHERE
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE' at>
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #0 /home/www.project.com/public_html/egroupware/api/src/Db/Deprecated.php(64): EGroupware\Api\Db->query()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #1 /home/www.project.com/public_html/egroupware/api/src/Db.php(1980): EGroupware\Api\Db\Deprecated->query()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #2 /home/www.project.com/public_html/egroupware/api/src/Session.php(1893): EGroupware\Api\Db->update()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #3 /home/www.project.com/public_html/egroupware/api/src/Session.php(1315): EGroupware\Api\Session->update_dla()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #4 /home/www.project.com/public_html/egroupware/api/src/Egw.php(304): EGroupware\Api\Session->verify()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #5 /home/www.project.com/public_html/egroupware/api/src/Egw.php(259): EGroupware\Api\Egw->verify_session()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #6 /home/www.project.com/public_html/egroupware/api/src/loader.php(83): EGroupware\Api\Egw->wakeup2()
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #7 /home/www.project.com/public_html/egroupware/header.inc.php(92): require_once('/home/www.project...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #8 /home/www.project.com/public_html/egroupware/json.php(110): include_once('/home/www.project...')
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: #9 {main}
2020-07-29 08:48:17: (mod_fastcgi.c.421) FastCGI-stderr: # Instance=default, User=vish, Request=POST https://project.qa.com:8081/egroupware/json.php?menuaction=status.jdots_framework.ajax_exec>

Production Server Details:

DB Server: MariaDB Server
Version: 10.1.34-MariaDB
PHP 7.4
Maria db is used
Lighttpd server is used

Local server details:

Mysql
PHP 7.2
Apache is used.

The upgrade was successful on the local server, I compared the schema setup file which is identical. Not sure what part of code is causing the values of the update access log query empty.
Please help

Only ideas I have:

  • you used an old session, from before you removed the deprecated apps
  • you did not restart our container, which copies the deprecated code inside

Ralf

I’m not using Docker.
Can I clear cache from egroupware and restart my lighttpd server

After doing some debugging, I found that not all update queries fail for the access log.It fails at some point when accessing the default app page. I set the default app page to filemanager and this is the sequence of logs

UPDATE egw_access_log SET session_dla=1596116842,session_action=’/api/categories.php’,lo=NULL WHERE sessionid=4289950

UPDATE egw_access_log SET session_dla=1596116842,session_action=’/api/config.php’,lo=NULL WHERE sessionid=4289950

UPDATE egw_access_log SET session_dla=1596116842,session_action=’/api/images.php’,lo=NULL WHERE sessionid=4289950

UPDATE egw_access_log SET session_dla=1596116842,session_action=’/api/user.php’,lo=NULL WHERE sessionid=4289950

Instance=default, User=vish, Request=POST https://project.com/egroupware/json.php?menuaction=filemanager.jdots_framework.ajax

When this request is issued, the query fails, the table definition array returns empty and thus no arguments in the query are passed

UPDATE egw_access_log SET WHERE

UPDATE egw_access_log SET session_dla=1596116843,session_action=’/api/lang.php’,lo=NULL WHERE sessionid=4289950

UPDATE egw_access_log SET session_dla=1596116877,session_action=’/index.php’,lo=NULL WHERE sessionid=4289950

An error happened! (EGroupware\Api\Exception\AssertionFailed): CreateObject() file /home/www.tempstop.com/public_html/egroupware/api/inc/class…in

Not sure what the error corresponds here

UPDATE egw_access_log SET session_dla=1596116877,session_action=’/index.php’,lo=NULL WHERE sessionid=4289950

Instance=default, User=vish, Request=POST https://project.com/egroupware/json.php?menuaction=filemanager.jdots_framework.ajax>

UPDATE egw_access_log SET WHERE.

Please advice. I cleared the cache from the Clear Cache and register hooks option in the setup and even restarted the server. Also I’m using an incognito window

I was removing the deprecated code in my custom application on my local server. After doing the upgrade on production I moved the modified class files of the application. I have also restarted the upgrade several times to get rid of the errors, but nothing changes.
I’m doing through composer with the following steps

  • composer create-project --prefer-source --keep-vcs egroupware/egroupware
  • Copy the custom application in egroupware folder
  • Copy the header file in egroupware
  • Run the db migrations to upgrade

I was using 17.1 version before and with the composer command I got upgraded to the latest version 20.1 which turned out well on my local server which was used for testing but not on production

Is there a way to comment updating the access log update queries ?