function run_new_plugin($task, $args) { ini_set('display_errors', 'on'); ini_set('error_reporting', E_ERROR); // the environment for poedit always is Development define('G_ENVIRONMENT', G_DEV_ENV); //the plugin name in the first argument if (!isset($args[0])) { printf("Error: %s\n", pakeColor::colorize('you must specify a valid name for the plugin', 'ERROR')); exit(0); } $pluginName = $args[0]; require_once "propel/Propel.php"; G::LoadSystem('templatePower'); Propel::init(PATH_CORE . "config/databases.php"); $configuration = Propel::getConfiguration(); $connectionDSN = $configuration['datasources']['workflow']['connection']; printf("using DSN Connection %s \n", pakeColor::colorize($connectionDSN, 'INFO')); $pluginDirectory = PATH_PLUGINS . $pluginName; $pluginOutDirectory = PATH_OUTTRUNK . 'plugins' . PATH_SEP . $pluginName; $pluginHome = PATH_OUTTRUNK . 'plugins' . PATH_SEP . $pluginName . PATH_SEP . $pluginName; //verify if plugin exists, and then ask for overwrite $pluginClassFilename = PATH_PLUGINS . $pluginName . PATH_SEP . 'class.' . $pluginName . '.php'; if (is_file($pluginClassFilename)) { printf("The plugin %s exists in this file %s \n", pakeColor::colorize($pluginName, 'ERROR'), pakeColor::colorize($pluginClassFilename, 'INFO')); $overwrite = strtolower(prompt('Do you want to create a new plugin? [Y/n]')); if ($overwrite == 'n') { die; } } printf("creating plugin directory %s \n", pakeColor::colorize($pluginOutDirectory, 'INFO')); G::verifyPath($pluginOutDirectory, true); G::verifyPath($pluginHome . PATH_SEP . 'classes', true); G::verifyPath($pluginHome . PATH_SEP . 'public_html', true); G::verifyPath($pluginHome . PATH_SEP . 'config', true); G::verifyPath($pluginHome . PATH_SEP . 'data', true); //config savePluginFile($pluginName . PATH_SEP . "setup.xml", "pluginSetup.xml", $pluginName, $pluginName); savePluginFile($pluginName . PATH_SEP . "messageShow.xml", "pluginMessageShow.xml", $pluginName, $pluginName); savePluginFile($pluginName . PATH_SEP . 'config' . PATH_SEP . 'schema.xml', 'pluginSchema.xml', $pluginName, $pluginName); savePluginFile($pluginName . PATH_SEP . 'config' . PATH_SEP . 'propel.ini', 'pluginPropel.ini', $pluginName, $pluginName); savePluginFile($pluginName . PATH_SEP . 'config' . PATH_SEP . 'propel.mysql.ini', 'pluginPropel.mysql.ini', $pluginName, $pluginName); //create a logo to use instead the Workspace logo $changeLogo = strtolower(prompt('Change system logo [y/N]')); $fields = array(); $fields['phpClassName'] = $pluginName; if ($changeLogo == 'y') { $filePng = $pluginHome . PATH_SEP . 'public_html' . PATH_SEP . $pluginName . '.png'; createPngLogo($filePng, $pluginName); $fields['changeLogo'][] = array('className' => $pluginName); } //Menu $menu = strtolower(prompt('Create an example Page [Y/n]')); $swMenu = 0; if ($menu == 'y') { $fields['menu'][] = array('className' => $pluginName); savePluginFile($pluginName . PATH_SEP . 'menu' . $pluginName . '.php', 'pluginMenu', $pluginName, $pluginName, $fields, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.php", "pluginApplication.php", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.html", "pluginApplication.html", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.js", "pluginApplication.js", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "ApplicationAjax.php", "pluginApplicationAjax.php", $pluginName, $pluginName); $swMenu = 1; } //Menu cases $menuCases = strtolower(prompt("Create new option in the menu of cases [Y/n]")); if ($menuCases == "y") { $fields["menuCases"][] = array("className" => $pluginName); savePluginFile($pluginName . PATH_SEP . "menuCases" . $pluginName . ".php", "pluginMenuCases", $pluginName, $pluginName, $fields, true); if ($swMenu == 0) { savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.php", "pluginApplication.php", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.html", "pluginApplication.html", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application.js", "pluginApplication.js", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "ApplicationAjax.php", "pluginApplicationAjax.php", $pluginName, $pluginName, null, true); } savePluginFile($pluginName . PATH_SEP . $pluginName . "Application2.php", "pluginApplication2.php", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application2.html", "pluginApplication2.html", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application2.js", "pluginApplication2.js", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application3.php", "pluginApplication3.php", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application3.html", "pluginApplication3.html", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . $pluginName . "Application3.js", "pluginApplication3.js", $pluginName, $pluginName, null, true); } //RBAC features $classNameUpperCase = strtoupper($pluginName); //Create a new Permission a new role $newPermission = strtolower(prompt("Create the Role 'PROCESSMAKER_{$classNameUpperCase}' and \n the Permission 'PM_{$classNameUpperCase}' [y/N]")); $swRole = 0; if ($newPermission == 'y') { $fields['createPermission'][] = array('className' => $classNameUpperCase); $swRole = 1; } //Redirect if ($swRole == 1) { $redirect = strtolower(prompt("Create a Redirect Login for the Role 'PROCESSMAKER_{$classNameUpperCase}' [y/N]")); if ($redirect == 'y') { $fields['redirectLogin'][] = array('className' => $classNameUpperCase); } } //External step $externalStep = strtolower(prompt('Create external step for Processmaker [y/N]')); if ($externalStep == 'y') { $fields['externalStep'][] = array('className' => $pluginName, 'GUID' => G::generateUniqueID()); savePluginFile($pluginName . PATH_SEP . "step" . $pluginName . "Application.php", "pluginStepApplication.php", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . "step" . $pluginName . "Application.html", "pluginStepApplication.html", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . "step" . $pluginName . "Application.js", "pluginStepApplication.js", $pluginName, $pluginName, null, true); savePluginFile($pluginName . PATH_SEP . "step" . $pluginName . "ApplicationAjax.php", "pluginStepApplicationAjax.php", $pluginName, $pluginName, null, true); } //Dashboards $dashboard = strtolower(prompt("Create an element for the Processmaker Dashboards [y/N]")); if ($dashboard == "y") { $fields["dashboard"][] = array("className" => $pluginName); $fields["dashboardAttribute"] = "private \$dashletsUids;"; $fields["dashboardAttributeValue"] = "\n \$this->dashletsUids = array(\n array(\"DAS_UID\" => \"" . G::GenerateUniqueId() . "\",\n \"DAS_CLASS\" => \"dashlet" . $pluginName . "\",\n \"DAS_TITLE\" => \"Dashlet {$pluginName}\",\n \"DAS_DESCRIPTION\" => \"Dashlet {$pluginName}\",\n \"DAS_VERSION\" => \"1.0\",\n \"DAS_CREATE_DATE\" => date(\"Y-m-d\"),\n \"DAS_UPDATE_DATE\" => date(\"Y-m-d\"))\n );\n "; $fields["dashboardSetup"] = "\$this->registerDashlets();"; $fields["dashboardEnable"] = "\$this->dashletInsert();"; $fields["dashboardDisable"] = "\$this->dashletDelete();"; G::verifyPath($pluginHome . PATH_SEP . "views", true); savePluginFile($pluginName . PATH_SEP . "classes" . PATH_SEP . "class.dashlet" . $pluginName . ".php", "pluginDashletClass.php", $pluginName, $pluginName); copyPluginFile("pluginDashlet.html", $pluginName . PATH_SEP . "views" . PATH_SEP . "dashlet" . $pluginName . ".html", $pluginName, null, true); } //$report = strtolower(prompt('Create a Report for Processmaker [y/N]')); //if( $report == 'y' ) { // $fields['report'][] = array ( // 'className' => $pluginName // ); // savePluginFile($pluginName . PATH_SEP . 'report.xml', 'pluginReport.xml', $pluginName, $pluginName, $fields); //} $report = strtolower(prompt('Create a PmFunction Class for extending Processmaker [y/N]')); if ($report == 'y') { $fields['PmFunction'][] = array('className' => $pluginName); savePluginFile($pluginName . PATH_SEP . 'classes' . PATH_SEP . 'class.pmFunctions.php', 'class.pmFunctions.php', $pluginName, $pluginName, $fields); } //main php file savePluginFile($pluginName . '.php', 'pluginMainFile', $pluginName, $pluginName, $fields); savePluginFile($pluginName . PATH_SEP . 'class.' . $pluginName . '.php', 'pluginClass', $pluginName, $pluginName, $fields); if (!PHP_OS == "WINNT") { printf("creating symlinks %s \n", pakeColor::colorize($pluginDirectory, 'INFO')); symlink($pluginOutDirectory . PATH_SEP . $pluginName . '.php', PATH_PLUGINS . $pluginName . '.php'); symlink($pluginOutDirectory . PATH_SEP . $pluginName, $pluginDirectory); } exit(0); }
file_put_contents($fileObj, serialize($oConf)); $pathHome = PATH_DATA . 'skins' . PATH_SEP . $id . PATH_SEP; $pathBase = PATH_DATA . 'skins' . PATH_SEP . $id . PATH_SEP . $id . PATH_SEP; $pathPublic = $pathBase . 'data' . PATH_SEP . 'public_html' . PATH_SEP; $pathImages = PATH_HTML . 'skins' . PATH_SEP . $id . PATH_SEP . 'images' . PATH_SEP; G::mk_dir($pathBase); G::mk_dir($pathBase . 'data'); G::mk_dir($pathPublic); G::mk_dir($pathPublic . 'images'); // file_put_contents ( PATH_DATA . 'skins' . PATH_SEP . $id , "hello world" ); $fields['className'] = $id; $fields['version'] = $oConf->version; $fields['description'] = $oConf->description; $fields['PMversion'] = System::getVersion(); savePluginFile('skinPluginMainClass', $pathHome . $id . '.php', $fields); savePluginFile('skinPluginClass', $pathBase . 'class.' . $id . '.php', $fields); copyFile(PATH_SKINS . $id . '.php', $pathBase . 'data'); copyFile(PATH_SKINS . $id . '.html', $pathBase . 'data'); copyFile(PATH_SKINS . $id . '.cnf', $pathBase . 'data'); copyFile(PATH_HTML . 'skins' . PATH_SEP . $id . PATH_SEP . 'iepngfix.htc', $pathPublic); copyFile(PATH_HTML . 'skins' . PATH_SEP . $id . PATH_SEP . 'style.css', $pathPublic); $aFiles = array(); if ($handle = opendir($pathImages)) { while (false !== ($file = readdir($handle))) { if (substr($file, 0, 1) != '.') { if (isset($aFiles[$file])) { $aFiles[$file] = 0; } copyFile($pathImages . $file, $pathPublic . 'images' . PATH_SEP); } }