4images Forum & Community

4images Modifications / Modifikationen => Mods & Plugins (Releases & Support) => Topic started by: Rembrandt on January 25, 2012, 02:33:01 PM

Title: [Mod] Automatic Database Backup
Post by: Rembrandt on January 25, 2012, 02:33:01 PM
Hi!

The idea com from here: http://www.4homepages.de/forum/index.php?topic=18747.msg160485#msg160485

Update: Step 6.) added...

This is my version,features:
 - in the ACP, you can set the time in hours in which an automatic database backup should be made...
 - if users with the User-ID login, start a automatic database backup...
 - send database-backup as e-Mail.
 - the automatic database-backup zip files are stored in a separate sub directory below database. "data/database/autobackup"
 - and non zip database-backup files are stored in data/database/
 - in "ACP"/"Database Backup" the automatically generated backups can be imported back into the database.
 
1.) copy the files from the Attachment,the folder structure according, in your galery.

2.) search in admin/settings.php:

show_form_footer($lang['save_changes'], "", 2);
 
insert above:

show_table_separator($setting_group["db_backup"], 2, "setting_group_db_backup");
show_setting_row("db_backup_time");
show_setting_row("db_backup_last_backup");
show_setting_row("db_backup_event");
show_setting_row("db_backup_email", "radio");


3.) search in lang/YourLang/admin.php "?>" and insert above:
(deutsch)

$setting_group["db_backup"]="Datenbank Backup";
$setting['db_backup_time'] = "Zeit in Stunden in den ein Automatisches Datenbank Backup gemacht werden soll ?";
$setting['db_backup_last_backup'] = "Letztes Automatisches Backup am:";
$setting['db_backup_event'] = "Automatisches DB-Backup soll gestartet werden wenn sich User mit der folgenden User-ID einloggen :<br><span class=\"smalltext\">Mehrere User-IDs mit einen ',' getrennt eingeben.</span>";
$setting['db_backup_email'] = "Letztes DB-Backup als eMail versenden ?";

(english)

$setting_group["db_backup"]="Database Backup";
$setting['db_backup_time'] = "Time in hours in which an automatic database backup should be made ?";
$setting['db_backup_last_backup'] = "Last automatic database backup :";
$setting['db_backup_event'] = "Automatic database backup start, if users with the following User-ID login :<br><span class=\"smalltext\">Multiple User-IDs must be separated by commas.</span>";
$setting['db_backup_email'] = "Send last automatic database backup as eMail ?";

3.1) search in lang/YourLang/main.php "?>" and insert above:
(deutsch)

$lang['db_backup_subject'] = "Automatisches Datenbank Backup";
$lang['db_backup_header'] = "Automatisches Datenbank Backup von ";
$lang['db_backup_file'] = "Dateiname:";
$lang['db_backup_done'] = "Automatisches Datenbank-Backup erfolgreich durchgeführt !";

(english)

$lang['db_backup_done'] = "Automatic database backup completed successfully !";
$lang['db_backup_file'] = "File Name:";
$lang['db_backup_subject'] = "Automatic Database-Backup";
$lang['db_backup_header'] = "Automatic Database-Backup from ";


4.) search in includes/functions.php "?>" and insert above:

