Exemple #1
0
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);
}
Exemple #2
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);
        }
    }