/** * 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())); }
/** * 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)); }
/** * 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); }
/** * 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')); }