function import_gedcom_file($gedcom_id, $path, $filename)
{
    // Read the file in blocks of roughly 64K.  Ensure that each block
    // contains complete gedcom records.  This will ensure we don’t split
    // multi-byte characters, as well as simplifying the code to import
    // each block.
    $file_data = '';
    $fp = fopen($path, 'rb');
    WT_DB::exec("START TRANSACTION");
    WT_DB::prepare("DELETE FROM `##gedcom_chunk` WHERE gedcom_id=?")->execute(array($gedcom_id));
    while (!feof($fp)) {
        $file_data .= fread($fp, 65536);
        // There is no strrpos() function that searches for substrings :-(
        for ($pos = strlen($file_data) - 1; $pos > 0; --$pos) {
            if ($file_data[$pos] == '0' && ($file_data[$pos - 1] == "\n" || $file_data[$pos - 1] == "\r")) {
                // We’ve found the last record boundary in this chunk of data
                break;
            }
        }
        if ($pos) {
            WT_DB::prepare("INSERT INTO `##gedcom_chunk` (gedcom_id, chunk_data) VALUES (?, ?)")->execute(array($gedcom_id, substr($file_data, 0, $pos)));
            $file_data = substr($file_data, $pos);
        }
    }
    WT_DB::prepare("INSERT INTO `##gedcom_chunk` (gedcom_id, chunk_data) VALUES (?, ?)")->execute(array($gedcom_id, $file_data));
    set_gedcom_setting($gedcom_id, 'gedcom_filename', $filename);
    WT_DB::exec("COMMIT");
    fclose($fp);
}
Beispiel #2
0
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
if (!defined('WT_WEBTREES')) {
    header('HTTP/1.0 403 Forbidden');
    exit;
}
$settings = self::prepare("SELECT gedcom_id, setting_value FROM `##gedcom_setting` WHERE setting_name='SHOW_RELATIVES_EVENTS'")->fetchAssoc();
foreach ($settings as $gedcom_id => $setting) {
    // Delete old settings
    $setting = preg_replace('/_(BIRT|MARR|DEAT)_(COUS|MSIB|FSIB|GGCH|NEPH|GGPA)/', '', $setting);
    $setting = preg_replace('/_FAMC_(RESI_EMIG)/', '', $setting);
    // Rename settings
    $setting = preg_replace('/_MARR_(MOTH|FATH|FAMC)/', '_MARR_PARE', $setting);
    $setting = preg_replace('/_DEAT_(MOTH|FATH)/', '_DEAT_PARE', $setting);
    // Remove duplicates
    preg_match_all('/[_A-Z]+/', $setting, $match);
    // And save
    set_gedcom_setting($gedcom_id, 'SHOW_RELATIVES_EVENTS', implode(',', array_unique($match[0])));
}
// Update the version to indicate success
WT_Site::setPreference($schema_name, $next_version);
     $gedcom_privacy = "\${INDEX_DIRECTORY}" . $FILE . "_priv.php";
 }
 if (empty($gedcom_title)) {
     if (!empty($_POST["gedcom_title"])) {
         $gedcom_title = $_POST["gedcom_title"];
     } else {
         $gedcom_title = str_replace("#GEDCOMFILE#", $FILE, $pgv_lang["new_gedcom_title"]);
     }
 }
 // Create the gedcom if it doesn't already exist
 $ged_id = get_id_from_gedcom($FILE, true);
 set_gedcom_setting($ged_id, 'config', $gedcom_config);
 set_gedcom_setting($ged_id, 'privacy', $gedcom_privacy);
 set_gedcom_setting($ged_id, 'title', $gedcom_title);
 set_gedcom_setting($ged_id, 'path', $path . $GEDFILENAME);
 set_gedcom_setting($ged_id, 'pgv_ver', PGV_VERSION);
 // Check that add/remove common surnames are separated by [,;] blank
 $_POST["NEW_COMMON_NAMES_REMOVE"] = preg_replace("/[,;]\\b/", ", ", $_POST["NEW_COMMON_NAMES_REMOVE"]);
 $_POST["NEW_COMMON_NAMES_ADD"] = preg_replace("/[,;]\\b/", ", ", $_POST["NEW_COMMON_NAMES_ADD"]);
 $COMMON_NAMES_THRESHOLD = $_POST["NEW_COMMON_NAMES_THRESHOLD"];
 $COMMON_NAMES_ADD = $_POST["NEW_COMMON_NAMES_ADD"];
 $COMMON_NAMES_REMOVE = $_POST["NEW_COMMON_NAMES_REMOVE"];
 $boolarray = array();
 $boolarray["yes"] = "true";
 $boolarray["no"] = "false";
 $boolarray[false] = "false";
 $boolarray[true] = "true";
 $configtext = implode('', file("config_gedcom.php"));
 $_POST["NEW_MEDIA_DIRECTORY"] = preg_replace('/\\\\/', '/', $_POST["NEW_MEDIA_DIRECTORY"]);
 $ct = preg_match("'/\$'", $_POST["NEW_MEDIA_DIRECTORY"]);
 if ($ct == 0) {
Beispiel #4
0
}
// Calculate progress so far
$percent = 100 * ($row->import_offset / $row->import_total);
$status = WT_I18N::translate('Loading data from GEDCOM: %.1f%%', $percent);
echo '<div id="progressbar', $gedcom_id, '"><div style="position:absolute;">', $status, '</div></div>';
$controller->addInlineJavascript('jQuery("#progressbar' . $gedcom_id . '").progressbar({value: ' . round($percent, 1) . '});');
$first_time = $row->import_offset == 0;
// Run for one second.  This keeps the resource requirements low.
for ($end_time = microtime(true) + 1.0; microtime(true) < $end_time;) {
    $data = WT_DB::prepare("SELECT gedcom_chunk_id, REPLACE(chunk_data, '\r', '\n') AS chunk_data" . " FROM `##gedcom_chunk`" . " WHERE gedcom_id=? AND NOT imported" . " ORDER BY gedcom_chunk_id" . " LIMIT 1")->execute(array($gedcom_id))->fetchOneRow();
    // If we are at the start position, do some tidying up
    if ($first_time) {
        $keep_media = WT_Filter::getBool('keep_media' . $gedcom_id);
        // Delete any existing genealogical data
        empty_database($gedcom_id, $keep_media);
        set_gedcom_setting($gedcom_id, 'imported', false);
        // Remove any byte-order-mark
        WT_DB::prepare("UPDATE `##gedcom_chunk`" . " SET chunk_data=TRIM(LEADING ? FROM chunk_data)" . " WHERE gedcom_chunk_id=?")->execute(array(WT_UTF8_BOM, $data->gedcom_chunk_id));
        // Re-fetch the data, now that we have removed the BOM
        $data = WT_DB::prepare("SELECT gedcom_chunk_id, REPLACE(chunk_data, '\r', '\n') AS chunk_data" . " FROM `##gedcom_chunk`" . " WHERE gedcom_chunk_id=?")->execute(array($data->gedcom_chunk_id))->fetchOneRow();
        if (substr($data->chunk_data, 0, 6) != '0 HEAD') {
            WT_DB::exec("ROLLBACK");
            echo WT_I18N::translate('Invalid GEDCOM file - no header record found.');
            $controller->addInlineJavascript('jQuery("#actions' . $gedcom_id . '").toggle();');
            exit;
        }
        // What character set is this?  Need to convert it to UTF8
        if (preg_match('/\\n[ \\t]*1 CHAR(?:ACTER)? (.+)/', $data->chunk_data, $match)) {
            $charset = strtoupper($match[1]);
        } else {
            $charset = 'ASCII';
Beispiel #5
0
 public static function create($tree_name)
 {
     try {
         // Create a new tree
         WT_DB::prepare("INSERT INTO `##gedcom` (gedcom_name) VALUES (?)")->execute(array($tree_name));
         $tree_id = WT_DB::prepare("SELECT LAST_INSERT_ID()")->fetchOne();
     } catch (PDOException $ex) {
         // A tree with that name already exists?
         return;
     }
     // Update the list of trees - to include this new one
     self::$trees = null;
     // Module privacy
     WT_Module::setDefaultAccess($tree_id);
     // Gedcom and privacy settings
     set_gedcom_setting($tree_id, 'ADVANCED_NAME_FACTS', 'NICK,_AKA');
     set_gedcom_setting($tree_id, 'ADVANCED_PLAC_FACTS', '');
     set_gedcom_setting($tree_id, 'ALLOW_THEME_DROPDOWN', true);
     set_gedcom_setting($tree_id, 'CALENDAR_FORMAT', 'gregorian');
     set_gedcom_setting($tree_id, 'CHART_BOX_TAGS', '');
     set_gedcom_setting($tree_id, 'COMMON_NAMES_ADD', '');
     set_gedcom_setting($tree_id, 'COMMON_NAMES_REMOVE', '');
     set_gedcom_setting($tree_id, 'COMMON_NAMES_THRESHOLD', '40');
     set_gedcom_setting($tree_id, 'CONTACT_USER_ID', WT_USER_ID);
     set_gedcom_setting($tree_id, 'DEFAULT_PEDIGREE_GENERATIONS', '4');
     set_gedcom_setting($tree_id, 'EXPAND_RELATIVES_EVENTS', false);
     set_gedcom_setting($tree_id, 'EXPAND_SOURCES', false);
     set_gedcom_setting($tree_id, 'FAM_FACTS_ADD', 'CENS,MARR,RESI,SLGS,MARR_CIVIL,MARR_RELIGIOUS,MARR_PARTNERS,RESN');
     set_gedcom_setting($tree_id, 'FAM_FACTS_QUICK', 'MARR,DIV,_NMR');
     set_gedcom_setting($tree_id, 'FAM_FACTS_UNIQUE', 'NCHI,MARL,DIV,ANUL,DIVF,ENGA,MARB,MARC,MARS');
     set_gedcom_setting($tree_id, 'FAM_ID_PREFIX', 'F');
     set_gedcom_setting($tree_id, 'FORMAT_TEXT', 'markdown');
     set_gedcom_setting($tree_id, 'FULL_SOURCES', false);
     set_gedcom_setting($tree_id, 'GEDCOM_ID_PREFIX', 'I');
     set_gedcom_setting($tree_id, 'GEDCOM_MEDIA_PATH', '');
     set_gedcom_setting($tree_id, 'GENERATE_UIDS', false);
     set_gedcom_setting($tree_id, 'HIDE_GEDCOM_ERRORS', true);
     set_gedcom_setting($tree_id, 'HIDE_LIVE_PEOPLE', true);
     set_gedcom_setting($tree_id, 'INDI_FACTS_ADD', 'AFN,BIRT,DEAT,BURI,CREM,ADOP,BAPM,BARM,BASM,BLES,CHRA,CONF,FCOM,ORDN,NATU,EMIG,IMMI,CENS,PROB,WILL,GRAD,RETI,DSCR,EDUC,IDNO,NATI,NCHI,NMR,OCCU,PROP,RELI,RESI,SSN,TITL,BAPL,CONL,ENDL,SLGC,_MILI,ASSO,RESN');
     set_gedcom_setting($tree_id, 'INDI_FACTS_QUICK', 'BIRT,BURI,BAPM,CENS,DEAT,OCCU,RESI');
     set_gedcom_setting($tree_id, 'INDI_FACTS_UNIQUE', '');
     set_gedcom_setting($tree_id, 'KEEP_ALIVE_YEARS_BIRTH', '');
     set_gedcom_setting($tree_id, 'KEEP_ALIVE_YEARS_DEATH', '');
     set_gedcom_setting($tree_id, 'LANGUAGE', WT_LOCALE);
     // Default to the current admin’s language
     set_gedcom_setting($tree_id, 'MAX_ALIVE_AGE', 120);
     set_gedcom_setting($tree_id, 'MAX_DESCENDANCY_GENERATIONS', '15');
     set_gedcom_setting($tree_id, 'MAX_PEDIGREE_GENERATIONS', '10');
     set_gedcom_setting($tree_id, 'MEDIA_DIRECTORY', 'media/');
     set_gedcom_setting($tree_id, 'MEDIA_ID_PREFIX', 'M');
     set_gedcom_setting($tree_id, 'MEDIA_UPLOAD', WT_PRIV_USER);
     set_gedcom_setting($tree_id, 'META_DESCRIPTION', '');
     set_gedcom_setting($tree_id, 'META_TITLE', WT_WEBTREES);
     set_gedcom_setting($tree_id, 'NOTE_FACTS_ADD', 'SOUR,RESN');
     set_gedcom_setting($tree_id, 'NOTE_FACTS_QUICK', '');
     set_gedcom_setting($tree_id, 'NOTE_FACTS_UNIQUE', '');
     set_gedcom_setting($tree_id, 'NOTE_ID_PREFIX', 'N');
     set_gedcom_setting($tree_id, 'NO_UPDATE_CHAN', false);
     set_gedcom_setting($tree_id, 'PEDIGREE_FULL_DETAILS', true);
     set_gedcom_setting($tree_id, 'PEDIGREE_LAYOUT', true);
     set_gedcom_setting($tree_id, 'PEDIGREE_ROOT_ID', '');
     set_gedcom_setting($tree_id, 'PEDIGREE_SHOW_GENDER', false);
     set_gedcom_setting($tree_id, 'PREFER_LEVEL2_SOURCES', '1');
     set_gedcom_setting($tree_id, 'QUICK_REQUIRED_FACTS', 'BIRT,DEAT');
     set_gedcom_setting($tree_id, 'QUICK_REQUIRED_FAMFACTS', 'MARR');
     set_gedcom_setting($tree_id, 'REPO_FACTS_ADD', 'PHON,EMAIL,FAX,WWW,NOTE,SHARED_NOTE,RESN');
     set_gedcom_setting($tree_id, 'REPO_FACTS_QUICK', '');
     set_gedcom_setting($tree_id, 'REPO_FACTS_UNIQUE', 'NAME,ADDR');
     set_gedcom_setting($tree_id, 'REPO_ID_PREFIX', 'R');
     set_gedcom_setting($tree_id, 'REQUIRE_AUTHENTICATION', false);
     set_gedcom_setting($tree_id, 'SAVE_WATERMARK_IMAGE', false);
     set_gedcom_setting($tree_id, 'SAVE_WATERMARK_THUMB', false);
     set_gedcom_setting($tree_id, 'SHOW_AGE_DIFF', false);
     set_gedcom_setting($tree_id, 'SHOW_COUNTER', true);
     set_gedcom_setting($tree_id, 'SHOW_DEAD_PEOPLE', WT_PRIV_PUBLIC);
     set_gedcom_setting($tree_id, 'SHOW_EST_LIST_DATES', false);
     set_gedcom_setting($tree_id, 'SHOW_FACT_ICONS', true);
     set_gedcom_setting($tree_id, 'SHOW_GEDCOM_RECORD', false);
     set_gedcom_setting($tree_id, 'SHOW_HIGHLIGHT_IMAGES', true);
     set_gedcom_setting($tree_id, 'SHOW_LDS_AT_GLANCE', false);
     set_gedcom_setting($tree_id, 'SHOW_LEVEL2_NOTES', true);
     set_gedcom_setting($tree_id, 'SHOW_LIVING_NAMES', WT_PRIV_USER);
     set_gedcom_setting($tree_id, 'SHOW_MEDIA_DOWNLOAD', false);
     set_gedcom_setting($tree_id, 'SHOW_NO_WATERMARK', WT_PRIV_USER);
     set_gedcom_setting($tree_id, 'SHOW_PARENTS_AGE', true);
     set_gedcom_setting($tree_id, 'SHOW_PEDIGREE_PLACES', '9');
     set_gedcom_setting($tree_id, 'SHOW_PEDIGREE_PLACES_SUFFIX', false);
     set_gedcom_setting($tree_id, 'SHOW_PRIVATE_RELATIONSHIPS', true);
     set_gedcom_setting($tree_id, 'SHOW_RELATIVES_EVENTS', '_BIRT_CHIL,_BIRT_SIBL,_MARR_CHIL,_MARR_PARE,_DEAT_CHIL,_DEAT_PARE,_DEAT_GPAR,_DEAT_SIBL,_DEAT_SPOU');
     set_gedcom_setting($tree_id, 'SHOW_STATS', false);
     set_gedcom_setting($tree_id, 'SOURCE_ID_PREFIX', 'S');
     set_gedcom_setting($tree_id, 'SOUR_FACTS_ADD', 'NOTE,REPO,SHARED_NOTE,RESN');
     set_gedcom_setting($tree_id, 'SOUR_FACTS_QUICK', 'TEXT,NOTE,REPO');
     set_gedcom_setting($tree_id, 'SOUR_FACTS_UNIQUE', 'AUTH,ABBR,TITL,PUBL,TEXT');
     set_gedcom_setting($tree_id, 'SUBLIST_TRIGGER_I', '200');
     set_gedcom_setting($tree_id, 'SURNAME_LIST_STYLE', 'style2');
     switch (WT_LOCALE) {
         case 'es':
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'spanish');
             break;
         case 'is':
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'icelandic');
             break;
         case 'lt':
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'lithuanian');
             break;
         case 'pl':
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'polish');
             break;
         case 'pt':
         case 'pt-BR':
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'portuguese');
             break;
         default:
             set_gedcom_setting($tree_id, 'SURNAME_TRADITION', 'paternal');
             break;
     }
     set_gedcom_setting($tree_id, 'THEME_DIR', 'webtrees');
     set_gedcom_setting($tree_id, 'THUMBNAIL_WIDTH', '100');
     set_gedcom_setting($tree_id, 'USE_RIN', false);
     set_gedcom_setting($tree_id, 'USE_SILHOUETTE', true);
     set_gedcom_setting($tree_id, 'WATERMARK_THUMB', false);
     set_gedcom_setting($tree_id, 'WEBMASTER_USER_ID', WT_USER_ID);
     set_gedcom_setting($tree_id, 'WEBTREES_EMAIL', '');
     set_gedcom_setting($tree_id, 'WORD_WRAPPED_NOTES', false);
     set_gedcom_setting($tree_id, 'imported', 0);
     set_gedcom_setting($tree_id, 'title', WT_I18N::translate('My family tree'));
     // Default restriction settings
     $statement = WT_DB::prepare("INSERT INTO `##default_resn` (gedcom_id, xref, tag_type, resn) VALUES (?, NULL, ?, ?)");
     $statement->execute(array($tree_id, 'SSN', 'confidential'));
     $statement->execute(array($tree_id, 'SOUR', 'privacy'));
     $statement->execute(array($tree_id, 'REPO', 'privacy'));
     $statement->execute(array($tree_id, 'SUBM', 'confidential'));
     $statement->execute(array($tree_id, 'SUBN', 'confidential'));
     // Genealogy data
     // It is simpler to create a temporary/unimported GEDCOM than to populate all the tables...
     $john_doe = WT_I18N::translate('John /DOE/');
     $note = WT_I18N::translate('Edit this individual and replace their details with your own');
     WT_DB::prepare("INSERT INTO `##gedcom_chunk` (gedcom_id, chunk_data) VALUES (?, ?)")->execute(array($tree_id, "0 HEAD\n1 CHAR UTF-8\n0 @I1@ INDI\n1 NAME {$john_doe}\n1 SEX M\n1 BIRT\n2 DATE 01 JAN 1850\n2 NOTE {$note}\n0 TRLR\n"));
     // Set the initial blocks
     WT_DB::prepare("INSERT INTO `##block` (gedcom_id, location, block_order, module_name)" . " SELECT ?, location, block_order, module_name" . " FROM `##block`" . " WHERE gedcom_id=-1")->execute(array($tree_id));
     // Update the list of trees - to include the new configuration settings
     self::$trees = null;
 }
 set_gedcom_setting(WT_GED_ID, 'WEBMASTER_USER_ID', WT_Filter::post('NEW_WEBMASTER_USER_ID'));
 set_gedcom_setting(WT_GED_ID, 'WEBTREES_EMAIL', WT_Filter::post('NEW_WEBTREES_EMAIL'));
 set_gedcom_setting(WT_GED_ID, 'WORD_WRAPPED_NOTES', WT_Filter::postBool('NEW_WORD_WRAPPED_NOTES'));
 if (WT_Filter::post('gedcom_title')) {
     set_gedcom_setting(WT_GED_ID, 'title', WT_Filter::post('gedcom_title'));
 }
 // Only accept valid folders for NEW_MEDIA_DIRECTORY
 $NEW_MEDIA_DIRECTORY = preg_replace('/[\\/\\\\]+/', '/', WT_Filter::post('NEW_MEDIA_DIRECTORY') . '/');
 if (substr($NEW_MEDIA_DIRECTORY, 0, 1) == '/') {
     $NEW_MEDIA_DIRECTORY = substr($NEW_MEDIA_DIRECTORY, 1);
 }
 if ($NEW_MEDIA_DIRECTORY) {
     if (is_dir(WT_DATA_DIR . $NEW_MEDIA_DIRECTORY)) {
         set_gedcom_setting(WT_GED_ID, 'MEDIA_DIRECTORY', $NEW_MEDIA_DIRECTORY);
     } elseif (@mkdir(WT_DATA_DIR . $NEW_MEDIA_DIRECTORY, 0755, true)) {
         set_gedcom_setting(WT_GED_ID, 'MEDIA_DIRECTORY', $NEW_MEDIA_DIRECTORY);
         WT_FlashMessages::addMessage(WT_I18N::translate('The folder %s was created.', WT_DATA_DIR . $NEW_MEDIA_DIRECTORY));
     } else {
         WT_FlashMessages::addMessage(WT_I18N::translate('The folder %s does not exist, and it could not be created.', WT_DATA_DIR . $NEW_MEDIA_DIRECTORY));
     }
 }
 $gedcom = WT_Filter::post('gedcom');
 if ($gedcom && $gedcom != WT_GEDCOM) {
     try {
         WT_DB::prepare("UPDATE `##gedcom` SET gedcom_name = ? WHERE gedcom_id = ?")->execute(array($gedcom, WT_GED_ID));
         WT_DB::prepare("UPDATE `##site_setting` SET setting_value = ? WHERE setting_name='DEFAULT_GEDCOM' AND setting_value = ?")->execute(array($gedcom, WT_GEDCOM));
     } catch (Exception $ex) {
         // Probably a duplicate name.
         $gedcom = WT_GEDCOM;
     }
 }
