/** * 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}&view={$model}&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); } }
/** * 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; }