Exemple #1
0
/**
 * Generates directory structure for the whole component, a manifest.xml file,
 * controllers and entry points for the frontend and the backend.
 *
 * @return void
 * @access public
 * @since  2.0
 */
function generate_output($config, $models, $frontend)
{
    $component = $config['component'];
    $base_path = $component . DS;
    $lang_path = 'language' . DS . $config['default_language'];
    $lang_file = DS . $config['default_language'] . '.' . $config['component'] . '.ini';
    // create fresh output directory
    @delete_dir($component);
    mkdir($component);
    // generate directory structure for the backend
    mkdir($base_path . 'admin');
    $admin_path = $base_path . 'admin' . DS;
    foreach (array('assets', 'controllers', 'help', 'helpers', 'install', 'updates', 'language', 'models', 'tables', 'views', $lang_path) as $dir) {
        mkdir($admin_path . $dir);
        file_put_contents($admin_path . $dir . DS . 'index.html', 'test');
    }
    // generate config.xml file
    file_put_contents($admin_path . DS . 'config.xml', file_get_contents('tmpl' . DS . 'admin' . DS . 'config.xml'));
    // generate SQL install / uninstall files
    if ($models) {
        $sql = prepare_sql($config, $models);
    } else {
        $sql = array('', '');
    }
    file_put_contents($admin_path . 'install' . DS . 'installsql.mysql.utf8.php', $sql[0]);
    file_put_contents($admin_path . 'install' . DS . 'uninstallsql.mysql.utf8.php', $sql[1]);
    // generate tables, models, controllers and views for the backend
    if ($models) {
        foreach (prepare_tables($config, $models) as $name => $content) {
            file_put_contents($admin_path . 'tables' . DS . $name, $content);
        }
        foreach (prepare_models_or_controllers($config, $models, array(), 'model') as $name => $content) {
            file_put_contents($admin_path . 'models' . DS . $name, $content);
        }
        foreach (prepare_models_or_controllers($config, $models, array(), 'controller') as $name => $content) {
            file_put_contents($admin_path . 'controllers' . DS . $name, $content);
        }
        $default_view_files = prepare_default_view($config, array());
        $view_path = $admin_path . 'views' . DS . strtolower($config['identifier']);
        mkdir($view_path);
        mkdir($view_path . DS . 'tmpl');
        foreach ($default_view_files as $name => $content) {
            file_put_contents($view_path . DS . $name, $content);
        }
        foreach (prepare_views_for_backend($config, $models) as $name => $views) {
            $view_path = $admin_path . 'views' . DS . $name;
            mkdir($view_path);
            mkdir($view_path . DS . 'tmpl');
            foreach ($views as $name => $content) {
                file_put_contents($view_path . DS . $name, $content);
            }
        }
        $submenu = "    <submenu>\n";
        foreach ($models as $model => $attrs) {
            if ($attrs['sql_only']) {
                continue;
            }
            $submenu .= "      <menu link='option={$component}&amp;view={$model}&amp;layout=list'>{$model}</menu>\n";
        }
        $submenu .= "    </submenu>\n";
        $config['submenu'] = $submenu;
    }
    // generate empty language file for the backend
    file_put_contents($admin_path . $lang_path . $lang_file, '');
    // generate directory structure for the frontend
    mkdir($base_path . 'site');
    $site_path = $base_path . 'site' . DS;
    foreach (array('assets', 'controllers', 'helpers', 'language', 'models', 'views', $lang_path) as $dir) {
        mkdir($site_path . $dir);
        file_put_contents($site_path . $dir . DS . 'index.html', 'test');
    }
    // generate models, controllers and views for the frontend
    if ($models) {
        foreach (prepare_models_or_controllers($config, $models, $frontend, 'model', 'site') as $name => $content) {
            file_put_contents($site_path . 'models' . DS . $name, $content);
        }
        foreach (prepare_models_or_controllers($config, $models, $frontend, 'controller', 'site') as $name => $content) {
            file_put_contents($site_path . 'controllers' . DS . $name, $content);
        }
        $default_view_files = prepare_default_view($config, $frontend, 'site');
        $view_path = $site_path . 'views' . DS . strtolower($config['identifier']);
        mkdir($view_path);
        mkdir($view_path . DS . 'tmpl');
        foreach ($default_view_files as $name => $content) {
            file_put_contents($view_path . DS . $name, $content);
        }
        foreach (prepare_views_for_frontend($config, $models, $frontend) as $name => $views) {
            $view_path = $site_path . 'views' . DS . $name;
            mkdir($view_path);
            mkdir($view_path . DS . 'tmpl');
            foreach ($views as $name => $content) {
                file_put_contents($view_path . DS . $name, $content);
            }
        }
    }
    // generate empty language file for the frontend
    file_put_contents($site_path . $lang_path . $lang_file, '');
    // generate manifest file
    $template = file_get_contents('tmpl' . DS . 'manifest.xml');
    file_put_contents($base_path . 'manifest.xml', render($template, $config));
    // generate controllers
    $template = file_get_contents('tmpl' . DS . 'controller.php');
    $rendered_template = render($template, $config);
    foreach (array($admin_path, $site_path) as $path) {
        file_put_contents($path . 'controller.php', $rendered_template);
    }
    // generate entry points
    $template = file_get_contents('tmpl' . DS . 'entry_point.php');
    $config['include_tables'] = "JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');\n\n";
    file_put_contents($admin_path . $config['entry_point'], render($template, $config));
    $config['include_tables'] = '';
    file_put_contents($site_path . $config['entry_point'], render($template, $config));
    // create .tar.gz installer if it's on a unix-like OS
    if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
        @unlink("{$component}.tar.gz");
        system("tar -zcf {$component}.tar.gz {$component}");
        delete_dir($component);
    }
}
Exemple #2
0
/** * Enregistre les notes dans la base
 * 
 * @param array $donnees Les données à enregistrer
 * @return bool TRUE si les données ont été enregistrées
 * @see charge_message()
 * @see prepare_sql()
 */
