Beispiel #1
0
/**
 * Ninth installation step.
 *
 * @return tempcode		Progress report / UI
 */
function step_9()
{
    big_installation_common();
    $log = new ocp_tempcode();
    $modules = find_all_modules('forum');
    foreach ($modules as $module => $type) {
        if (reinstall_module('forum', $module)) {
            $log->attach(do_template('INSTALLER_DONE_SOMETHING', array('_GUID' => 'c1d95b9713006acb491b44ff6c79099c', 'SOMETHING' => do_lang_tempcode('INSTALL_MODULE', escape_html($module)))));
        }
    }
    $modules = find_all_modules('cms');
    foreach ($modules as $module => $type) {
        if (reinstall_module('cms', $module)) {
            $log->attach(do_template('INSTALLER_DONE_SOMETHING', array('_GUID' => '8fdbc968cae73c47d9faf3b4148ac7e1', 'SOMETHING' => do_lang_tempcode('INSTALL_MODULE', escape_html($module)))));
        }
    }
    $blocks = find_all_blocks();
    foreach ($blocks as $block => $type) {
        echo '<!-- Installing block: ' . $block . ' -->' . "\n";
        if (reinstall_block($block)) {
            $log->attach(do_template('INSTALLER_DONE_SOMETHING', array('_GUID' => 'dc9f833239d501f77729778b5c6681b6', 'SOMETHING' => do_lang_tempcode('INSTALL_BLOCK', escape_html($block)))));
        }
    }
    $url = 'install.php?step=10';
    return do_template('INSTALLER_STEP_LOG', array('_GUID' => 'b20121b8f4f84dd8e625e3b821c753b3', 'PREVIOUS_STEP' => '8', 'URL' => $url, 'LOG' => $log, 'HIDDEN' => build_keep_post_fields()));
}
Beispiel #2
0
/**
 * Upgrade all modules.
 *
 * @return string		List of upgraded/installed modules/blocks
 */