function makebackup($current_time){
 global $site_db, $lang, $config, $db_name, $site_mailtemplate;
  $path = ROOT_PATH.DATABASE_DIR."/autobackup";
  if(!is_dir($path)){
    mkdir($path,0777);
    chmod($path,0777);
  }
  
  include(ROOT_PATH.'includes/db_utils.php');
    $db_tables = array(
      CATEGORIES_TABLE,
      COMMENTS_TABLE,
      GROUP_ACCESS_TABLE,
      GROUP_MATCH_TABLE,
      GROUPS_TABLE,
      IMAGES_TABLE,
      IMAGES_TEMP_TABLE,
      LIGHTBOXES_TABLE,
      POSTCARDS_TABLE,
      SESSIONS_TABLE,
      SESSIONVARS_TABLE,
      SETTINGS_TABLE,
      USERS_TABLE
  );
   $tables_info = array();
  $crlf = (get_user_os() == "WIN") ? "\r\n" : ((get_user_os() == "MAC") ? "\r" : "\n");

  $tables_info = array();
  $db = (get_mysql_version() >= 32306)  ? "`$db_name`" : $db_name;
  $result = $site_db->query("SHOW TABLE STATUS FROM $db");
  if ($result) {
    while ($row = $site_db->fetch_array($result)) {
      $tables_info[$row['Name']] = ((isset($row['Type'])) ? $row['Type'] : $row['Engine']);
    }
    $site_db->free_result($result);
  }
  
  ob_start();
  @ob_implicit_flush(0);

  echo "#----------------------------------------------------------".$crlf;
  echo "# Database Backup for ".$config['site_name'].$crlf;
  echo "# ".date("Y-m-d H:i").$crlf;
  echo "#----------------------------------------------------------".$crlf;
  foreach ($db_tables as $table) {
    @set_time_limit(1200);
    echo $crlf."#".$crlf."# Structure for Table ".$table.$crlf."#".$crlf;
    get_table_def_mysql($table, $crlf);
    get_table_content_mysql($table, $crlf);
  }
 
  $contents = ob_get_contents();
  ob_end_clean();
  @umask(0111);
  if ($config['gz_compress'] == 1 && extension_loaded("zlib")) {
    $file_name = "autobackup".date("YmdHi",$current_time).".sql.gz";
    $fp = gzopen(ROOT_PATH.DATABASE_DIR."/".$file_name, "w9");
    $ok = gzwrite($fp, $contents);
    gzclose($fp);
  }
  else {
    $file_name = "autobackup".date("YmdHi",$current_time).".sql";
    $fp = fopen(ROOT_PATH.DATABASE_DIR."/".$file_name, "w");
    $ok = fwrite($fp, $contents);
    fclose($fp);
  }
  
  if ((is_dir($path)) && $ok) {
   /* include(ROOT_PATH."includes/zip.php");
    $zipfile = new zipfile();

    @set_time_limit(120);
    if (!$file_data = @file_get_contents(ROOT_PATH.DATABASE_DIR."/".$file_name)) {
      continue;
    }
    $zipfile->add_file($file_data, $file_name);
    unset($file_data);
    $zipfile->store($path."/".$file_name.".zip");
    $zipfile_name = $file_name.".zip"; */
    $backup_ok = 1;
  }
    
  if ($config['db_backup_email']){
    $config['upload_emails'] = str_replace(" ", "", $config['upload_emails']);
    $email_to = $config['site_email'].",".$config['upload_emails'];
    $email_subject = $lang['db_backup_subject'];
    $email_attachment_path = $path."/".$zipfile_name;
    $email_attachment_name = $zipfile_name;
    
    $site_mailtemplate->register_vars(array(
      "lang_db_backup_file" => $lang['db_backup_file'],
      "lang_date" => $lang['date'],
      "file_name" => $file_name,
      "subject" => $lang['db_backup_subject'],
      "lang_header" => $lang['db_backup_header'],
      "current_time" => format_date($config['date_format']." ".$config['time_format'], $current_time),
    ));
    unset($file_name);
    $email_template = "auto_backup_html";
    include(ROOT_PATH.'includes/email_bridge.php');
    $backup_ok = 1;
  }
  return $backup_ok;
}

function startbackup($current_time){
  global  $config,$site_template,$site_db;
  if(!$config['db_backup_last_backup']){
      $sql = "INSERT INTO ".SETTINGS_TABLE." (setting_value, setting_name)
              VALUES ('$current_time', 'db_backup_last_backup')";
  }  
  if(((strtotime($config['db_backup_last_backup']) + 60 * 60 * $config['db_backup_time'])) < ($current_time)){ // <
    $backup_time = format_date($config['date_format']." ".$config['time_format'], $current_time);
    $backup_ok = makebackup($current_time);
     if($backup_ok){
        $sql = "UPDATE ".SETTINGS_TABLE."
                SET setting_value = '$backup_time'
                WHERE setting_name = 'db_backup_last_backup'";
      }
      $result = $site_db->query($sql);
    }
  return $backup_ok;
}


5.) search in includes/page_header.php:

//-----------------------------------------------------
//--- User Box ----------------------------------------

