BUG 0000 "Safe upgrade for JavaScript files" SOLVED

- New feature
- Safe upgrade for JavaScript files
- Added new feature,
- This new feature is activated when you run one of the following commands:
    $ ./processmaker upgrade
    $ ./processmaker build-js
    $ ./processmaker browser-cache-files-upgrade
- The new feature creates an attribute in the file "processmaker/workflow/engine/config/env.ini"
    Example:
    browser_cache_files_uid = "xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzaa"
- After running the command, the browser should automatically cache the new files
* Available from version ProcessMaker-2.5
This commit is contained in:
Victor Saisa Lopez
2013-04-12 16:48:23 -04:00
parent c1ca183e69
commit 837365cf72
11 changed files with 282 additions and 254 deletions

View File

@@ -54,30 +54,6 @@ $docuroot = explode ( PATH_SEP , $_SERVER['DOCUMENT_ROOT'] );
/*** enable ERROR_LOG_NOTICE_ERROR to log Notices messages in default apache log ***/
// define ( 'ERROR_LOG_NOTICE_ERROR', true );
// ************* creat headPublisher singleton *****************
G::LoadSystem('headPublisher');
$oHeadPublisher =& headPublisher::getSingleton();
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/maborak.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/common.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/webResource.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'dveditor/core/dveditor.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/tree/tree.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'json/core/json.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/form.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/pagedTable.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'grid/core/grid.js' );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.panel.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.validator.js', true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.app.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.rpc.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.fx.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drag.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drop.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dom.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.abbr.js' , true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dashboard.js', true );
$oHeadPublisher->addMaborakFile( PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/jscalendar/calendar.js' );
//************ defining Virtual URLs ****************/
$virtualURITable = array();
$virtualURITable['/plugin/(*)'] = 'plugin';
@@ -172,7 +148,7 @@ $docuroot = explode ( PATH_SEP , $_SERVER['DOCUMENT_ROOT'] );
G::LoadSystem('tree');
$oHeadPublisher =& headPublisher::getSingleton();
//***************** database and workspace definition ************************
//if SYS_TEMP exists, the URL has a workspace, now we need to verify if exists their db.php file
if ( defined('SYS_TEMP') && SYS_TEMP != '')

View File

@@ -4897,6 +4897,49 @@ class G
}
}
}
public static function browserCacheFilesSetUid()
{
$arrayData = array();
$arrayData["browser_cache_files_uid"] = G::generateUniqueID();
G::update_php_ini(PATH_CONFIG . "env.ini", $arrayData);
}
public static function browserCacheFilesGetUid()
{
$sysConf = System::getSystemConfiguration(PATH_CONFIG . "env.ini");
return (isset($sysConf["browser_cache_files_uid"]))? $sysConf["browser_cache_files_uid"] : null;
}
public static function browserCacheFilesSetUrl($url)
{
$browserCacheFilesUid = self::browserCacheFilesGetUid();
if ($browserCacheFilesUid != null) {
$arrayLibrary = array();
$library = json_decode(file_get_contents(PATH_HOME . "engine" . PATH_SEP . "bin" . PATH_SEP . "tasks" . PATH_SEP . "libraries.json"));
foreach ($library as $index => $value) {
$lib = $value;
if ($lib->build) {
$arrayLibrary[] = $lib->name . ".js";
}
}
$arrayAux = explode("/", $url);
$n = count($arrayAux);
if ($n > 0 && !empty($arrayAux[$n - 1]) && array_search($arrayAux[$n - 1], $arrayLibrary) !== false) {
$url = $url . ((strpos($arrayAux[$n - 1], "?") !== false)? "&c=" : "?c=") . $browserCacheFilesUid;
}
}
return $url;
}
}
/**

View File

@@ -1,5 +1,4 @@
<?php
/**
* class.headPublisher.php
*
@@ -126,6 +125,8 @@ class headPublisher
*/
public function addScriptFile($url, $LoadType = 1)
{
$url = G::browserCacheFilesSetUrl($url);
if ($LoadType == 1) {
$this->scriptFiles[$url] = $url;
}
@@ -213,21 +214,25 @@ class headPublisher
$head = '';
$head .= '<TITLE>' . $this->title . "</TITLE>\n";
foreach ($this->scriptFiles as $file) {
$head .= "<script type='text/javascript' src='" . $file . "'></script>\n";
}
if (!in_array($this->translationsFile, $this->scriptFiles)) {
$head .= "<script type='text/javascript' src='" . $this->translationsFile . "'></script>\n";
}
$head .= "<script type='text/javascript'>\n";
$head .= $this->leimnudInitString;
foreach ($this->leimnudLoad as $file) {
$head .= " leimnud.Package.Load(false, {Type: 'file', Path: '" . $file . "', Absolute : true});\n";
}
$head .= $this->headerScript;
$head .= "</script>\n";
$head .= "<script type='text/javascript' src='/js/maborak/core/maborak.loader.js'></script>\n";
$head .= "<script type=\"text/javascript\" src=\"" . G::browserCacheFilesSetUrl("/js/maborak/core/maborak.loader.js") . "\"></script>\n";
return $head;
}
@@ -689,4 +694,4 @@ class headPublisher
$this->disableHeaderScripts = true;
}
}