function enregistre_notes($donnees)
{
    $tableau_notes = $_SESSION[PREFIXE]['tableau_notes'];
    // on recherche les notes maxi pour toutes les évaluations
    $elv_deja_note = array();
    foreach ($_SESSION[PREFIXE]["id_devoir"] as $id_devoir) {
        $sql_devoir = "SELECT note_sur, id_conteneur FROM cn_devoirs \n\t     WHERE id = '" . $id_devoir . "'";
        $query_devoir = mysql_query($sql_devoir);
        $eval = mysql_fetch_object($query_devoir);
        $notes_max[$id_devoir]['note_sur'] = $eval->note_sur;
        $notes_max[$id_devoir]['id_conteneur'] = $eval->id_conteneur;
        mysql_free_result($query_devoir);
    }
    unset($id_devoir);
    // On récupère les données passées en $_POST dans $tableau_notes
    while (list($key, $val) = each($donnees)) {
        if (mb_ereg("_note_", $key)) {
            $index = mb_strstr($key, "_note_", TRUE);
            $id_eval = mb_strcut(mb_strstr($key, "_note_", FALSE), 6);
            // $comment = "";
            if (is_numeric($val)) {
                if ($val > $notes_max[$id_eval]['note_sur']) {
                    charge_message("ERREUR : Un élève à une note en dehors du référentiel ! (" . $login . ")");
                    return FALSE;
                }
                $note = $val;
                $statut = "";
            } elseif (empty($val)) {
                $note = "";
                $statut = VIDE;
            } else {
                switch ($val) {
                    case "a":
                    case "A":
                    case "abs":
                    case "ABS":
                    case ABSENT:
                        $note = "";
                        $statut = ABSENT;
                        break;
                    case "d":
                    case "D":
                    case "disp":
                    case "Disp":
                    case DISPENSE:
                        $note = "";
                        $statut = DISPENSE;
                        break;
                    case "-":
                    case "n":
                    case "N":
                    case "nn":
                    case "NN":
                    case "nN":
                    case "Nn":
                    case NON_NOTE:
                        $note = "";
                        $statut = NON_NOTE;
                        break;
                    case "":
                    default:
                        $note = "";
                        $statut = VIDE;
                }
            }
            // On met à jour $tableau_notes
            $tableau_notes[$index]['notes'][$id_eval]['note_devoir'] = $note;
            $tableau_notes[$index]['notes'][$id_eval]['statut'] = $statut;
        } elseif (mb_ereg("_app_", $key) && $val != '') {
            $index = mb_strstr($key, "_app_", TRUE);
            $id_eval = mb_strcut(mb_strstr($key, "_app_", FALSE), 5);
            $val = prepare_sql($val);
            $tableau_notes[$index]['notes'][$id_eval]['comment_devoir'] = $val;
        }
    }
    // on enregistre $tableau_notes dans la base
    foreach ($tableau_notes as $ligne_tableau) {
        foreach ($_SESSION[PREFIXE]["id_devoir"] as $id_eval) {
            if ($ligne_tableau['notes'][$id_eval]['new_note']) {
                // on crée une entrée
                $sql_table = "INSERT INTO cn_notes_devoirs (login, id_devoir, note, comment, statut)\n                    VALUES ('" . $ligne_tableau['login'] . "',\n                      '" . $ligne_tableau['notes'][$id_eval]['id_devoir'] . "',\n                      '" . $ligne_tableau['notes'][$id_eval]['note_devoir'] . "',\n                      '" . $ligne_tableau['notes'][$id_eval]['comment_devoir'] . "',\n                      '" . $ligne_tableau['notes'][$id_eval]['statut'] . "')";
            } else {
                // on met à jour
                $sql_table = "UPDATE cn_notes_devoirs\n                  SET note = '" . $ligne_tableau['notes'][$id_eval]['note_devoir'] . "',\n                    statut= '" . $ligne_tableau['notes'][$id_eval]['statut'] . "',\n                    comment = '" . $ligne_tableau['notes'][$id_eval]['comment_devoir'] . "'\n                    WHERE login = '******'login'] . "'\n                    AND id_devoir = '" . $ligne_tableau['notes'][$id_eval]['id_devoir'] . "'";
            }
            $query_table = mysql_query($sql_table);
            if (!$query_table) {
                charge_message("ERREUR : Erreur lors de l'enregistrement dans la base ! (" . $index . ")");
                charge_message("<strong>Vérifiez vos données puis enregistrez à nouveau</strong>");
                return FALSE;
            }
            // on met à jour les moyennes de conteneurs
            $_current_group["eleves"][$_SESSION[PREFIXE]['periode_num']]["list"][] = $ligne_tableau['login'];
            $arret = 'no';
            $sql_conteneur = "SELECT id_conteneur FROM cn_devoirs WHERE id = '" . $ligne_tableau['notes'][$id_eval]['id_devoir'] . "'";
            $query_conteneur = mysql_query($sql_conteneur);
            if (!$query_conteneur) {
                charge_message("ERREUR : Echec de la mise à jour des conteneurs");
                mysql_free_result($query_conteneur);
                return FALSE;
            }
            $conteneur = mysql_fetch_object($query_conteneur);
            mysql_free_result($query_conteneur);
            mise_a_jour_moyennes_conteneurs($_current_group, $_SESSION[PREFIXE]['periode_num'], $_SESSION[PREFIXE]['id_racine'], $conteneur->id_conteneur, $arret);
        }
        unset($id_eval);
    }
    unset($ligne_tableau);
    // Si on modifie un devoir alors que des notes ont été reportées sur le bulletin, il faut penser à mettre à jour la recopie vers le bulletin.
    $sql = "SELECT 1=1 FROM matieres_notes \n            WHERE periode='" . $_SESSION[PREFIXE]['periode_num'] . "'\n              AND id_groupe='" . $_SESSION[PREFIXE]['id_groupe_session'] . "';";
    $test_bulletin = mysql_query($sql);
    if (mysql_num_rows($test_bulletin) > 0) {
        charge_message("ATTENTION: Des notes sont présentes sur le bulletin.<br />Si vous avez modifié ou ajouté des notes, pensez à mettre à jour la recopie vers le bulletin.");
    }
    mysql_free_result($test_bulletin);
    return TRUE;
}