Ejemplo n.º 1
0
 public function install()
 {
     global $db, $n;
     if (!is_dir($this->_resource . '/' . $this->_pack_name)) {
         return false;
     }
     if (!file_exists($this->_resource . '/' . $this->_pack_name . '/setup.php')) {
         return false;
     }
     $error = 0;
     if ($this->_noaction == true) {
         $this->_debug .= '<p>Die Installation wird nur <b>simuliert</b> dabei werden Fehler ausgegeben, Datenbank&auml;nderungen werden allerdings <b>nicht</b> getestet!</p>';
     }
     $setup = parse_ini_file($this->_resource . '/' . $this->_pack_name . '/setup.php');
     if (!isset($setup['modul_name']) || !preg_match('!^[0-9a-z_\\-]*$!', $setup['modul_name'])) {
         $this->_debug .= 'Der Modulname ist nicht valide, oder existiert nicht! Er darf nur aus kleien Buchstabe (a-z), Zahlen, Minus "-" und Unterstrich "_" bestehen. Die Installation kann nicht vortgesetzt werden!';
         $error++;
     }
     if (!isset($setup['modul_version']) || !preg_match('!^[0-9]*\\.[0-9]*\\.[0-9]*$!', $setup['modul_version'])) {
         $this->_debug .= 'Die Versionsangabe des Moduls ist nicht valide, oder existiert nicht! Sie darf nur aus Zahlen, getrennt durch Punkte bestehen, diese Zahlen müssen in 3 Gruppen unterteilt sein (Beispiel: 0.3.11)';
         $error++;
     }
     if ($setup['modul_acp'] == 1) {
         $prefx = 'acp/';
     } else {
         $prefx = '';
     }
     $backup = date('d.m.Y_H_i_s', time());
     $backup_done = false;
     $copyed = array();
     if (!$error && (isset($setup['move_core']) || $this->_ftp_connection->exists($prefx . 'modules/' . $setup['modul_name']) || $this->_ftp_connection->exists($prefx . 'images/standard/' . $setup['modul_name']) || $this->_ftp_connection->exists($prefx . 'themes/standard/' . $setup['modul_name']) || $this->_ftp_connection->exists($prefx . 'lang/' . $setup['modul_name']))) {
         $this->_debug .= '<p>Das Modul wurde installiert, es wird eine Sicherheitskopie unter /backup/' . $setup['modul_name'] . '-' . $backup . ' angelegt.</p>';
         if (!$this->_ftp_connection->exists('backup')) {
             $this->_ftp_connection->mk_dir('backup');
         }
         if (!$this->_ftp_connection->exists('backup')) {
             return false;
         }
         $this->_ftp_connection->mk_dir('backup/' . $setup['modul_name'] . '-' . $backup);
         if (!$this->_ftp_connection->exists('backup/' . $setup['modul_name'] . '-' . $backup)) {
             return false;
         }
         @$this->_ftp_connection->copy_req($prefx . 'modules/' . $setup['modul_name'], 'backup/' . $setup['modul_name'] . '-' . $backup . '/modules');
         @$this->_ftp_connection->copy_req($prefx . 'images/standard/' . $setup['modul_name'], 'backup/' . $setup['modul_name'] . '-' . $backup . '/images');
         @$this->_ftp_connection->copy_req($prefx . 'themes/standard/' . $setup['modul_name'], 'backup/' . $setup['modul_name'] . '-' . $backup . '/templates');
         @$this->_ftp_connection->copy_req($prefx . 'lang/' . $setup['modul_name'], 'backup/' . $setup['modul_name'] . '-' . $backup . '/languages');
         $backup_done = true;
     }
     if (!$error) {
         if (isset($setup['move_module_file'])) {
             if (is_array($setup['move_module_file'])) {
                 foreach ($setup['move_module_file'] as $mod) {
                     if ($this->_move_file('modules/' . $setup['modul_name'] . '/' . $mod, $prefx . 'modules/' . $setup['modul_name'] . '/' . $mod)) {
                         $this->_debug .= "\n" . '<p>Folgende Moduldatei ' . $mod . ' wurde in den Modulordner verschoben';
                         $copyed[$mod] = 'module';
                     } else {
                         $this->_debug .= "\n" . '<p>Folgende Moduldatei ' . $mod . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                         $error++;
                     }
                 }
             } else {
                 if ($this->_move_file('modules/' . $setup['modul_name'] . '/' . $setup['move_module_file'], 'modules/' . $setup['modul_name'] . '/' . $setup['move_module_file'])) {
                     $this->_debug .= "\n" . '<p>Folgende Moduldatei ' . $setup['move_module_file'] . ' wurde in den Modulordner verschoben';
                     $copyed[$setup['move_module_file']] = 'module';
                 } else {
                     $this->_debug .= "\n" . '<p>Folgende Moduldatei ' . $setup['move_module_file'] . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                     $error++;
                 }
             }
         }
         if (isset($setup['move_template_file'])) {
             if (is_array($setup['move_template_file'])) {
                 foreach ($setup['move_template_file'] as $mod) {
                     if ($this->_move_file('themes/standard/' . $setup['modul_name'] . '/' . $mod, $prefx . 'themes/standard/' . $setup['modul_name'] . '/' . $mod)) {
                         $this->_debug .= "\n" . '<p>Folgende Templatedatei ' . $mod . ' wurde in den Modulordner verschoben';
                         $copyed[$mod] = 'template';
                     } else {
                         $this->_debug .= "\n" . '<p>Folgende Templatedatei ' . $mod . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                         $error++;
                     }
                 }
             } else {
                 if ($this->_move_file('themes/standard/' . $setup['modul_name'] . '/' . $setup['move_template_file'], 'themes/standard/' . $setup['modul_name'] . '/' . $setup['move_module_file'])) {
                     $this->_debug .= "\n" . '<p>Folgende Templatedatei ' . $setup['move_template_file'] . ' wurde in den Modulordner verschoben';
                     $copyed[$setup['move_template_file']] = 'template';
                 } else {
                     $this->_debug .= "\n" . '<p>Folgende Templatedatei ' . $setup['move_template_file'] . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                     $error++;
                 }
             }
         }
         if (isset($setup['move_lang_file'])) {
             if (is_array($setup['move_lang_file'])) {
                 foreach ($setup['move_lang_file'] as $mod) {
                     if ($this->_move_file('lang/' . $setup['modul_name'] . '/' . $mod, $prefx . 'lang/' . $setup['modul_name'] . '/' . $mod)) {
                         $this->_debug .= "\n" . '<p>Folgende Sprachdatei ' . $mod . ' wurde in den Modulordner verschoben';
                         $copyed[$mod] = 'lang';
                     } else {
                         $this->_debug .= "\n" . '<p>Folgende Sprachdatei ' . $mod . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                         $error++;
                     }
                 }
             } else {
                 if ($this->_move_file('lang/' . $setup['modul_name'] . '/' . $setup['move_lang_file'], 'lang/' . $setup['modul_name'] . '/' . $setup['move_module_file'])) {
                     $this->_debug .= "\n" . '<p>Folgende Sprachdatei ' . $setup['move_lang_file'] . ' wurde in den Modulordner verschoben';
                     $copyed[$setup['move_lang_file']] = 'lang';
                 } else {
                     $this->_debug .= "\n" . '<p>Folgende Sprachdatei ' . $setup['move_lang_file'] . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                     $error++;
                 }
             }
         }
         if (isset($setup['move_image_file'])) {
             if (is_array($setup['move_image_file'])) {
                 foreach ($setup['move_image_file'] as $mod) {
                     if ($this->_move_file('images/standard/' . $setup['modul_name'] . '/' . $mod, $prefx . 'images/standard/' . $setup['modul_name'] . '/' . $mod)) {
                         $this->_debug .= "\n" . '<p>Folgende Bilddatei ' . $mod . ' wurde in den Modulordner verschoben';
                         $copyed[$mod] = 'image';
                     } else {
                         $this->_debug .= "\n" . '<p>Folgende Bilddatei ' . $mod . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                         $error++;
                     }
                 }
             } else {
                 if ($this->_move_file('images/standard/' . $setup['modul_name'] . '/' . $setup['move_image_file'], 'images/' . $setup['modul_name'] . '/' . $setup['move_module_file'])) {
                     $this->_debug .= "\n" . '<p>Folgende Bilddatei ' . $setup['move_image_file'] . ' wurde in den Modulordner verschoben';
                     $copyed[$setup['move_image_file']] = 'image';
                 } else {
                     $this->_debug .= "\n" . '<p>Folgende Bilddatei ' . $setup['move_image_file'] . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                     $error++;
                 }
             }
         }
         if (isset($setup['move_core'])) {
             $this->_debug .= '<p><b>Es werden Dateien des Core Systems ver&auml;ndert!</b></p>';
             if (is_array($setup['move_core'])) {
                 foreach ($setup['move_core'] as $mod) {
                     if ($this->_ftp_connection->exists($mod)) {
                         $this->_ftp_connection->mk_dir('backup/' . $setup['modul_name'] . '-' . $backup . '/core');
                         $mod_arr = explode('/', $mod);
                         $now = '';
                         foreach ($mod_arr as $i => $dir) {
                             if ($i >= count($mod_arr) - 1) {
                                 continue;
                             }
                             $now .= '/' . $dir;
                             $this->_ftp_connection->mk_dir('backup/' . $setup['modul_name'] . '-' . $backup . '/core' . $now);
                         }
                         $this->_ftp_connection->mv($mod, 'backup/' . $setup['modul_name'] . '-' . $backup . '/core/' . $mod);
                     }
                     if ($this->_ftp_connection->mv('acp/tmp/' . $this->_pack_name . '/' . $mod, $mod)) {
                         $this->_debug .= "\n" . '<p>Folgende Core-Datei ' . $mod . ' wurde in den Modulordner verschoben';
                         $copyed[$mod] = 'core';
                     } else {
                         $this->_debug .= "\n" . '<p>Folgende Core-Datei ' . $mod . ' wurde wurde aufgrund eines Fehlers nicht in den Modulordner verschoben, &uuml;berpr&uuml;fen sie die existenz der Datei.</p>';
                         $error++;
                         $copyed[$mod] = 'core';
                     }
                 }
             }
         }
         if (isset($setup['db_update']) && !$error) {
             $this->_debug .= "\n" . '<p>Folgende Datenbankupdates wurden ausgef&uuml;hrt:</p>';
             $ver_q = $db->query("SELECT `current_version` FROM `cc" . $n . "_modul_admin` WHERE `modul_name` = '" . $setup['modul_name'] . "'");
             if ($db->num_rows($ver_q) == 0) {
                 $ver = '0.0.0';
             } else {
                 $ver_arr = $db->fetch_array($ver_q);
                 $ver = $ver_arr['current_version'];
             }
             if (is_array($setup['db_update'])) {
                 //Aktuelle Versionsnummer laden
                 foreach ($setup['db_update'] as $mod) {
                     if (compare_versions_sinus($ver, preg_replace("!^([0-9]\\.[0-9]\\.[0-9]);.*!", "\$1", $mod)) != 1) {
                         continue;
                     }
                     $mod = preg_replace("!^([0-9]\\.[0-9]\\.[0-9]);!", "", $mod);
                     if ($this->_noaction) {
                         $this->_debug .= "\n" . '<p>' . $mod . '</p>';
                     } else {
                         if (mysql_query($mod)) {
                             $this->_debug .= "\n" . '<p>' . $mod . '</p>';
                         } else {
                             $this->_debug .= "\n" . '<p>Es ist ein <b>Fehler</b> bei folgendem Query "' . $mod . '" aufgetreten, Mysql meldet: "' . mysql_error() . '"</p>';
                             $error++;
                         }
                     }
                 }
             } else {
                 if (compare_versions_sinus($ver, preg_replace("!^([0-9]\\.[0-9]\\.[0-9]);.*!", "\$1", $setup['db_update'])) != 1) {
                     continue;
                 }
                 $setup['db_update'] = preg_replace("!^([0-9]\\.[0-9]\\.[0-9]);!", "", $setup['db_update']);
                 if ($this->_noaction) {
                     $this->_debug .= "\n" . '<p>' . $setup['db_update'] . '</p>';
                 } else {
                     if ($db->query($setup['db_update'])) {
                         $this->_debug .= "\n" . '<p>' . $setup['db_update'] . '</p>';
                     } else {
                         $this->_debug .= "\n" . '<p>Es ist ein <b>Fehler</b> bei folgendem Query "' . $setup['db_update'] . '" aufgetreten, Mysql meldet: "' . $db->error() . '"</p>';
                         $error++;
                     }
                 }
             }
         } else {
             if ($error) {
                 $this->_debug .= '<p>Da bereits Fehler aufgetreten sind, wird kein MySQl Befehl ausgef&uuml;hrt!</p>';
             }
         }
         if ($error) {
             $this->_debug .= '<p>Da bereits Fehler aufgetreten sind, wird Das Modul nicht in der Datenbank gespeichert!</p>';
         } else {
             if ($this->_noaction) {
                 $this->_debug .= '<p>Registriere das Spiel in der Datenbank.</p>';
             } else {
                 $this->_debug .= '<p>Registriere das Spiel in der Datenbank.</p>';
                 if ($prefx == 'acp/') {
                     $is_installed = $db->query("SELECT `modul_type` FROM `cc" . $n . "_modul_admin` WHERE `modul_name` = '" . $setup['modul_name'] . "'");
                 } else {
                     $is_installed = $db->query("SELECT `modul_type` FROM `cc" . $n . "_modul_admin` WHERE `modul_type` = '" . $setup['modul_game_type'] . "'");
                 }
                 if ($db->num_rows($is_installed) == 0) {
                     $db->query("INSERT INTO `cc" . $n . "_modul_admin` (`modul_name`, `modul_description`, `disable_allowed`, `activated`, `startfile`, `current_version`, `acp_modul`, `show_error_msg`, `modul_type`, `new_upd_available`, `perm_lvl`) VALUES ('" . $setup['modul_name'] . "', '" . $setup['modul_description'] . "', '" . $setup['modul_disable_allowed'] . "', '0', '" . $setup['modul_filename'] . "', '" . $setup['modul_version'] . "', '" . $setup['modul_acp'] . "', '" . $setup['modul_show_error_msg'] . "', '" . $setup['modul_game_type'] . "', '0', '" . $setup['modul_permission_level'] . "')");
                 } else {
                     if ($prefx == 'acp/') {
                         $done = $db->query("UPDATE `cc" . $n . "_modul_admin` SET `modul_description` = '" . $setup['modul_description'] . "', `current_version` = '" . $setup['modul_version'] . "' WHERE `modul_name` = '" . $setup['modul_name'] . "'");
                     } else {
                         $done = $db->query("UPDATE `cc" . $n . "_modul_admin` SET `modul_description` = '" . $setup['modul_description'] . "', `current_version` = '" . $setup['modul_version'] . "' WHERE `modul_type` = '" . $setup['modul_game_type'] . "'");
                     }
                 }
             }
         }
     }
     if ($error > 0 || $this->_noaction) {
         if ($error > 0) {
             $this->_debug .= '<p><b>Es sind <u>' . $error . '</u> Fehler aufgetreten! Bitte kontaktieren sie den Entwickler des Moduls "' . $setup['modul_autor'] . '" per E-Mail an "<a href="mailto:' . $setup['modul_autor_mail'] . '">' . $setup['modul_autor_mail'] . '</a>" falls sie die Dateien nicht manipuliert haben.</b></p>';
         }
         if ($backup_done) {
             $this->_debug .= '<p>Da ein Backup der alten Daten erstellt wurde, wird dieses nun zur&uuml;ckgespielt.</p>';
             foreach ($copyed as $file => $type) {
                 switch ($type) {
                     case 'module':
                         $this->_ftp_connection->mv($prefx . 'modules/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/modules/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'image':
                         $this->_ftp_connection->mv($prefx . 'images/standard/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/images/standard/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'lang':
                         $this->_ftp_connection->mv($prefx . 'lang/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/lang/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'template':
                         $this->_ftp_connection->mv($prefx . 'themes/standard/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/themes/standard/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'core':
                         $this->_ftp_connection->mv($file, 'acp/tmp/' . $this->_pack_name . '/' . $file);
                         $this->_ftp_connection->mv('backup/' . $setup['modul_name'] . '-' . $backup . '/core/' . $file, $file);
                         break;
                 }
             }
             @$this->_ftp_connection->req_remove($prefx . 'themes/standard/' . $setup['modul_name']);
             @$this->_ftp_connection->req_remove($prefx . 'lang/' . $setup['modul_name']);
             @$this->_ftp_connection->req_remove($prefx . 'images/standard/' . $setup['modul_name']);
             @$this->_ftp_connection->req_remove($prefx . 'modules/' . $setup['modul_name']);
             $this->_ftp_connection->mv('backup/' . $setup['modul_name'] . '-' . $backup . '/modules', $prefx . 'modules/' . $setup['modul_name']);
             $this->_ftp_connection->mv('backup/' . $setup['modul_name'] . '-' . $backup . '/images', $prefx . 'images/standard/' . $setup['modul_name']);
             $this->_ftp_connection->mv('backup/' . $setup['modul_name'] . '-' . $backup . '/templates', $prefx . 'themes/standard/' . $setup['modul_name']);
             $this->_ftp_connection->mv('backup/' . $setup['modul_name'] . '-' . $backup . '/languages', $prefx . 'lang/' . $setup['modul_name']);
             $this->_ftp_connection->rm_dir('backup/' . $setup['modul_name'] . '-' . $backup);
         } else {
             $this->_debug .= '<p>Da kein Backup erstellt wurde, werden eventuell geschribene Daten zur&uuml;ckgesetzt, dazu z&auml;hlt nicht die Datenbank!</p>';
             foreach ($copyed as $file => $type) {
                 switch ($type) {
                     case 'module':
                         $this->_ftp_connection->mv($prefx . 'modules/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/modules/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'image':
                         $this->_ftp_connection->mv($prefx . 'images/standard/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/images/standard/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'lang':
                         $this->_ftp_connection->mv($prefx . 'lang/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/lang/' . $setup['modul_name'] . '/' . $file);
                         break;
                     case 'template':
                         $this->_ftp_connection->mv($prefx . 'themes/standard/' . $setup['modul_name'] . '/' . $file, 'acp/tmp/' . $this->_pack_name . '/themes/standard/' . $setup['modul_name'] . '/' . $file);
                         break;
                 }
             }
             @$this->_ftp_connection->rm_dir($prefx . 'themes/standard/' . $setup['modul_name']);
             @$this->_ftp_connection->rm_dir($prefx . 'lang/' . $setup['modul_name']);
             @$this->_ftp_connection->rm_dir($prefx . 'images/standard/' . $setup['modul_name']);
             @$this->_ftp_connection->rm_dir($prefx . 'modules/' . $setup['modul_name']);
         }
         return false;
     }
     if (!$error) {
         $this->_debug .= '<p>Das Tempor&auml;re Paket wird gel&ouml;scht.</p>';
         @$this->_ftp_connection->req_remove('acp/tmp/' . $this->_pack_name);
     }
 }
Ejemplo n.º 2
0
    $action = "main";
}
if ($action == "make_new") {
    $the_id = intval($_GET['new_id']);
    $erlaubt = intval(ini_get('allow_url_fopen'));
    if ($erlaubt == 0) {
        echo "error 0x2";
        exit;
    }
    $result = $db->query("SELECT modul_name,current_version FROM cc" . $n . "_modul_admin where modul_admin_id ='" . $the_id . "'");
    $row = $db->fetch_array($result);
    $module_name = trim($row['modul_name']);
    $curent_version = trim($row['current_version']);
    $in = "http://update.freebg.de/updinfo.php?action=v&m=" . $module_name . "&n=" . LITO_ROOT_PATH_URL;
    $version = file_get_contents($in);
    $version_check = compare_versions_sinus($curent_version, $version);
    $img = "";
    if ($version_check == 1) {
        $db->unbuffered_query("UPDATE cc" . $n . "_modul_admin SET new_upd_available ='1'  WHERE modul_name ='" . $module_name . "'");
        $upd_img = "<img src=\"./../../images/standard/acp_modulmgr/info.png\">";
        $upd_img = "<a href=\"datei.html\" onclick=\"fenster('http://update.freebg.de/updinfo.php?action=info&uname={$module_name}');return false;\"><img src=\"./../../images/standard/acp_modulmgr/info.png\" alt=\"update Information\" title=\"Update Information\" width=\"20\" height=\"20\" border=\"0\">";
        $img = "<a href=\"?action=remote_update&mod=" . $module_name . "\"><img src=\"./../../images/standard/acp_modulmgr/upd_ok.png\" border=\"0\"></a>" . $upd_img;
    } elseif ($version_check == 0) {
        $img = "<img src=\"./../../images/standard/acp_modulmgr/stop.png\">";
    }
    $out = "{$version}.{$img}";
    echo $out;
    exit;
    for ($i = 0; $i < 20; $i++) {
        $out = "bearbeite update " . $i . "<br>";
        $all .= $out;