Overwriting AppGini functions: Allowing Admin group members to access the admin area
Heads-up! We’ve recently added an option to allow Admins group members to access the admin area (except the admin settings page). So, the code listed here for overriding
getLoggedAdmin()
is no longer necessary if you’re using AppGini 22.12 or above. The code for overriding generated functions is still applicable though if you need to override other functions.
You might already know that AppGini applications can be extended through hooks . Hooks allow you to intercept certain events, like when a user submits a new record to be inserted into a table , or when a record has been updated , .. etc. The great benefit of using hooks is that you write them once, and they persist even if you re-generate your AppGini application any number of times later. So, it’s a write once and forget way of extending your AppGini apps.
Psst! Want to learn more about using AppGini hooks, even if you’re not a programmer? Check our online video course .
Sometimes, however, the modification you want to make might have no relevant hook. In that case, you might find the only way to apply that modification is to manually edit the generated code. This is a painful process that I usually advise against unless it’s absolutely necessary. The problem with this method is that your changes would be overwritten if you re-generate your code later, and you’ll have to re-apply them. Moreover, there is a big chance those changes might not work correctly in future versions of AppGini. Using Git or a similar source code management tool might help, but it’s still a pain.
In this post, we’ll discuss a method that makes this process a little easier. You can use it to replace one or more PHP functions defined by AppGini with your own version. It works by looking for the function body and comparing it with our custom version. If they are not the same, our custom version replaces the one generated by AppGini. This is all performed in an automated manner and the only action we need to take is call a script once after we re-generate our AppGini app.
Let’s start by creating a new file inside the hooks folder,
hooks/replace-appgini-functions.php
, and adding the following
code to it:
|
|
To make the code easier to follow, I’ve added comments above to mark the 3 steps we need to apply to change the above code.
Step 1: Specify the file containing the function we want to overwrite
In this step, we should provide the full path to the file to be
modified. The above code can replace AppGini functions defined only in
incCommon.php
or admin/incFunctions.php
. Functions
defined in other generated files won’t be replaced using the above code,
but you could make some modifications to the search algorithm if you
wish in order to make this possible.
Step 2: Specify the file containing our version of the function
In this example, we’re going to modify the getLoggedAdmin()
function. This function is responsible for authenticating the super
admin user, controlling who can access the admin area of your AppGini
application. AppGini allows only a single user to access that area.
We’ll modify this function to allow any user in the ‘Admins’ group to
access the admin area. Let’s define the customized code in a file that
we’ll name hooks/mod.getLoggedAdmin.php
:
|
|
The above code is our own version of the getLoggedAdmin()
function, allowing any user that belongs to Admins group to access the
admin area.
Step 3: Specify the name of the function we want to overwrite
Finally, we’ll specify that we want to change the function named
getLoggedAdmin
.
How do we apply the modification?
We’ve now created 2 files inside the hooks folder:
replace-appgini-functions.php
and
mod.getLoggedAdmin.php
. Whenever you want to regenerate your
AppGini application, all you need to do is to call
replace-appgini-functions.php
once to apply your modified code.
As a safety measure, the file to be modified will be backed up first.
Also, our code above would check if modifications were already applied,
and if so they won’t be re-applied. So, it’s actually safe to call this
file multiple times. Only the first time will apply modifications, and
others would do nothing and just notify you that changes were already
applied.
Assuming our app is hosted on example.com/staff-db, to apply the modified getLoggedAdmin() function, we should visit this URL from a browser: example.com/staff-db/hooks/replace-appgini-functions.php
Changing multiple functions
The same method above could be used to modify multiple functions. Simply
repeat steps 1 to 3 for each function. Make sure to store each modified
function in a separate mod file. For example, let’s say we’re going to
modify getLoggedAdmin()
and sendmail()
. We should
store the new code of getLoggedAdmin()
in
hooks/mod.getLoggedAdmin.php
, and the new code of
sendmail()
in hooks/mod.sendmail.php
.
Next, we should modify the steps in
hooks/replace-appgini-functions.php
to the following:
|
|
After every time you regenerate your AppGini app, visit
replace-appgini-functions.php
once in your browser to apply all
modifications. I hope you find this approach much more convenient than
manually modifying generated files. Comments are welcome 🙂