MongoDB Tutorial 2: Buttons 3
MongoDB Tutorial 2 : Introduction | Alternative control | Alternative control 2 | Basic Window App | Buttons 1 | Buttons 2 | Buttons 3 | Mongo-Start
|
|
MongoDB Plugin UniServer 6-Carbo. |
Introduction
This page covers adding functionality to button Run phpMoAdmin.
Clicking phpMoAdmin opens it in a browser this MongoDB GUI administration tool is a single PHP script allowing you to administer the server.
From a scripting point of view difficult part is to run this disk file as a PHP page and have it served from the Apache server.
Trick here is to use html file association and redirection.
Redirection
There are two file associations that are sacrosanct htm and .html these files are opened in the default browser. This redirection solution assumes a user has not changed these file association.
Double clicking on a file with a .html extension you will see something similar to this displayed in your browser address bar:
file:///C:/Carbo_6_0_0_mongo/z_mongo/UniServer/docs/
- file:///C:/ Shows it is being read directly from disk
Whats impotent page is displayed in the browser all browsers honor code contained in <head> tag.
Placing a refresh Meta tag in the header section we can force a page to automatically refresh and more impotently redirect to another page.
For example:
<meta http-equiv="refresh" content="1;url=http://localhost:port/apanel/phpmoadmin/moadmin.php" />
Note:
A user can change the Apache server port hence this is included in the meta tag.
Implementation
We can create a separate html page. Every time the phpMoAdmin button is clicked perform a port search and replace. Then load the page into a browser.
Alternatively create page on the fly and load it into browser.
Every time button is clicked both methods require disk access. Creating page on the fly has a small advantage; user can delete page with no adverse effect on operation hence is the preferred solution.
Code
//=== View phpMoAdmin page ================================================= case ID_PHPMOADMIN_BUTTON: // Button //== Create or update a new redirect page $apache_port = get_apache_port(); // Get real port this may have changed $str = '<html><head>'."\n"; $str .= '<meta http-equiv="refresh" content="1;url=http://localhost:'; $str .= $apache_port.'/apanel/phpmoadmin/moadmin.php">'."\n"; $str .= '<title>Uniform Server</title></head>'."\n"; $str .= '<body></body></html>'."\n"; file_put_contents(REDIRECT_PAGE,$str); // Save string to file wb_exec(REDIRECT_PAGE); // Run redirect file mongo_redirect.html break; //============================================= END View phpMoAdmin page === |
|
Path
We need to add the constant REDIRECT_PAGE to file mongo_db_inc.php
define("REDIRECT_PAGE", "$mongo_base_f/UniServer/home/admin/www/phpMoAdmin/mongo_redirect.html");
Complete handler function
Adding the above code snippets gives the following final handler function
//=== 4) Handler Function ===================================================== function process_mongo($window, $id){ global $win_mongo; global $statusbar_mongo; switch($id) { //=== Start-Stop Servers =================================================== case ID_DB_BUTTON: // Button toggles $text = wb_get_text(wb_get_control($window, ID_DB_BUTTON)); // get button text if($text == START_DB_BTXT ){ // Start server //== Start Apache $cmd = "../../usr/local/php/php.exe -n ../main/start_servers.php 1"; // Cmd to run hidden run_cmd_hidden($cmd); // Run command wb_set_text($statusbar_mongo, " Starting Apache"); // Inform user //== Start MongoDB start_mongo_no_auth(); wb_set_text($statusbar_mongo, " Starting MongoDB"); // Inform user //== Set buttons wb_set_text(wb_get_control($window, ID_DB_BUTTON),STOP_DB_BTXT); // set button text wb_set_enabled(wb_get_control($window, ID_CLIENT_BUTTON), TRUE); // Enable Client button wb_set_enabled(wb_get_control($window, ID_PHPMOADMIN_BUTTON), TRUE); // Enable Admin button wb_set_text($statusbar_mongo, " Servers running"); // Inform user } else{ // Stop server if(mongo_client_running()){ // Client must be stopped before Mongo Server $str = "Before you can stop MongoDB \n"; $str .= "Please close Mongo Client \n\n"; $str .= "Type EXIT to close client\n"; $str .= "Data from RAM needs to be written to disk.\n"; wb_message_box($window, $str, "CLIENT RUNNING", WBC_INFO); wb_set_text($statusbar_mongo, " Clienr running"); // Inform user break; } else{ // Client not running //== Stop Apache $cmd = "../../usr/local/php/php.exe -n ../main/stop_servers.php 1"; // Cmd to run hidden run_cmd_hidden($cmd); // Run command wb_set_text($statusbar_mongo, " Stopping Apache"); // Inform user //== Stop MongoDB stop_mongo_no_auth(); wb_set_text($statusbar_mongo, " Stopping MongoDB"); // Inform user //==Set button text wb_set_text(wb_get_control($window, ID_DB_BUTTON),START_DB_BTXT); // set button text wb_set_enabled(wb_get_control($window, ID_CLIENT_BUTTON), FALSE); // DISABLE Client button wb_set_enabled(wb_get_control($window, ID_PHPMOADMIN_BUTTON), FALSE); // Disable Test button wb_set_text($statusbar_mongo, " Servers stopped"); // Inform user } } break; //================================================ END Start-Stop Servers == //=== Start Client ========================================================= case ID_CLIENT_BUTTON: // Button if(mongo_client_running()){ // Client must be stopped before Mongo Server wb_set_text($statusbar_mongo, " No action taken client already running"); // Inform user break; } else{ client_no_auth(); // Start a cmd window and run mohgo command line interface wb_set_text($statusbar_mongo, " Client started"); // Inform user } break; //===================================================== END Start Client === //=== View phpMoAdmin page ================================================= case ID_PHPMOADMIN_BUTTON: // Button //== Create or update a new redirect page $apache_port = get_apache_port(); // Get real port this may have changed $str = '<html><head>'."\n"; $str .= '<meta http-equiv="refresh" content="1;url=http://localhost:'; $str .= $apache_port.'/apanel/phpmoadmin/moadmin.php">'."\n"; $str .= '<title>Uniform Server</title></head>'."\n"; $str .= '<body></body></html>'."\n"; file_put_contents(REDIRECT_PAGE,$str); // Save string to file wb_exec(REDIRECT_PAGE); // Run redirect file mongo_redirect.html break; //============================================= END View phpMoAdmin page === //=== Open command window ================================================== // Open a command window in folder bin case ID_OPEN_CMD_BUTTON: // Button open_cmd_window(); break; //============================================== END Open command window === //=== Display help info ==================================================== case ID_HELP_BUTTON: // Button wb_exec('Notepad',INFO_TXT); break; //================================================ END Display help info === case IDCLOSE: // Constant IDCLOSE (8) predefined wb_destroy_window($window); // Destroy the window break; } } //================================================ END 4) Handler Function ===
Finishing touches
Create a folder z_mongo\UniServer\usr\local\mongo\top_level
It contains a single file Run_MongoDB.bat with the following content:
cd usr\local\php php.exe -c mongo_cli.ini ..\..\..\unicon\tray_menu_2\mongo_db.php EXIT
To run server copy this file to folder UniServer. Alternatively convert the file to an exe using bat2exe
Finally delete folder z_mongo\temp no longer required.