function upgrade_modules()
{
    $out = '';
    require_code('zones2');
    if (file_exists(get_file_base() . '/sources/zones3.php')) {
        require_code('zones3');
    }
    $ret = upgrade_module('adminzone', 'admin_version');
    if ($ret == 1) {
        $out .= '<li>' . do_lang('FU_UPGRADED_MODULE', '<kbd>admin_version</kbd>') . '</li>';
    }
    $zones = find_all_zones();
    if (!in_array('adminzone', $zones)) {
        $zones[] = 'adminzone';
    }
    if (!in_array('cms', $zones)) {
        $zones[] = 'cms';
    }
    if (!in_array('site', $zones)) {
        $zones[] = 'site';
    }
    foreach ($zones as $zone) {
        $modules = find_all_modules($zone);
        foreach ($modules as $module => $type) {
            $ret = upgrade_module($zone, $module);
            if ($ret == 1) {
                $out .= '<li>' . do_lang('FU_UPGRADED_MODULE', '<kbd>' . escape_html($module) . '</kbd>') . '</li>';
            } elseif ($ret == -2) {
                if ($type == 'modules_custom') {
                    continue;
                }
                if (reinstall_module($zone, $module)) {
                    $out .= '<li>' . do_lang('FU_INSTALLED_MODULE', '<kbd>' . escape_html($module) . '</kbd>') . '</li>';
                }
            }
        }
    }
    require_code('zones2');
    if (file_exists(get_file_base() . '/sources/zones3.php')) {
        require_code('zones3');
    }
    $blocks = find_all_blocks();
    foreach ($blocks as $block => $type) {
        $ret = upgrade_block($block);
        if ($ret == 1) {
            $out .= '<li>' . do_lang('FU_UPGRADED_BLOCK', '<kbd>' . escape_html($block) . '</kbd>') . '</li>';
        } elseif ($ret == -2) {
            if ($type == 'sources_custom') {
                continue;
            }
            if (reinstall_block($block)) {
                $out .= '<li>' . do_lang('FU_INSTALLED_BLOCK', '<kbd>' . escape_html($block) . '</kbd>') . '</li>';
            }
        }
    }
    return $out;
}
 /**
  * Standard modular run function.
  *
  * @param  array		A map of parameters.
  * @return tempcode	The result of execution.
  */
 function run($map)
 {
     require_javascript('javascript_ajax');
     require_lang('main_google_map_users');
     // Set up config/defaults
     $geolocate_user = array_key_exists('geolocate_user', $map) ? $map['geolocate_user'] : '******';
     if (!array_key_exists('title', $map)) {
         $map['title'] = '';
     }
     if (!array_key_exists('region', $map)) {
         $map['region'] = '';
     }
     if (!array_key_exists('username_prefix', $map)) {
         $map['username_prefix'] = 'Member: ';
     }
     if (!array_key_exists('latitude', $map)) {
         $map['latitude'] = '';
     }
     if (!array_key_exists('longitude', $map)) {
         $map['longitude'] = '';
     }
     $mapwidth = array_key_exists('width', $map) ? $map['width'] : '100%';
     $mapheight = array_key_exists('height', $map) ? $map['height'] : '300px';
     $api_key = array_key_exists('api_key', $map) ? $map['api_key'] : '';
     $set_zoom = array_key_exists('zoom', $map) ? $map['zoom'] : '3';
     $set_center = array_key_exists('center', $map) ? $map['center'] : '0';
     $cluster = array_key_exists('cluster', $map) ? $map['cluster'] : '0';
     // Ensure installed
     $latitude_cpf_id = $GLOBALS['FORUM_DB']->query_value_null_ok('f_custom_fields f LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'translate t ON f.cf_name=t.id', 'f.id', array('text_original' => 'ocp_latitude'));
     $longitude_cpf_id = $GLOBALS['FORUM_DB']->query_value_null_ok('f_custom_fields f LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'translate t ON f.cf_name=t.id', 'f.id', array('text_original' => 'ocp_longitude'));
     if (is_null($longitude_cpf_id) || is_null($latitude_cpf_id)) {
         require_code('zones2');
         reinstall_block('main_google_map_users');
         $latitude_cpf_id = $GLOBALS['FORUM_DB']->query_value_null_ok('f_custom_fields f LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'translate t ON f.cf_name=t.id', 'f.id', array('text_original' => 'ocp_latitude'));
         $longitude_cpf_id = $GLOBALS['FORUM_DB']->query_value_null_ok('f_custom_fields f LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'translate t ON f.cf_name=t.id', 'f.id', array('text_original' => 'ocp_longitude'));
         //return paragraph('The maps block has not been installed correctly, the CPFs are missing.','','nothing_here');
     }
     // Data query
     $query = 'SELECT m_username,mf_member_id,m_primary_group,field_' . $latitude_cpf_id . ',field_' . $longitude_cpf_id . ' FROM ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_member_custom_fields f LEFT JOIN ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_members m ON m.id=f.mf_member_id WHERE ' . db_string_not_equal_to('field_' . $longitude_cpf_id, '') . ' AND ' . db_string_not_equal_to('field_' . $latitude_cpf_id, '');
     // Filtering
     if (!array_key_exists('filter_usergroup', $map)) {
         $map['filter_usergroup'] = '';
     }
     if ($map['filter_usergroup'] != '') {
         require_code('ocfiltering');
         $allowed_groups = ocfilter_to_idlist_using_memory($map['filter_usergroup'], $GLOBALS['FORUM_DRIVER']->get_usergroup_list());
         $query .= ' AND (';
         foreach ($allowed_groups as $i => $bit) {
             if ($i != 0) {
                 $query .= ' OR ';
             }
             $query .= 'm_primary_group=' . $bit;
         }
         $query .= ')';
     }
     if (!array_key_exists('filter_term', $map)) {
         $map['filter_term'] = '';
     }
     if ($map['filter_term'] != '') {
         $query .= ' AND m_username LIKE \'' . db_encode_like('%' . $map['filter_term'] . '%') . '\'';
     }
     // Get results
     $members_to_show = $GLOBALS['FORUM_DB']->query($query);
     if (count($members_to_show) == 0) {
         if ($geolocate_user == '0') {
             // Exit, but only if we can't geolocate users via the block (i.e. self-healing)
             return paragraph(do_lang_tempcode('NO_ENTRIES'), '', 'nothing_here');
         }
     }
     // Make marker data Javascript-friendly
     $member_data_js = "var data=[";
     foreach ($members_to_show as $i => $member_data) {
         if ($i != 0) {
             $member_data_js .= ',';
         }
         $member_data_js .= "['" . addslashes($member_data['m_username']) . "'," . float_to_raw_string(@floatval($member_data['field_' . $latitude_cpf_id])) . "," . float_to_raw_string(@floatval($member_data['field_' . $longitude_cpf_id])) . "," . strval($member_data['m_primary_group']) . "]";
     }
     $member_data_js .= "];";
     // See if we need to detect the current user's long/lat
     $member_longitude = get_ocp_cpf('longitude', get_member());
     $member_latitude = get_ocp_cpf('latitude', get_member());
     $update_url = get_base_url() . '/data_custom/set_coordinates.php?mid=' . strval(get_member()) . '&coord=';
     if (!empty($member_longitude) && !empty($member_latitude) || is_guest()) {
         $update_url = '';
     }
     return do_template('BLOCK_MAIN_GOOGLE_MAP_USERS', array('TITLE' => $map['title'], 'GEOLOCATE_USER' => $geolocate_user, 'CLUSTER' => $cluster, 'SET_COORD_URL' => $update_url, 'REGION' => $map['region'], 'DATA' => $member_data_js, 'USERNAME_PREFIX' => $map['username_prefix'], 'WIDTH' => $mapwidth, 'HEIGHT' => $mapheight, 'LATITUDE' => $map['latitude'], 'LONGITUDE' => $map['longitude'], 'ZOOM' => $set_zoom, 'CENTER' => $set_center));
 }
Beispiel #4
0
/**
 * Uninstall an addon.
 *
 * @param  string			Name of the addon
 * @param  ?array			The files to install (NULL: all)
 */
function install_addon($file, $files = NULL)
{
    $full = get_custom_file_base() . '/imports/mods/' . $file;
    require_code('zones2');
    require_code('zones3');
    require_code('tar');
    $tar = tar_open($full, 'rb');
    $info_file = tar_get_file($tar, 'mod.inf');
    if (is_null($info_file)) {
        warn_exit(do_lang_tempcode('NOT_ADDON'));
    }
    $info = better_parse_ini_file(NULL, $info_file['data']);
    $directory = tar_get_directory($tar);
    tar_extract_to_folder($tar, '', true, $files, true);
    $addon = $info['name'];
    $author = $info['author'];
    $organisation = $info['organisation'];
    $version = $info['version'];
    if ($version == '(version-synched)') {
        $version = float_to_raw_string(ocp_version_number());
    }
    $dependencies = explode(',', array_key_exists('dependencies', $info) ? $info['dependencies'] : '');
    $incompatibilities = explode(',', array_key_exists('incompatibilities', $info) ? $info['incompatibilities'] : '');
    $description = $info['description'];
    $GLOBALS['SITE_DB']->query_delete('addons', array('addon_name' => $addon), '', 1);
    $GLOBALS['SITE_DB']->query_insert('addons', array('addon_name' => $addon, 'addon_author' => $author, 'addon_organisation' => $organisation, 'addon_version' => $version, 'addon_description' => $description, 'addon_install_time' => time()));
    foreach ($dependencies as $dependency) {
        $GLOBALS['SITE_DB']->query_insert('addons_dependencies', array('addon_name' => $addon, 'addon_name_dependant_upon' => trim($dependency), 'addon_name_incompatibility' => 0));
    }
    foreach ($incompatibilities as $dependency) {
        $GLOBALS['SITE_DB']->query_insert('addons_dependencies', array('addon_name' => $addon, 'addon_name_dependant_upon' => trim($dependency), 'addon_name_incompatibility' => 1));
    }
    foreach ($directory as $dir) {
        $addon_file = $dir['path'];
        if (substr($addon_file, -1) == '/') {
            continue;
        }
        if (is_null($files) || in_array($addon_file, $files)) {
            $GLOBALS['SITE_DB']->query_insert('addons_files', array('addon_name' => $addon, 'filename' => $addon_file));
        }
    }
    // Install new zones
    $zones = array('');
    foreach ($directory as $dir) {
        $addon_file = $dir['path'];
        if (is_null($files) || in_array($addon_file, $files)) {
            $matches = array();
            if (preg_match('#(\\w*)/index.php#', $addon_file, $matches) != 0) {
                $zone = $matches[1];
                $test = $GLOBALS['SITE_DB']->query_value_null_ok('zones', 'zone_name', array('zone_name' => $zone));
                if (is_null($test)) {
                    require_code('menus2');
                    add_menu_item_simple('zone_menu', NULL, $zone, $zone . ':', 0, 1);
                    $GLOBALS['SITE_DB']->query_insert('zones', array('zone_name' => $zone, 'zone_title' => insert_lang($zone, 1), 'zone_default_page' => 'start', 'zone_header_text' => insert_lang('???', 2), 'zone_theme' => 'default', 'zone_wide' => 0, 'zone_require_session' => 0, 'zone_displayed_in_menu' => 1));
                    $groups = $GLOBALS['FORUM_DRIVER']->get_usergroup_list(false, true);
                    foreach (array_keys($groups) as $group_id) {
                        $GLOBALS['SITE_DB']->query_insert('group_zone_access', array('zone_name' => $zone, 'group_id' => $group_id));
                    }
                }
                $zones[] = $zone;
            }
        }
    }
    // Install new modules
    $zones = array_unique(array_merge(find_all_zones(), $zones));
    if (get_option('collapse_user_zones') == '1') {
        $zones[] = 'site';
    }
    foreach ($zones as $zone) {
        $prefix = $zone == '' ? '' : $zone . '/';
        foreach ($directory as $dir) {
            $addon_file = $dir['path'];
            if (is_null($files) || in_array($addon_file, $files)) {
                if (preg_match('#^' . $prefix . 'pages/(modules|modules\\_custom)/([^/]*)\\.php$#', $addon_file, $matches) != 0) {
                    if (!module_installed($matches[2])) {
                        reinstall_module($zone, $matches[2]);
                    }
                }
            }
        }
    }
    // Install new blocks
    foreach ($directory as $dir) {
        $addon_file = $dir['path'];
        if (is_null($files) || in_array($addon_file, $files)) {
            if (preg_match('#^(sources|sources\\_custom)/blocks/([^/]*)\\.php$#', $addon_file, $matches) != 0) {
                if (!block_installed($matches[2])) {
                    reinstall_block($matches[2]);
                }
            }
        }
    }
    // Clear some cacheing
    require_code('view_modes');
    require_code('zones2');
    require_code('zones3');
    erase_comcode_page_cache();
    erase_tempcode_cache();
    persistant_cache_empty();
    erase_cached_templates();
    erase_cached_language();
    // Load mod.php if it exists
    $_modphp_file = tar_get_file($tar, 'mod.php');
    if (!is_null($_modphp_file)) {
        $modphp_file = trim($_modphp_file['data']);
        if (!defined('HIPHOP_PHP')) {
            if (substr($modphp_file, 0, 5) == '<' . '?php') {
                $modphp_file = substr($modphp_file, 5);
            }
            if (substr($modphp_file, -2) == '?' . '>') {
                $modphp_file = substr($modphp_file, 0, strlen($modphp_file) - 2);
            }
            if (eval($modphp_file) === false) {
                fatal_exit(@strval($php_errormsg));
            }
        } else {
            $matches = array();
            $num_matches = preg_match_all('#\\$GLOBALS[\'SITE_DB\']->query_insert(\'theme_images\',array(\'id\'=>\'([^\']*)\',\'theme\'=>\'([^\']*)\',\'path\'=>\'([^\']*)\',\'lang\'=>\'([^\']*)\'),false,true);#', $modphp_file, $matches);
            for ($i = 0; $i < $num_matches; $i++) {
                $GLOBALS['SITE_DB']->query_insert('theme_images', array('id' => $matches[1][$i], 'theme' => $matches[2][$i], 'path' => $matches[3][$i], 'lang' => $matches[4][$i]), false, true);
            }
        }
    }
    tar_close($tar);
    // Call install script, if it exists
    $path = '/data_custom/' . strtolower(basename($file, '.tar')) . '_install.php';
    if (file_exists(get_file_base() . $path)) {
        require_code('files');
        http_download_file(get_base_url() . $path);
    }
    log_it('INSTALL_ADDON', $addon);
}
Beispiel #5
0
 /**
  * The actualiser to reinstall a module.
  *
  * @return tempcode		The UI
  */
 function reinstall_module()
 {
     $module = post_param('module');
     $zone = post_param('zone');
     require_code('zones2');
     if ($zone != '_block') {
         reinstall_module($zone, $module);
     } else {
         reinstall_block($module);
     }
     $title = get_page_title('REINSTALL_MODULE');
     // Show it worked / Refresh
     $url = build_url(array('page' => '_SELF', 'type' => 'view', 'id' => $zone), '_SELF');
     return redirect_screen($title, $url, do_lang_tempcode('SUCCESS'));
 }