dataset/seed/piwigo/manual/image/postinstall/piwigo.patch
2022-07-01 22:10:33 +02:00

288 lines
8.6 KiB
Diff

--- piwigo/admin/include/functions_install.inc.php
+++ piwigo/admin/include/functions_install.inc.php
@@ -21,6 +21,7 @@
* @param string $replaced
* @param string $replacing
*/
+
function execute_sqlfile($filepath, $replaced, $replacing, $dblayer)
{
$sql_lines = file($filepath);
@@ -91,17 +92,15 @@ function activate_core_plugins()
}
/**
- * Connect to database during installation. Uses $_POST.
+ * Connect to database during installation.
*
- * @param array &$infos - populated with infos
* @param array &$errors - populated with errors
*/
-function install_db_connect(&$infos, &$errors)
+function install_db_connect($dbhost, $dbuser, $dbpasswd, $dbname, &$errors)
{
try
{
- pwg_db_connect($_POST['dbhost'], $_POST['dbuser'],
- $_POST['dbpasswd'], $_POST['dbname']);
+ pwg_db_connect($dbhost, $dbuser, $dbpasswd, $dbname);
pwg_db_check_version();
}
catch (Exception $e)
@@ -110,4 +109,101 @@ function install_db_connect(&$infos, &$errors)
}
}
-?>
\ No newline at end of file
+/**
+ * Create and initialize database
+ *
+ * @param object languages - languages informations
+ * @param string language - default language
+ * @param string prefixeTable - prefix of database names
+ */
+function initialize_db($languages, $language, $prefixeTable, &$errors=[])
+{
+ include_once(PHPWG_ROOT_PATH.PWG_LOCAL_DIR .'config/database.inc.php');
+ $result = pwg_query("SHOW TABLES LIKE '${prefixeTable}activity';");
+ if(pwg_db_num_rows($result))
+ {
+ $errors[] = l10n('The database is already imported');
+ return;
+ }
+ // tables creation, based on piwigo_structure.sql
+ execute_sqlfile(
+ PHPWG_ROOT_PATH.'install/piwigo_structure-mysql.sql',
+ DEFAULT_PREFIX_TABLE,
+ $prefixeTable,
+ 'mysql'
+ );
+ // We fill the tables with basic informations
+ execute_sqlfile(
+ PHPWG_ROOT_PATH.'install/config.sql',
+ DEFAULT_PREFIX_TABLE,
+ $prefixeTable,
+ 'mysql'
+ );
+
+ $query = '
+INSERT INTO '.$prefixeTable.'config (param,value,comment)
+ VALUES (\'secret_key\',md5('.pwg_db_cast_to_text(DB_RANDOM_FUNCTION.'()').'),
+ \'a secret key specific to the gallery for internal use\');';
+ pwg_query($query);
+
+ conf_update_param('piwigo_db_version', get_branch_from_version(PHPWG_VERSION));
+ conf_update_param('gallery_title', pwg_db_real_escape_string(l10n('Just another Piwigo gallery')));
+
+ conf_update_param(
+ 'page_banner',
+ '<h1>%gallery_title%</h1>'."\n\n<p>".pwg_db_real_escape_string(l10n('Welcome to my photo gallery')).'</p>'
+ );
+
+ // fill languages table, only activate the current language
+ $languages->perform_action('activate', $language);
+
+ // fill $conf global array
+ load_conf_from_db();
+
+ // PWG_CHARSET is required for building the fs_themes array in the
+ // themes class
+ if (!defined('PWG_CHARSET'))
+ {
+ define('PWG_CHARSET', 'utf-8');
+ }
+ activate_core_themes();
+ activate_core_plugins();
+
+ $insert = array(
+ 'id' => 1,
+ 'galleries_url' => PHPWG_ROOT_PATH.'galleries/',
+ );
+ mass_inserts(SITES_TABLE, array_keys($insert), array($insert));
+
+}
+
+/**
+ * Add first admin in database
+ *
+ * @param string admin_name - admin name
+ * @param string admin_pass1 - admin password
+ * @param string admin_main - admin email
+ * @param string admin_language - language of admin
+ */
+function add_admin($admin_name, $admin_pass1, $admin_mail, $language)
+{
+ // webmaster admin user
+ $inserts = array(
+ array(
+ 'id' => 1,
+ 'username' => $admin_name,
+ 'password' => md5($admin_pass1),
+ 'mail_address' => $admin_mail,
+ ),
+ array(
+ 'id' => 2,
+ 'username' => 'guest',
+ ),
+ );
+ mass_inserts(USERS_TABLE, array_keys($inserts[0]), $inserts);
+
+ create_user_infos(array(1,2), array('language' => $language));
+
+}
+
+?>
--- piwigo/admin/include/functions_upgrade.php
+++ piwigo/admin/include/functions_upgrade.php
@@ -319,4 +319,30 @@ function upgrade_db_connect()
my_error(l10n($e->getMessage()), true);
}
}
+
+/**
+ * Mark all upgrades as done.
+ * Available upgrades must be ignored after a fresh installation. To
+ * make PWG avoid upgrading, we must tell it upgrades have already been
+ * made.
+ */
+function mark_all_upgrades_as_done() {
+ list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
+ define('CURRENT_DATE', $dbnow);
+ $datas = array();
+ foreach (get_available_upgrade_ids() as $upgrade_id)
+ {
+ $datas[] = array(
+ 'id' => $upgrade_id,
+ 'applied' => CURRENT_DATE,
+ 'description' => 'upgrade included in installation',
+ );
+ }
+ mass_inserts(
+ UPGRADE_TABLE,
+ array_keys($datas[0]),
+ $datas
+ );
+}
+
?>
--- piwigo/install.php
+++ piwigo/install.php
@@ -166,6 +166,7 @@ if (@file_exists($config_file))
include(PHPWG_ROOT_PATH . 'include/constants.php');
include(PHPWG_ROOT_PATH . 'admin/include/functions.php');
+include(PHPWG_ROOT_PATH . 'admin/include/functions_upgrade.php');
include(PHPWG_ROOT_PATH . 'admin/include/languages.class.php');
$languages = new languages('utf-8');
@@ -253,11 +254,10 @@ if (!isset($step))
//---------------------------------------------------------------- form analyze
include(PHPWG_ROOT_PATH .'include/dblayer/functions_'.$dblayer.'.inc.php');
include(PHPWG_ROOT_PATH . 'admin/include/functions_install.inc.php');
-include(PHPWG_ROOT_PATH . 'admin/include/functions_upgrade.php');
if (isset($_POST['install']))
{
- install_db_connect($infos, $errors);
+ install_db_connect($dbhost, $dbuser, $dbpasswd, $dbname, $errors);
pwg_db_check_charset();
$webmaster = trim(preg_replace('/\s{2,}/', ' ', $admin_name));
@@ -328,93 +328,9 @@ define(\'DB_COLLATE\', \'\');
@fputs($fp, $file_content, strlen($file_content));
@fclose($fp);
- // tables creation, based on piwigo_structure.sql
- execute_sqlfile(
- PHPWG_ROOT_PATH.'install/piwigo_structure-mysql.sql',
- DEFAULT_PREFIX_TABLE,
- $prefixeTable,
- 'mysql'
- );
- // We fill the tables with basic informations
- execute_sqlfile(
- PHPWG_ROOT_PATH.'install/config.sql',
- DEFAULT_PREFIX_TABLE,
- $prefixeTable,
- 'mysql'
- );
-
- $query = '
-INSERT INTO '.$prefixeTable.'config (param,value,comment)
- VALUES (\'secret_key\',md5('.pwg_db_cast_to_text(DB_RANDOM_FUNCTION.'()').'),
- \'a secret key specific to the gallery for internal use\');';
- pwg_query($query);
-
- conf_update_param('piwigo_db_version', get_branch_from_version(PHPWG_VERSION));
- conf_update_param('gallery_title', pwg_db_real_escape_string(l10n('Just another Piwigo gallery')));
-
- conf_update_param(
- 'page_banner',
- '<h1>%gallery_title%</h1>'."\n\n<p>".pwg_db_real_escape_string(l10n('Welcome to my photo gallery')).'</p>'
- );
-
- // fill languages table, only activate the current language
- $languages->perform_action('activate', $language);
-
- // fill $conf global array
- load_conf_from_db();
-
- // PWG_CHARSET is required for building the fs_themes array in the
- // themes class
- if (!defined('PWG_CHARSET'))
- {
- define('PWG_CHARSET', 'utf-8');
- }
- activate_core_themes();
- activate_core_plugins();
-
- $insert = array(
- 'id' => 1,
- 'galleries_url' => PHPWG_ROOT_PATH.'galleries/',
- );
- mass_inserts(SITES_TABLE, array_keys($insert), array($insert));
-
- // webmaster admin user
- $inserts = array(
- array(
- 'id' => 1,
- 'username' => $admin_name,
- 'password' => md5($admin_pass1),
- 'mail_address' => $admin_mail,
- ),
- array(
- 'id' => 2,
- 'username' => 'guest',
- ),
- );
- mass_inserts(USERS_TABLE, array_keys($inserts[0]), $inserts);
-
- create_user_infos(array(1,2), array('language' => $language));
-
- // Available upgrades must be ignored after a fresh installation. To
- // make PWG avoid upgrading, we must tell it upgrades have already been
- // made.
- list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();'));
- define('CURRENT_DATE', $dbnow);
- $datas = array();
- foreach (get_available_upgrade_ids() as $upgrade_id)
- {
- $datas[] = array(
- 'id' => $upgrade_id,
- 'applied' => CURRENT_DATE,
- 'description' => 'upgrade included in installation',
- );
- }
- mass_inserts(
- UPGRADE_TABLE,
- array_keys($datas[0]),
- $datas
- );
-
+ initialize_db($languages, $language, $prefixeTable);
+ add_admin($admin_name, $admin_pass1, $admin_mail, $language);
+ mark_all_upgrades_as_done();
if ($is_newsletter_subscribe)
{
fetchRemote(