insert above:

  if($config['db_backup_time'] > 0){
    $event_user_id = explode(",",$config['db_backup_event']);
    if (in_array($user_info['user_id'], $event_user_id)){
     $current_time = time();
     $backup_ok = startbackup($current_time);
     $msg = ($backup_ok) ? $lang['db_backup_done']:"";
    }
  }


6.) search in root/global.php:

define('ICON_PATH', ROOT_PATH.TEMPLATE_DIR."/".$config['template_dir']."/icons");

insert below:

define('EMAIL_PATH', ROOT_PATH."lang/".$config['language_dir']."/email");

6.1) search:

$site_template = new Template(TEMPLATE_PATH);

insert below:

$site_mailtemplate = new Template(EMAIL_PATH);


mfg Andi
Title: Re: [Mod] Automatic Database Backup
Post by: nobby on January 25, 2012, 02:38:02 PM
Hallo Andi,

wird das eventuell beim nächsten Release implementiert sein?

Trotzdem Danke!

nobby
Title: Re: [Mod] Automatic Database Backup
Post by: Rembrandt on January 25, 2012, 03:52:04 PM
.wird das eventuell beim nächsten Release implementiert sein?
.
kann ich dir leider nicht sagen, das liegt an @jan und @kai.
wenns nach mir ginge hätte ich sicher die hälfte all meiner Mods schon eingebaut.

mfg Andi
Title: Re: [Mod] Automatic Database Backup
Post by: ante226 on September 16, 2012, 06:50:53 PM
welche email benutzt das programm ???

und was kommt dort rein Letztes Automatisches Backup am:

wenn ich fragen darf


m-f-g
ante
Title: Re: [Mod] Automatic Database Backup
Post by: Rembrandt on September 17, 2012, 10:20:01 AM
Hi!
.....wenn ich fragen darf
darfst du :) nur verstehe ich deine frage nicht.
Hast du step 1.) nicht gelesen?

mfg Andi
Title: Re: [Mod] Automatic Database Backup
Post by: ante226 on September 17, 2012, 11:08:55 AM
hat sich erledigt die email die im ACP eingetragen ist würd benutzt
kann man auch sich das backup als anhang schicken lassen ???


mfg
ante
Title: Re: [Mod] Automatic Database Backup
Post by: Rembrandt on September 17, 2012, 01:42:32 PM
.....kann man auch sich das backup als anhang schicken lassen ???
....
die *.zip sind alle als anhang...
Title: Re: [Mod] Automatic Database Backup
Post by: kai on September 19, 2012, 08:22:00 AM
ah, sehr hilfreich!
Title: Re: [Mod] Automatic Database Backup
Post by: diva78 on November 25, 2013, 01:37:49 PM
Hey Rembrandt,
zunächst mal 1000 Dank für Deine Mods, bin immer wieder begeistert!!! Aber das hast du sicher auch schon 1000 Mal gelesen...
Ich nutze Deinen Auto-Backup-Mod nun schon eine ganze Weile und frage mich immer wieder, wer das Backup gerade angestoßen hat.
Hab auch schon an diversen Stellen probiert zu schrauben, bin aber noch nicht zum gewünschten Ergebnis gekommen. An welchen Stellen kann und muss ich den angemeldeten Usernamen mitgeben, damit der mir in der Email mit angezeigt wird?
Vielen Dank!
Beste Grüße
die diva
Title: Re: [Mod] Automatic Database Backup
Post by: Rembrandt on November 25, 2013, 07:22:00 PM
Hi!

Möchtest du dir die Änderungen wirklich antun?
Das Problem ist wenn das Datenbank Backup mehrere MB hat, wird es nicht mehr per eMail versendet (kommt auf den Provider wieviel MB per email versendet/empfangen werden können).
Noch einige MB mehr und es wird nicht mehr gezippt, dann kannst du es nur noch Lokal auf den Galerie Server speichern.

mfg Andi
Title: Re: [Mod] Automatic Database Backup
Post by: diva78 on November 26, 2013, 09:21:06 AM
Ja, eigentlich wollte ich das. Klingt aber, als sei das dann doch aufwendiger als ich dachte...