Beispiel #7
0
 private function admin()
 {
     $controller = new WT_Controller_Page();
     $controller->restrictAccess(Auth::isAdmin())->setPageTitle($this->getTitle())->pageHeader();
     // Save the updated preferences
     if (WT_Filter::post('action') == 'save') {
         foreach (WT_Tree::getAll() as $tree) {
             set_gedcom_setting($tree->tree_id, 'include_in_sitemap', WT_Filter::postBool('include' . $tree->tree_id));
         }
         // Clear cache and force files to be regenerated
         WT_DB::prepare("DELETE FROM `##module_setting` WHERE setting_name LIKE 'sitemap%'")->execute();
     }
     $include_any = false;
     echo '<h3>', $this->getTitle(), '</h3>', '<p>', WT_I18N::translate('Sitemaps are a way for webmasters to tell search engines about the pages on a website that are available for crawling.  All major search engines support sitemaps.  For more information, see <a href="http://www.sitemaps.org/">www.sitemaps.org</a>.') . '</p>', '<p>', WT_I18N::translate('Which family trees should be included in the sitemaps?'), '</p>', '<form method="post" action="module.php?mod=' . $this->getName() . '&amp;mod_action=admin">', '<input type="hidden" name="action" value="save">';
     foreach (WT_Tree::getAll() as $tree) {
         echo '<p><input type="checkbox" name="include', $tree->tree_id, '"';
         if (get_gedcom_setting($tree->tree_id, 'include_in_sitemap')) {
             echo ' checked="checked"';
             $include_any = true;
         }
         echo '>', $tree->tree_title_html, '</p>';
     }
     echo '<input type="submit" value="', WT_I18N::translate('save'), '">', '</form>', '<hr>';
     if ($include_any) {
         $site_map_url1 = WT_SERVER_NAME . WT_SCRIPT_PATH . 'module.php?mod=' . $this->getName() . '&amp;mod_action=generate&amp;file=sitemap.xml';
         $site_map_url2 = rawurlencode(WT_SERVER_NAME . WT_SCRIPT_PATH . 'module.php?mod=' . $this->getName() . '&mod_action=generate&file=sitemap.xml');
         echo '<p>', WT_I18N::translate('To tell search engines that sitemaps are available, you should add the following line to your robots.txt file.'), '</p>';
         echo '<pre>Sitemap: ', $site_map_url1, '</pre>', '<hr>', '<p>', WT_I18N::translate('To tell search engines that sitemaps are available, you can use the following links.'), '</p>', '<ul>', '<li><a target="_blank" href="http://www.bing.com/webmaster/ping.aspx?siteMap=' . $site_map_url2 . '">Bing</a></li>', '<li><a target="_blank" href="http://www.google.com/webmasters/tools/ping?sitemap=' . $site_map_url2 . '">Google</a></li>', '</ul>';
     }
 }