View File

@@ -138,46 +138,6 @@ class PmBootstrap extends Bootstrap
}
}
public function loadLeimud()
{
$oHeadPublisher = headPublisher::getSingleton();
// Defining the maborak js file, this file is the concat of many js files and here we are including all of them.
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/maborak.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/common.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/effects.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/core/webResource.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'dveditor/core/dveditor.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'tinymce/jscripts/tiny_mce/tiny_mce.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'common/tree/tree.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'json/core/json.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/form.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'form/core/pagedTable.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'grid/core/grid.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.panel.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.validator.js', true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.app.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.rpc.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.fx.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drag.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.drop.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dom.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.abbr.js' , true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'maborak/core/module.dashboard.js', true );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/js-calendar/js-calendar.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/suggest/bsn.AutoSuggest_2.1.3.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/tooltip/pmtooltip.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'thirdparty/krumo/krumo.js' );
$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'widgets/calendar/pmcalendar.js' , true );
$oHeadPublisher->addMaborakFile(PATH_CORE . 'js' . PATH_SEP . 'cases/core/cases.js' , true );
$oHeadPublisher->addMaborakFile(PATH_CORE . 'js' . PATH_SEP . 'cases/core/cases_Step.js', true );
$oHeadPublisher->addMaborakFile(PATH_CORE . 'js' . PATH_SEP . 'processmap/core/processmap.js', true );
$oHeadPublisher->addMaborakFile(PATH_CORE . 'js' . PATH_SEP . 'appFolder/core/appFolderList.js', true );
$oHeadPublisher->addMaborakFile(PATH_THIRDPARTY . 'htmlarea/editor.js', true );
//$oHeadPublisher->addMaborakFile(PATH_GULLIVER_HOME . 'js' . PATH_SEP . "widgets/jscalendar/lang/calendar-" . SYS_LANG . ".js");
}
public function dispatchResource()
{
$realPath = $this->matchRoute['path'];

View File

@@ -0,0 +1,21 @@
<?php
CLI::taskName("browser-cache-files-upgrade");
CLI::taskDescription(<<<EOT
Safe upgrade for files cached by the browser
This command should be run after any upgrade/modification of files cached by the browser.
EOT
);
CLI::taskRun(runBrowserCacheFiles);
function runBrowserCacheFiles($command, $args)
{
CLI::logging("Safe upgrade for files cached by the browser\n");
G::browserCacheFilesSetUid();
CLI::logging("Upgrade successful\n");
}

View File

@@ -85,6 +85,13 @@ function minify_javascript($command, $args)
}
}
//Safe upgrade for JavaScript files
CLI::logging("\nSafe upgrade for files cached by the browser\n\n");
G::browserCacheFilesSetUid();
//Done
CLI::logging("BUILD-JS DONE\n");
}

View File

@@ -119,12 +119,6 @@ function run_upgrade($command, $args)
$errors = true;
}
}
if ($errors) {
CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n");
CLI::logging(CLI::error("Please check the log above to correct any issues.")."\n");
} else {
CLI::logging("Upgrade successful\n");
}
// SAVE Upgrades/Patches
$arrayPatch = glob(PATH_TRUNK . 'patch-*');
@@ -151,6 +145,19 @@ function run_upgrade($command, $args)
CLI::logging('ProcessMaker ' . System::getVersion(). ' installed', PATH_DATA . 'log/upgrades.log');
}
//Safe upgrade for JavaScript files
CLI::logging("\nSafe upgrade for files cached by the browser\n\n");
G::browserCacheFilesSetUid();
//Status
if ($errors) {
CLI::logging("Upgrade finished but there were errors upgrading workspaces.\n");
CLI::logging(CLI::error("Please check the log above to correct any issues.") . "\n");
} else {
CLI::logging("Upgrade successful\n");
}
//setting flag to false
$flag = G::isPMUnderUpdating(0);
}

View File

@@ -138,16 +138,19 @@ try {
$oStep = new Step();
$sUidGrids = $oStep->lookingforUidGrids( $sPRO_UID, $sDYNAFORM );
$template->assign( 'siteUrl', $http . $_SERVER['HTTP_HOST'] );
$template->assign( 'sysSys', SYS_SYS );
$template->assign( 'sysLang', SYS_LANG );
$template->assign( 'sysSkin', SYS_SKIN );
$template->assign( 'processUid', $sPRO_UID );
$template->assign( 'dynaformUid', $sDYNAFORM );
$template->assign( 'taskUid', $sTASKS );
$template->assign( 'dynFileName', $sPRO_UID . '/' . $sDYNAFORM );
$template->assign( 'formId', $G_FORM->id );
$template->assign( 'scriptCode', $scriptCode );
$browserCacheFilesUid = G::browserCacheFilesGetUid();
$template->assign("BROWSER_CACHE_FILES_UID", ($browserCacheFilesUid != null)? "?c=" . $browserCacheFilesUid : null);
$template->assign("siteUrl", $http . $_SERVER["HTTP_HOST"]);
$template->assign("sysSys", SYS_SYS);
$template->assign("sysLang", SYS_LANG);
$template->assign("sysSkin", SYS_SKIN);
$template->assign("processUid", $sPRO_UID);
$template->assign("dynaformUid", $sDYNAFORM);
$template->assign("taskUid", $sTASKS);
$template->assign("dynFileName", $sPRO_UID . "/" . $sDYNAFORM);
$template->assign("formId", $G_FORM->id);
$template->assign("scriptCode", $scriptCode);
if (sizeof( $sUidGrids ) > 0) {
foreach ($sUidGrids as $k => $v) {
@@ -167,4 +170,3 @@ try {
G::RenderPage( 'publish', 'raw' );
}

View File

@@ -29,6 +29,11 @@ $oTemplatePower->newBlock('users');
$oTemplatePower->assign('USR_UID', $aUser['USR_UID']);
$oTemplatePower->assign('USR_FULLNAME', $aData['USR_FIRSTNAME'] . ' ' . $aData['USR_LASTNAME'] . ' (' . $aData['USR_USERNAME'] . ')');
*/
$browserCacheFilesUid = G::browserCacheFilesGetUid();
$oTemplatePower->assign("BROWSER_CACHE_FILES_UID", ($browserCacheFilesUid != null)? "?c=" . $browserCacheFilesUid : null);
$G_PUBLISH->AddContent( 'template', '', '', '', $oTemplatePower );
G::RenderPage( 'publish', 'raw' );

View File

@@ -1,45 +1,46 @@
<html>
<head>
<script type="text/javascript" src="{siteUrl}/jscore/labels/{sysLang}.js"></script>
<script type="text/javascript" src="{siteUrl}/js/maborak/core/maborak.js"></script>
<script type="text/javascript" src="{siteUrl}/js/jscalendar/lang/calendar-{sysLang}.js"></script>
<script type="text/javascript" src="{siteUrl}/jsform/gulliver/dynaforms_Options.js"></script>
<script type="text/javascript" src="{siteUrl}/jsform/{dynFileName}.js"></script>
<!-- START BLOCK : grid_uids -->
<script type="text/javascript" src="{siteUrl}/jsform/{gridFileName}.js"></script>
<!-- END BLOCK : grid_uids -->
<script type="text/javascript">
var leimnud = new maborak();
leimnud.make();
leimnud.Package.Load("panel,validator,app,rpc,fx,drag,drop,dom,abbr",{ Instance:leimnud,Type:"module" });
leimnud.exec(leimnud.fix.memoryLeak);
if(leimnud.browser.isIphone)
{ leimnud.iphone.make(); }
leimnud.event.add(window,"load",function(){ loadForm_{formId}("{siteUrl}/sys{sysSys}/{sysLang}/{sysSkin}/gulliver/defaultAjaxDynaform")});
</script>
<script type="text/javascript">
var aux1 = window.location.href.split("?");
if(aux1[1]){
if(aux1[1]!=""){
var aux2 = aux1[1].split("&");
for(var i=0; i<=aux2.length; i++){
if(aux2[i]=="__flag__=1"){
alert("Request sent!");
}
}
}
}
</script>
</head>
<body>
{scriptCode}
<input type="hidden" name="PRO_UID" value="{processUid}">
<input type="hidden" name="TASKS" value="{taskUid}">
<input type="hidden" name="DYNAFORM" value="{dynaformUid}">
</form>
</body>
</html>
<html>
<head>
<script type="text/javascript" src="{siteUrl}/jscore/labels/{sysLang}.js"></script>
<script type="text/javascript" src="{siteUrl}/js/maborak/core/maborak.js{BROWSER_CACHE_FILES_UID}"></script>
<script type="text/javascript" src="{siteUrl}/js/jscalendar/lang/calendar-{sysLang}.js"></script>
<script type="text/javascript" src="{siteUrl}/jsform/gulliver/dynaforms_Options.js"></script>
<script type="text/javascript" src="{siteUrl}/jsform/{dynFileName}.js"></script>
<!-- START BLOCK : grid_uids -->
<script type="text/javascript" src="{siteUrl}/jsform/{gridFileName}.js"></script>
<!-- END BLOCK : grid_uids -->
<script type="text/javascript">
var leimnud = new maborak();
leimnud.make();
leimnud.Package.Load("panel,validator,app,rpc,fx,drag,drop,dom,abbr",{ Instance:leimnud,Type:"module" });
leimnud.exec(leimnud.fix.memoryLeak);
if (leimnud.browser.isIphone) {
leimnud.iphone.make();
}
leimnud.event.add(window,"load",function(){ loadForm_{formId}("{siteUrl}/sys{sysSys}/{sysLang}/{sysSkin}/gulliver/defaultAjaxDynaform")});
</script>
<script type="text/javascript">
var aux1 = window.location.href.split("?");
if (aux1[1]) {
if (aux1[1] != "") {
var aux2 = aux1[1].split("&");
for (var i = 0; i <= aux2.length; i++) {
if (aux2[i] == "__flag__=1") {
alert("Request sent!");
}
}
}
}
</script>
</head>
<body>
{scriptCode}
<input type="hidden" name="PRO_UID" value="{processUid}">
<input type="hidden" name="TASKS" value="{taskUid}">
<input type="hidden" name="DYNAFORM" value="{dynaformUid}">
</form>
</body>
</html>

View File

@@ -1,124 +1,125 @@
<html>
<head>
<script type='text/javascript' src='/js/maborak/core/maborak.js'></script>
<script type='text/javascript'>
var leimnud = new maborak();
leimnud.make({
zip:true,
inGulliver:true,
modules :"dom,abbr,rpc,drag,drop,app,panel,fx,grid,xmlform,validator,dashboard",
files :""
});
try{
leimnud.exec(leimnud.fix.memoryLeak);
if(leimnud.browser.isIphone){
leimnud.iphone.make();
}
}catch(e){}
</script>
<style type="text/css">
body, table {
font-family: tahoma,arial,verdana,sans-serif;
}
span.cMargLeft { padding-left: 20; }
.cell2 {
font-size: 13px;
background: #fff;
border-right: #fff 1px solid;
padding-right: 10px;
border-top: #fff 1px solid;
padding-top: 10px;
border-left: #fff 1px solid;
padding-left: 10px;
border-bottom: #fff 1px solid;
padding-bottom: 10px;
}
span.cNeg {
color: #002c72;
font-weight: bold;
}
span.cLow {
color: #002c72;
}
</style>
<!--[if IE]>
<style>
span.cMargLeft { padding-left: 9; }
.cell2 {
font-size: 12px !important;
padding-top: 1px !important;
padding-bottom: 1px !important;
}
</style>
<![endif]-->
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<a target="_blank" href="http://www.processmaker.com">
<img src="/images/get_started.png" border="0" width="163" height="438">
</a>
</td>
<td class="cell2" valign="top">
<span class="cLow"><strong>Get Started</strong></span>
<p><span class="cLow">Welcome to ProcessMaker!</span></p>
<p><span class="cLow">To get started, log in using the following credentials. You can change them later:</span></p>
<span class="cNeg">Username:</span><span class="cLow"> admin</span><br>
<span class="cNeg">Password:</span><span class="cLow"> admin</span>
<p><span class="cLow">We suggest you follow our 7 easy videos to automate your workflow. You can see a demo of each step at&nbsp;<a target="_blank" href="http://www.processmaker.com/demos/">http://www.processmaker.com/demos/</a> </span></p>
<span class="cLow">Other Resources:</span><br/><br/>
<span class="cLow"><a target="_blank" href="http://library.processmaker.com">PM Library </a>- Import Templates</span><br/>
<span class="cLow"><a target="_blank" href="http://wiki.processmaker.com">PM Wiki </a>- Manuals</span><br/>
<span class="cLow"><a target="_blank" href="http://forum.processmaker.com">PM Forum </a>- Ask Questions</span><br/>
<p><span class="cLow">We hope you enjoy using ProcessMaker. For more information about our enterprise support and consulting services <a target="_blank" href="http://www.processmaker.com/contact-us">contact us.</a>
</span></p>
<p><span class="cLow">The ProcessMaker Team</span></p>
<input type="checkbox" name="getStarted" id="getStarted" onclick="saveConfig();"><span class="cLow">Don't show me again</span>
</td>
</tr>
</table>
</body>
</html>
<script>
var saveConfig = function() {
if(document.getElementById("getStarted").checked==true) {
var oRPC = new leimnud.module.rpc.xmlhttp({
url : '../login/login_Ajax',
async : false,
method: 'POST',
args : 'function=getStarted_save'
});
oRPC.make();
}
if(panel) {
if(panel.remove) {
panel.remove();
return false;
}
}
if(window.parent) {
if (parent.Ext) {
parent.Ext.getCmp('gettingStartedWindow').close();
}
}
}
</script>
<html>
<head>
<script type="text/javascript" src="/js/maborak/core/maborak.js{BROWSER_CACHE_FILES_UID}"></script>
<script type="text/javascript">
var leimnud = new maborak();
leimnud.make({
zip: true,
inGulliver: true,
modules: "dom,abbr,rpc,drag,drop,app,panel,fx,grid,xmlform,validator,dashboard",
files: ""
});
try {
leimnud.exec(leimnud.fix.memoryLeak);
if (leimnud.browser.isIphone) {
leimnud.iphone.make();
}
} catch (e) {
}
</script>
<style type="text/css">
body, table {
font-family: tahoma,arial,verdana,sans-serif;
}
span.cMargLeft { padding-left: 20; }
.cell2 {
font-size: 13px;
background: #fff;
border-right: #fff 1px solid;
padding-right: 10px;
border-top: #fff 1px solid;
padding-top: 10px;
border-left: #fff 1px solid;
padding-left: 10px;
border-bottom: #fff 1px solid;
padding-bottom: 10px;
}
span.cNeg {
color: #002c72;
font-weight: bold;
}
span.cLow {
color: #002c72;
}
</style>
<!--[if IE]>
<style type="text/css">
span.cMargLeft { padding-left: 9; }
.cell2 {
font-size: 12px !important;
padding-top: 1px !important;
padding-bottom: 1px !important;
}
</style>
<![endif]-->
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<a target="_blank" href="http://www.processmaker.com"><img src="/images/get_started.png" border="0" width="163" height="438"></a>
</td>
<td class="cell2" valign="top">
<span class="cLow"><strong>Get Started</strong></span>
<p><span class="cLow">Welcome to ProcessMaker!</span></p>
<p><span class="cLow">To get started, log in using the following credentials. You can change them later:</span></p>
<span class="cNeg">Username:</span><span class="cLow"> admin</span><br>
<span class="cNeg">Password:</span><span class="cLow"> admin</span>
<p><span class="cLow">We suggest you follow our 7 easy videos to automate your workflow. You can see a demo of each step at&nbsp;<a target="_blank" href="http://www.processmaker.com/demos/">http://www.processmaker.com/demos/</a> </span></p>
<span class="cLow">Other Resources:</span><br/><br/>
<span class="cLow"><a target="_blank" href="http://library.processmaker.com">PM Library </a>- Import Templates</span><br/>
<span class="cLow"><a target="_blank" href="http://wiki.processmaker.com">PM Wiki </a>- Manuals</span><br/>
<span class="cLow"><a target="_blank" href="http://forum.processmaker.com">PM Forum </a>- Ask Questions</span><br/>
<p><span class="cLow">We hope you enjoy using ProcessMaker. For more information about our enterprise support and consulting services <a target="_blank" href="http://www.processmaker.com/contact-us">contact us.</a>
</span></p>
<p><span class="cLow">The ProcessMaker Team</span></p>
<input type="checkbox" name="getStarted" id="getStarted" onclick="saveConfig();"><span class="cLow">Don't show me again</span>
</td>
</tr>
</table>
</body>
</html>
<script type="text/javascript">
var saveConfig = function()
{
if (document.getElementById("getStarted").checked == true) {
var oRPC = new leimnud.module.rpc.xmlhttp({
url : "../login/login_Ajax",
async : false,
method: "POST",
args : "function=getStarted_save"
});
oRPC.make();
}
if (panel) {
if (panel.remove) {
panel.remove();
return false;
}
}
if (window.parent) {
if (parent.Ext) {
parent.Ext.getCmp("gettingStartedWindow").close();
}
}
};
</script>