/** * Constructor * * @access public * @param object ipsRegistry reference * @return void */ public function __construct(ipsRegistry $registry) { parent::__construct($registry, TRUE); $_app = $this->request['app'] ? $this->request['app'] : IPS_APP_COMPONENT; /* Update paths and such */ $this->settings['base_url'] = $this->settings['_original_base_url']; $this->settings['public_url'] = $this->settings['_original_base_url'] . '/index.php?'; $this->settings['base_acp_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY; $this->settings['skin_acp_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . "/skin_cp"; $this->settings['skin_app_url'] = $this->settings['skin_acp_url']; $this->settings['js_main_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . '/js/'; $this->settings['js_app_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . '/' . IPSLib::getAppFolder($_app) . '/' . $_app . '/js/'; if (ipsRegistry::$request['app']) { $this->settings['skin_app_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . '/' . IPSLib::getAppFolder($_app) . '/' . $_app . "/skin_cp/"; } /* Update base URL */ if ($this->member->session_type == 'cookie') { $this->settings['base_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . '/index.php?'; } else { $this->settings['base_url'] = $this->settings['base_url'] . '/' . CP_DIRECTORY . '/index.php?adsess=' . $this->request['adsess'] . '&'; } $this->settings['_base_url'] = $this->settings['base_url']; $this->settings['base_url'] = $this->settings['base_url'] . 'app=' . IPS_APP_COMPONENT . '&'; $this->settings['extraJsModules'] = ''; }
/** * List the applications * * @param array Application * @param array Uninstalled applications * @return string HTML */ public function applications_list($applications, $uninstalled = array(), $message = NULL) { $IPBHTML = ""; //--starthtml--// $canInstall = $this->registry->class_permissions->checkPermission('app_install'); $IPBHTML .= <<<EOF <div class='section_title'> \t<h2>{$this->lang->words['a_apps']}</h2> \t \t<div class='ipsActionBar clearfix'> \t\t<ul> EOF; if ($canInstall) { $IPBHTML .= <<<EOF \t\t\t<li class='ipsActionButton'> \t\t\t\t<a href='{$this->settings['base_url']}module=applications&section=applications&do=application_add'><img src='{$this->settings['skin_acp_url']}/images/icons/application_add.png' alt='' /> {$this->lang->words['a_addnewapp']}</a> \t\t\t</li> EOF; } $IPBHTML .= <<<EOF \t\t\t<li class='ipsActionButton'> \t\t\t\t<a href='{$this->settings['base_url']}module=applications&section=applications&do=module_recache_all'><img src='{$this->settings['skin_acp_url']}/images/icons/arrow_refresh.png' alt='' /> {$this->lang->words['recache_link']}</a> \t\t\t</li> EOF; if ($this->settings['search_method'] == 'sphinx' && $this->registry->class_permissions->checkPermission('build_sphinx')) { $IPBHTML .= <<<EOF \t\t\t<li class='ipsActionButton'> \t\t\t\t<a href='#' class='ipbmenu' id='sphinx_conf' title='{$this->lang->words['sphinx_menu_desc']}'><img src='{$this->settings['skin_acp_url']}/images/icons/cog.png' /> {$this->lang->words['sphinx_menu_title']} <img src='{$this->settings['skin_acp_url']}/images/useropts_arrow.png' /></a> \t\t\t\t<ul class='ipbmenu_content' id='sphinx_conf_menucontent' style='display: none'> \t\t\t\t\t<li> \t\t\t\t\t\t<img src='{$this->settings['skin_acp_url']}/images/icons/page_white_code.png' alt='' /> <a href='{$this->settings['base_url']}module=applications&section=applications&do=sphinxBuildConf'>{$this->lang->words['sphinx_build_conf']}</a> \t\t\t\t\t</li> \t\t\t\t\t<li> \t\t\t\t\t\t<img src='{$this->settings['skin_acp_url']}/images/icons/page_white_code.png' alt='' /> <a href="{$this->settings['base_url']}module=applications&section=applications&do=sphinxBuildCron">{$this->lang->words['sphinx_build_cronjob']}</a> \t\t\t\t\t</li> \t\t\t\t</ul> \t\t\t</li> EOF; } $IPBHTML .= <<<EOF \t\t\t<li class='ipsActionButton'> \t\t\t\t<a href='{$this->settings['base_url']}{$this->form_code}do=applications_overview&checkUpdates=1'><img src='{$this->settings['skin_acp_url']}/images/icons/cog.png' /> {$this->lang->words['hook_check_updates']}</a> \t\t\t</li> \t\t\t<li class='ipsActionButton inDev'> \t\t\t\t<a href='{$this->settings['base_url']}module=applications&section=applications&do=inDevExportApps'><img src='{$this->settings['skin_acp_url']}/images/icons/arrow_rotate_anticlockwise.png' alt='' /> {$this->lang->words['export_apps_xml']}</a> \t\t\t</li> \t\t\t<li class='ipsActionButton inDev'> \t\t\t\t<a href='{$this->settings['base_url']}{$this->form_code}&do=inDevExportAll'><img src='{$this->settings['skin_acp_url']}/images/icons/export.png' alt='' /> {$this->lang->words['export_modules_xml']}</a> \t\t\t</li> \t\t\t<li class='ipsActionButton inDev'> \t\t\t\t<a href='{$this->settings['base_url']}{$this->form_code}&do=inDevRebuildAll'><img src='{$this->settings['skin_acp_url']}/images/icons/import.png' alt='' /> {$this->lang->words['import_modules_xml']}</a> \t\t\t</li> \t\t</ul> \t</div> </div> EOF; if ($message) { $IPBHTML .= "<div class='information-box'>{$message}</div><br />"; } $IPBHTML .= <<<EOF <!-- LEFT SIDEBAR --> <div class='acp-box left' style='width: 69%'> \t<h3>{$this->lang->words['a_installedapps']}</h3> \t \t<div id='tabstrip_appsList' class='ipsTabBar with_left with_right'> \t\t<span class='tab_left'>«</span> \t\t<span class='tab_right'>»</span> \t\t<ul> \t\t\t<li id='tab_appsEnabled'>{$this->lang->words['a_apps_enabled']}</li> \t\t\t<li id='tab_appsDisabled'>{$this->lang->words['a_apps_disabled']}</li> \t\t</ul> \t</div> \t \t<div id='tabstrip_appsList_content' class='ipsTabBar_content'> \t\t \t\t<div id='tab_appsEnabled_content'> \t\t\t<table class='ipsTable' id='apps_enabled'> \t\t\t\t<tr> \t\t\t\t\t<th width='1%'> </th> \t\t\t\t\t<th width='1%'> </th> \t\t\t\t\t<th width='55%'>{$this->lang->words['a_hookapp']}</th> \t\t\t\t\t<th width='15%' class='center'>{$this->lang->words['app_tab_permissions']}</th> \t\t\t\t\t<th width='20%' class='center'>{$this->lang->words['a_lastupdated']}</th> \t\t\t\t\t<th class='col_buttons'> </th> \t\t\t\t</tr> EOF; if (count($applications['enabled'])) { foreach ($applications['enabled'] as $app) { $img = is_file(IPSLib::getAppDir($app['app_directory']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($app['app_directory']) . '/' . $app['app_directory'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/images/applications/{$app['app_directory']}.png"; # IPS app? $app['titlePrefix'] = in_array($app['app_location'], array('root', 'ips')) ? "<span class='ipsBadge badge_purple'>{$this->lang->words['gl_ipsapp']}</span> " : ''; # Sort title $app['app_title'] = IN_DEV ? "<a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}'>{$app['app_title']}</a>" : $app['app_title']; $app['app_description'] = $app['app_description'] ? "<br /><span class='desctext'>{$app['app_description']}</span>" : ''; # Tab Restrictions $app['_tab_restricted'] = $app['app_hide_tab'] || IPSText::cleanPermString($app['app_tab_groups']) ? "<a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}&_tab=restrictions' title='{$this->lang->words['a_edit_restrictions']}'><img src='{$this->settings['skin_acp_url']}/images/icons/tick.png' alt='' /></a>" : ''; # Update available? if ($app['app_update_available'][0]) { $_update = "<span class='ipsBadge badge_purple'>{$this->lang->words['hook_update_available']}</span>"; if (!empty($app['app_update_available'][1])) { $_update = "<a href='{$app['app_update_available'][1]}' target='_blank'>{$_update}</a>"; } elseif ($app['app_website']) { $_update = "<a href='{$app['app_website']}' target='_blank'>{$_update}</a>"; } $app['_updated'] = $_update; } elseif (isset($app['_long_version']) && $app['_long_version'] > $app['_long_current']) { $app['_updated'] = "<a href='{$this->settings['board_url']}/" . CP_DIRECTORY . "/upgrade/' class='ipsBadge badge_green'>{$this->lang->words['a_upgradeavail']}</a>"; } else { $app['_updated'] = "<span class='desctext'>{$this->lang->words['a_oh_kay']}</span>"; } if ($app['app_directory'] == 'core') { $IPBHTML .= <<<EOF \t\t\t<tr class='ipsControlRow'> \t\t\t\t<td> </td> EOF; } else { $IPBHTML .= <<<EOF \t\t\t<tr class='ipsControlRow isDraggable' id='apps_{$app['app_id']}'> \t\t\t\t<td class='col_drag'> \t\t\t\t\t<span class='draghandle'> </span> \t\t\t\t</td> EOF; } $IPBHTML .= <<<EOF \t\t\t\t<td> \t\t\t\t\t<img src='{$img}' alt='' /> \t\t\t\t</td> \t\t\t\t<td> \t\t\t\t\t<strong><span class='larger_text'>{$app['titlePrefix']}{$app['app_title']}</span></strong><span class='desctext'> v{$app['_human_current']}</span> \t\t\t\t\t{$app['app_description']} \t\t\t\t</td> \t\t\t\t<td class='center'>{$app['_tab_restricted']}</td> \t\t\t\t<td class='center'>{$app['_updated']}</td> \t\t\t\t<td class='col_buttons'> \t\t\t\t\t<ul class='ipsControlStrip'> EOF; if (!in_array($app['app_directory'], array('core', 'forums', 'members'))) { $IPBHTML .= <<<EOF \t\t\t\t\t\t<li class='i_disable'><a href='{$this->settings['base_url']}{$this->form_code}do=toggle_app&app_id={$app['app_id']}' title='{$this->lang->words['a_disable_app']}'>{$this->lang->words['a_disable_app']}</a></li> EOF; } $IPBHTML .= <<<EOF \t\t\t\t\t\t<li class='i_edit'><a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}' title='{$this->lang->words['a_editapp_details']}'>{$this->lang->words['a_editapp_details']}</a></li> \t\t\t\t\t\t<li class='ipsControlStrip_more ipbmenu' id='menu_{$app['app_id']}'><a href='#'>{$this->lang->words['more']}</a></li> \t\t\t\t\t</ul> \t\t\t\t\t \t\t\t\t\t<ul class='acp-menu' id='menu_{$app['app_id']}_menucontent' style='display: none'> \t\t\t\t\t\t<li class='icon view'><a href='{$this->settings['base_url']}{$this->form_code}do=application_details&app_id={$app['app_id']}'>{$this->lang->words['a_viewhook']}</a></li> \t\t\t\t\t\t<li class='icon manage'><a href='{$this->settings['base_url']}{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=1'>{$this->lang->words['a_manageadmin']}</a></li> \t\t\t\t\t\t<li class='icon manage'><a href='{$this->settings['base_url']}{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=0'>{$this->lang->words['a_managepublic']}</a></li> EOF; if ($app['app_protected'] != 1 or IN_DEV) { $IPBHTML .= <<<EOF \t\t\t\t\t\t<li class='icon delete'><a href='{$this->settings['base_url']}{$this->form_code}do=application_remove_splash&app_id={$app['app_id']}'>{$this->lang->words['a_removeapp']}</a></li> EOF; } $IPBHTML .= <<<EOF \t\t\t\t\t</ul> \t\t\t\t</td> \t\t\t</tr> EOF; } } else { $IPBHTML .= <<<EOF \t\t\t\t<tr> \t\t\t\t\t<td colspan='4' class='no_messages'>{$this->lang->words['a_noapps_enabled']}</td> \t\t\t\t</tr> EOF; } $IPBHTML .= <<<EOF \t\t\t</table> \t\t</div> \t\t<script type='text/javascript'> \t\t\tjQ("#apps_enabled").ipsSortable( 'table', { \t\t\t\turl: "{$this->settings['base_url']}{$this->form_code_js}do=application_manage_position&md5check={$this->registry->adminFunctions->getSecurityKey()}".replace( /&/g, '&' ), \t\t\t\tserializeOptions: { key: 'apps[]' } \t\t\t} ); \t\t</script> \t\t \t\t<div id='tab_appsDisabled_content'> \t\t\t<table class='ipsTable'> \t\t\t\t<tr> \t\t\t\t\t<th width='1%'> </th> \t\t\t\t\t<th width='1%'> </th> \t\t\t\t\t<th width='55%'>{$this->lang->words['a_hookapp']}</th> \t\t\t\t\t<th width='15%' class='center'>{$this->lang->words['app_tab_permissions']}</th> \t\t\t\t\t<th width='20%' class='center'>{$this->lang->words['a_lastupdated']}</th> \t\t\t\t\t<th class='col_buttons'> </th> \t\t\t\t</tr> EOF; if (count($applications['disabled'])) { foreach ($applications['disabled'] as $app) { $img = is_file(IPSLib::getAppDir($app['app_directory']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($app['app_directory']) . '/' . $app['app_directory'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/images/applications/{$app['app_directory']}.png"; # IPS app? $app['titlePrefix'] = in_array($app['app_location'], array('root', 'ips')) ? "<span class='ipsBadge badge_purple'>{$this->lang->words['gl_ipsapp']}</span> " : ''; # Sort title $app['app_title'] = IN_DEV ? "<a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}'>{$app['app_title']}</a>" : $app['app_title']; $app['app_description'] = $app['app_description'] ? "<br /><span class='desctext'>{$app['app_description']}</span>" : ''; # Tab Restrictions $app['_tab_restricted'] = $app['app_hide_tab'] || IPSText::cleanPermString($app['app_tab_groups']) ? "<a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}&_tab=restrictions' title='{$this->lang->words['a_edit_restrictions']}'><img src='{$this->settings['skin_acp_url']}/images/icons/tick.png' alt='' /></a>" : ''; # Update available? if ($app['app_update_available'][0]) { $_update = "<span class='ipsBadge badge_purple'>{$this->lang->words['hook_update_available']}</span>"; if (!empty($app['app_update_available'][1])) { $_update = "<a href='{$app['app_update_available'][1]}' target='_blank'>{$_update}</a>"; } elseif ($app['app_website']) { $_update = "<a href='{$app['app_website']}' target='_blank'>{$_update}</a>"; } $app['_updated'] = $_update; } elseif (isset($app['_long_version']) && $app['_long_version'] > $app['_long_current']) { $app['_updated'] = "<a href='{$this->settings['board_url']}/" . CP_DIRECTORY . "/upgrade/' class='ipsBadge badge_green'>{$this->lang->words['a_upgradeavail']}</a>"; } else { $app['_updated'] = "<span class='desctext'>{$this->lang->words['a_oh_kay']}</span>"; } $IPBHTML .= <<<EOF \t\t\t<tr class='ipsControlRow'> \t\t\t\t<td> </td> \t\t\t\t<td> \t\t\t\t\t<img src='{$img}' alt='' /> \t\t\t\t</td> \t\t\t\t<td> \t\t\t\t\t<strong><span class='larger_text'>{$app['titlePrefix']}{$app['app_title']}</span></strong><span class='desctext'> v{$app['_human_current']}</span> \t\t\t\t\t{$app['app_description']} \t\t\t\t</td> \t\t\t\t<td class='center'>{$app['_tab_restricted']}</td> \t\t\t\t<td class='center'>{$app['_updated']}</td> \t\t\t\t<td class='col_buttons'> \t\t\t\t\t<ul class='ipsControlStrip'> \t\t\t\t\t\t<li class='i_add'><a href='{$this->settings['base_url']}{$this->form_code}do=toggle_app&app_id={$app['app_id']}' title='{$this->lang->words['a_enable_app']}'>{$this->lang->words['a_enable_app']}</a></li> \t\t\t\t\t\t<li class='i_edit'><a href='{$this->settings['base_url']}{$this->form_code}do=application_edit&app_id={$app['app_id']}' title='{$this->lang->words['a_editapp_details']}'>{$this->lang->words['a_editapp_details']}</a></li> \t\t\t\t\t\t<li class='ipsControlStrip_more ipbmenu' id='menu_{$app['app_id']}'><a href='#'>{$this->lang->words['more']}</a></li> \t\t\t\t\t</ul> \t\t\t\t\t \t\t\t\t\t<ul class='acp-menu' id='menu_{$app['app_id']}_menucontent' style='display: none'> \t\t\t\t\t\t<li class='icon view'><a href='{$this->settings['base_url']}{$this->form_code}do=application_details&app_id={$app['app_id']}'>{$this->lang->words['a_viewhook']}</a></li> \t\t\t\t\t\t<li class='icon manage'><a href='{$this->settings['base_url']}{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=1'>{$this->lang->words['a_manageadmin']}</a></li> \t\t\t\t\t\t<li class='icon manage'><a href='{$this->settings['base_url']}{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=0'>{$this->lang->words['a_managepublic']}</a></li> EOF; if ($app['app_protected'] != 1 or IN_DEV) { $IPBHTML .= <<<EOF \t\t\t\t\t\t<li class='icon delete'><a href='{$this->settings['base_url']}{$this->form_code}do=application_remove_splash&app_id={$app['app_id']}'>{$this->lang->words['a_removeapp']}</a></li> EOF; } $IPBHTML .= <<<EOF \t\t\t\t\t</ul> \t\t\t\t</td> \t\t\t</tr> EOF; } } else { $IPBHTML .= <<<EOF \t\t\t\t<tr> \t\t\t\t\t<td colspan='4' class='no_messages'>{$this->lang->words['a_noapps_disabled']}</td> \t\t\t\t</tr> EOF; } $IPBHTML .= <<<EOF \t\t\t</table> \t\t</div> \t\t \t</div> </div> <script type='text/javascript'> \tjQ("#tabstrip_appsList").ipsTabBar({ tabWrap: "#tabstrip_appsList_content" }); </script> <!-- RIGHT SIDEBAR --> <div class='right' style='width: 30%'> EOF; if (is_array($uninstalled) and count($uninstalled)) { $IPBHTML .= <<<EOF \t<div class='acp-box'> \t\t<h3>{$this->lang->words['a_unapps']}</h3> \t \t<table class='ipsTable'> EOF; foreach ($uninstalled as $app) { if (strstr($app['path'], 'applications_addon/ips')) { $app['_location'] = 'ips'; $img = "<img src='{$this->settings['skin_acp_url']}/images/icons/medal.png' title='{$this->lang->words['a_officialapp']}' />"; } else { if (strstr($app['path'], 'applications_addon/other')) { $app['_location'] = 'other'; $img = ''; } else { $app['_location'] = 'root'; $img = "<img src='{$this->settings['skin_acp_url']}/images/icons/medal.png' title='{$this->lang->words['a_officialapp']}' />"; } } if ($app['okToGo']) { $warning = ''; $install = <<<EOF \t\t<a href='{$this->settings['base_url']}module=applications&section=setup&do=install&app_directory={$app['directory']}&app_location={$app['_location']}' class='ipsBadge badge_purple'>{$this->lang->words['a_install']}</a> EOF; } else { $install = "<span class='ipsBadge badge_grey'>{$this->lang->words['a_cannotinstall']}</span>"; $warning = <<<EOF \t\t\t\t<br /><span style='color: red'>{$this->lang->words['a_cantinstall_info']}</span> EOF; } $install = $canInstall ? $install : ''; $IPBHTML .= <<<EOF \t<tr> \t\t<td style='width: 16px; padding: 10px 0 10px 6px; text-align: center; vertical-align: top'> \t\t\t{$img} \t\t</td> \t\t<td> \t\t\t<strong>{$app['title']}</strong><br /> \t\t\t<span class='desctext'>{$app['author']}</span> \t\t\t{$warning} \t\t</td> \t\t<td style='width: 20%'> \t\t\t{$install} \t\t</td> \t</tr> EOF; } $IPBHTML .= <<<EOF \t </table> \t</div> EOF; } if (!IPSLib::appIsInstalled('nexus', false) and !isset($uninstalled['nexus']) or !IPSLib::appIsInstalled('blog', false) and !isset($uninstalled['blog']) or !IPSLib::appIsInstalled('gallery', false) and !isset($uninstalled['gallery']) or !IPSLib::appIsInstalled('ccs', false) and !isset($uninstalled['ccs']) or !IPSLib::appIsInstalled('downloads', false) and !isset($uninstalled['downloads']) or !$this->settings['ips_cp_purchase']) { $IPBHTML .= <<<EOF \t<br /> \t<div class='acp-box'> \t\t<table class='ipsTable'> EOF; foreach (array('nexus', 'blog', 'gallery', 'ccs', 'downloads') as $__app) { if (!IPSLib::appIsInstalled($__app, false) and !isset($uninstalled[$__app])) { $_app_name = $__app == 'ccs' ? 'Content' : ucfirst($__app); $IPBHTML .= <<<EOF \t\t\t<tr> \t\t\t\t<td style='width: 16px;'> \t\t\t\t\t<img src='{$this->settings['skin_acp_url']}/images/icon_components/{$__app}.png' alt='' /> \t\t\t\t</td> \t\t\t\t<td> \t\t\t\t\t<a href='{$this->settings['base_url']}module=applications&section={$__app}'>IP.{$_app_name}</a> \t\t\t\t</td> \t\t\t</tr> EOF; } } if (!$this->settings['ips_cp_purchase']) { $IPBHTML .= <<<EOF \t\t\t<tr> \t\t\t\t<td style='width: 16px'> \t\t\t\t\t<img src='{$this->settings['skin_acp_url']}/images/icons/package.png' alt='' /> \t\t\t\t</td> \t\t\t\t<td> \t\t\t\t\t<a href='{$this->settings['base_url']}module=applications&section=copyright'>Copyright Removal</a> \t\t\t\t</td> \t\t\t</tr> EOF; } $IPBHTML .= <<<EOF \t\t</table> \t</div> EOF; } $IPBHTML .= <<<EOF </div> EOF; //--endhtml--// return $IPBHTML; }
/** * Setting titles wrapper * * @param array Setting groups * @param string Application tab to start on * @return string HTML */ public function settings_titles_wrapper($settings, $start_app = '') { $IPBHTML = ""; //--starthtml--// $_default_tab = !empty($this->request['_dtab']) ? $this->request['_dtab'] : 'System'; $IPBHTML .= <<<EOF <div class='section_title'> \t<h2>{$this->lang->words['tol_settings']}</h2> \t<div class='ipsActionBar clearfix'> \t\t<ul> \t\t\t<li class='ipsActionButton'> \t\t\t\t<a href='{$this->settings['base_url']}{$this->form_code}do=settinggroup_new'><img src='{$this->settings['skin_acp_url']}/images/icons/table_add.png' alt='' /> {$this->lang->words['tol_add_new_setting_group']}</a> \t\t\t</li> \t\t\t<!--<li class='ipsActionButton'> \t\t\t\t<a href='#'><img src='{$this->settings['skin_acp_url']}/images/icons/import.png' alt='' /> {$this->lang->words['tol_import_xml_settings']}</a> \t\t\t</li>--> \t\t\t<li class='ipsActionButton inDev'><a href='{$this->settings['base_url']}{$this->form_code}&do=settingsImportApps'><img src='{$this->settings['skin_acp_url']}/images/icons/import.png' alt='' /> Import All XML Settings</a></li> \t\t\t<li class='ipsActionButton inDev'><a href='{$this->settings['base_url']}{$this->form_code}&do=settingsExportApps'><img src='{$this->settings['skin_acp_url']}/images/icons/export.png' alt='' /> Export All XML Settings</a></li> \t\t</ul> \t</div> </div> <div class='acp-box'> <h3>{$this->lang->words['tol_settings_groups']}</h3>\t <div id='tabstrip_settings' class='ipsTabBar with_left with_right'> \t<span class='tab_left'>«</span> \t<span class='tab_right'>»</span> \t<ul> EOF; foreach ($settings as $tab => $group) { if (ipsRegistry::$request['app'] and $tab == ipsRegistry::$request['app']) { $_default_tab = $tab; } $_tab = IPSText::md5Clean($tab); $IPBHTML .= <<<EOF \t<li id='tab_{$_tab}'>{$tab}</li> \t EOF; } $IPBHTML .= <<<EOF \t</ul> </div> <div id='tabstrip_settings_content' class='ipsTabBar_content'> EOF; foreach ($settings as $tab => $app_data) { $_tab = IPSText::md5Clean($tab); $IPBHTML .= <<<EOF \t<div id='tab_{$_tab}_content'> \t\t<table class='ipsTable double_pad'> \t\t EOF; foreach ($app_data as $r) { if (IN_DEV) { $export_settings_group = "<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=MOD_export_setting&conf_group={$r['conf_title_id']}' title='{$this->lang->words['export_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/export_settings_group.png' alt='' /> {$this->lang->words['export_group']}</a>\r\n\t\t\t\t</li>"; } $img = is_file(IPSLib::getAppDir($r['conf_title_app']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($r['conf_title_app']) . '/' . $r['conf_title_app'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/images/applications/{$r['conf_title_app']}.png"; $IPBHTML .= <<<EOF \t\t<tr class='ipsControlRow'> \t\t \t<td width='3%' style='text-align: center'><img src='{$img}' alt='{$this->lang->words['tol_folder']}' /></td> \t\t \t<td width='80%'> \t\t\t\t<a href='{$this->settings['base_url']}&{$this->form_code}&do=setting_view&conf_group={$r['conf_title_id']}' class='larger_text'><b>{$r['conf_title_title']}</b></a> \t\t\t\t<span class='desctext'>({$r['conf_title_count']} {$this->lang->words['settings_suffix']})</span> EOF; if ($r['conf_title_desc']) { $IPBHTML .= <<<EOF \t\t\t\t<br /><span class='desctext'>{$r['conf_title_desc']}</span> EOF; } $IPBHTML .= <<<EOF \t\t\t</td> \t\t\t<td class='col_buttons'> \t\t\t\t<ul class='ipsControlStrip'> \t\t\t\t\t<li class='i_edit'> \t\t\t\t\t\t<a href='{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_showedit&id={$r['conf_title_id']}' title='{$this->lang->words['tol_edit_settings_group']}'>{$this->lang->words['tol_edit_settings_group']}</a> \t\t\t\t\t</li> \t\t\t\t\t<li class='i_delete'> \t\t\t\t\t\t<a href='#' onclick='return acp.confirmDelete("{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_delete&id={$r['conf_title_id']}");' title='{$this->lang->words['tol_delete_settings_group']}'>{$this->lang->words['tol_delete_settings_group']}</a> \t\t\t\t\t</li> \t\t\t\t\t<li class='ipsControlStrip_more'> \t\t\t\t\t\t<a href='#' id="menu{$r['conf_title_id']}" class='ipbmenu'>{$this->lang->words['frm_options']}</a> \t\t\t\t\t</li> \t\t\t\t</ul>\t \t\t\t\t<ul class='acp-menu' id='menu{$r['conf_title_id']}_menucontent' style='display: none'> \t\t\t\t\t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_resync&id={$r['conf_title_id']}' title='{$this->lang->words['tol_recount_settings_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/rebuild_settings_group.png' alt='Icon' /> {$this->lang->words['tol_recount_settings_group']}</a></li> \t\t\t\t\t{$export_settings_group} \t\t\t\t</ul> \t\t\t</td> \t\t</tr> EOF; } $IPBHTML .= <<<EOF \t\t</table> \t</div> \t EOF; } $IPBHTML .= <<<EOF </div> </div> <script type='text/javascript'> \tjQ("#tabstrip_settings").ipsTabBar({tabWrap: "#tabstrip_settings_content", defaultTab: "tab_{$_default_tab}" }); </script> <br /> <form action='{$this->settings['base_url']}&{$this->form_code}&do=settings_do_import' enctype='multipart/form-data' method='post'> \t<div class='acp-box'> \t\t<h3>{$this->lang->words['tol_import_xml_settings']}</h3> \t\t<table class='ipsTable double_pad'> \t\t\t<tr> \t\t\t\t<td class='field_title'><strong class='title'>{$this->lang->words['tol_upload_xml_settings_file_from_']}</strong></td> \t\t\t\t<td class='field_field'><input class='textinput' type='file' size='30' name='FILE_UPLOAD' /><br /><span class='desctext'>{$this->lang->words['tol_duplicate_entries_will_not_be_']}</span></td> \t\t\t</tr> \t\t\t<tr> \t\t\t\t<td class='field_title'><strong class='title'>{$this->lang->words['tol_or_enter_the_filename_of_the_x']}</strong></td> \t\t\t\t<td class='field_field'><input class='textinput' type='text' size='30' name='file_location' /><br /><span class='desctext'>{$this->lang->words['tol_the_file_must_be_uploaded_into']}</span></td> \t\t\t</tr> \t\t</table> \t\t<div class='acp-actionbar'> \t\t\t<input type='submit' class='button primary' value='{$this->lang->words['t_import']}' /> \t\t</div> \t</div> </form> EOF; //--endhtml--// return $IPBHTML; }
/** * Generate the application menu HTML * * @access public * @return string HTML */ public function global_app_menu_html() { $IPBHTML = ""; //--starthtml--// $applications = ipsRegistry::$applications; $count = 0; $this->registry->getClass('class_permissions')->return = 1; foreach ($applications as $app_dir => $app_data) { $class = ''; $tag = ''; //if ( $app_data['app_directory'] == 'core' ) if ($app_data['app_location'] == 'root' || $this->registry->getClass('class_permissions')->checkForAppAccess($app_data['app_directory']) !== TRUE || !$applications[$app_dir]['app_enabled']) { //$_extraCSS = 'display:none'; continue; } if ($app_data['app_location'] == 'ips') { $class = 'ips_app'; $tag = $this->lang->words['gl_ipsapp']; } $img = file_exists(IPSLib::getAppDir($app_data['app_directory']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($app_data['app_directory']) . '/' . $app_data['app_directory'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/_newimages/applications/{$app_dir}.png"; $IPBHTML .= <<<EOF \t<li id='app_{$app_dir}' class='{$class}'> \t\t<a href='{$this->settings['_base_url']}app={$app_data['app_directory']}'><img src='{$img}' alt='{$app_dir}' /> \t\t<strong>{$app_data['app_title']}</strong> \t\t<span class='tagline'>{$tag}</span> \t\t</a> \t</li> EOF; $count++; } if (!$count) { $IPBHTML .= <<<EOF \t<li id='app_manageapps' class='ips_app'> \t\t<a href='{$this->settings['_base_url']}app=core&module=applications&section=applications&do=applications_overview'><img src='{$this->settings['skin_acp_url']}/_newimages/applications/{$app_dir}.png' alt='{$app_dir}' /> \t\t<strong>{$this->lang->words['gl_manageapps']}</strong></a> \t</li> EOF; } //--endhtml--// return $IPBHTML; }
/** * Check DB * * @return void */ public function install_checkdb() { //----------------------------------------- // INIT //----------------------------------------- ipsRegistry::getClass('class_localization')->loadLanguageFile(array('admin_system'), 'core'); ipsRegistry::$settings['base_url'] = ipsRegistry::$settings['board_url']; ipsRegistry::$settings['public_url'] = ipsRegistry::$settings['board_url'] . '/index.php?'; ipsRegistry::$settings['public_dir'] = ipsRegistry::$settings['board_url'] . '/' . PUBLIC_DIRECTORY . '/'; ipsRegistry::$settings['base_acp_url'] = ipsRegistry::$settings['base_url'] . '/' . CP_DIRECTORY; ipsRegistry::$settings['skin_acp_url'] = ipsRegistry::$settings['base_url'] . '/' . CP_DIRECTORY . "/skin_cp"; ipsRegistry::$settings['skin_app_url'] = ipsRegistry::$settings['skin_acp_url']; ipsRegistry::$settings['js_main_url'] = ipsRegistry::$settings['base_url'] . '/' . CP_DIRECTORY . '/js/'; ipsRegistry::$settings['js_app_url'] = ipsRegistry::$settings['base_url'] . '/' . CP_DIRECTORY . '/' . IPSLib::getAppFolder($_app) . '/' . $_app . '/js/'; ipsRegistry::$settings['base_url'] = ipsRegistry::$settings['base_url'] . '/' . CP_DIRECTORY . '/upgrade/index.php?'; ipsRegistry::$settings['_base_url'] = ipsRegistry::$settings['base_url']; $_class = IPSLib::loadActionOverloader(IPS_ROOT_PATH . '/applications/core/modules_admin/diagnostics/diagnostics.php', 'admin_core_diagnostics_diagnostics'); $_check = new $_class(ipsRegistry::instance()); if (method_exists($_check, 'makeRegistryShortcuts')) { $_check->makeRegistryShortcuts(ipsRegistry::instance()); } $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('core') . '/skin_cp/cp_skin_diagnostics.php', 'cp_skin_diagnostics', 'core'); $_check->html = new $classToLoad(ipsRegistry::instance()); $_check->form_code = $_check->html->form_code = 'app=upgrade&s=' . $this->request['s']; $_check->form_code_js = $_check->html->form_code_js = 'app=upgrade&s=' . $this->request['s']; $_check->_dbCheck(); if (strpos($this->registry->output->html, "<!--NOERRORSFOUND-->") !== false) { $this->_finishStep(array("Проверка БД закончена - Проблем не обнаружено"), "Обновление: Проверка БД", 'upgrade&do=modules'); return; } $this->registry->output->html = str_replace("module=diagnostics", '', $this->registry->output->html); $this->registry->output->html = str_replace("section=diagnostics", 'section=upgrade', $this->registry->output->html); $this->registry->output->html = str_replace("do=dbchecker", 'do=checkdb', $this->registry->output->html); $this->registry->output->addContent($this->registry->output->template()->db_checker_css() . $this->registry->output->html); $this->registry->output->setTitle("Upgrade: Database Checker"); $this->registry->output->setNextAction('upgrade&do=modules'); $this->registry->output->setInstallStep($this->_stepCount, $this->_totalSteps); $this->registry->output->sendOutput(); //----------------------------------------- // Next... //----------------------------------------- //$output[] = "Database Check Complete"; //$this->_finishStep( $output, "Upgrade: DB Check", 'upgrade&do=modules' ); }
/** * List applications * * @return @e void [Outputs to screen] */ public function applicationsOverview() { /* Init vars */ $folders = array(); $applications = array('enabled' => array('core' => array()), 'disabled' => array()); $_apps = array(); $uninstalled = array(); $checkUpdates = false; $appsUpdates = 0; $message = ''; /* Get the setup class */ require_once IPS_ROOT_PATH . "setup/sources/base/setup.php"; /*noLibHook*/ /* Checking for updates? */ if (!empty($this->request['checkUpdates'])) { $checkUpdates = true; /* Get hooks file for update check */ $classToLoad = IPSLib::loadActionOverloader(IPSLib::getAppDir('core') . '/modules_admin/applications/hooks.php', 'admin_core_applications_hooks'); $hooksClass = new $classToLoad(); $hooksClass->makeRegistryShortcuts($this->registry); } //----------------------------------------- // Get DB applications //----------------------------------------- $this->DB->build(array('select' => '*', 'from' => 'core_applications', 'order' => 'app_position')); $this->DB->execute(); while ($row = $this->DB->fetch()) { /* Got updates? */ if ($row['app_update_check'] && $checkUpdates === true) { $row['app_update_available'] = $hooksClass->_updateAvailable($row['app_update_check'], $row['app_long_version']); if ($row['app_update_available'][0]) { $appsUpdates++; } } else { $row['app_update_available'] = array(0); } $_apps[IPSLib::getAppFolder($row['app_directory']) . '/' . $row['app_directory']] = $row; } //----------------------------------------- // Get folder applications... //----------------------------------------- foreach (array('applications', 'applications_addon/ips', 'applications_addon/other') as $folder) { try { foreach (new DirectoryIterator(IPS_ROOT_PATH . $folder) as $file) { if (!$file->isDot() and $file->isDir()) { $_name = $file->getFileName(); if (substr($_name, 0, 1) != '.') { $folders[$folder . '/' . $_name] = $_name; } } } } catch (Exception $e) { } } //----------------------------------------- // Installed Loop... //----------------------------------------- foreach ($_apps as $_app_path => $row) { $app_dir = $row['app_directory']; /* Version numbers */ $_a = ($app_dir == 'forums' or $app_dir == 'members') ? 'core' : $app_dir; $numbers = IPSSetUp::fetchAppVersionNumbers($_a); $row['_human_version'] = $numbers['latest'][1]; $row['_long_version'] = $numbers['latest'][0]; $row['_human_current'] = $numbers['current'][1]; $row['_long_current'] = $numbers['current'][0]; /* Nexus? */ if ($row['app_directory'] == 'nexus') { $encoding = 'Unencoded'; $file = file_get_contents(IPSLib::getAppDir('nexus') . '/app_class_nexus.php'); if (substr($file, 6, 5) == '@Zend') { $phpVersion = phpversion(); $phpVersion = str_replace(substr($phpVersion, strrpos($phpVersion, '.')), '', $phpVersion); $encoding = "Zend {$phpVersion}"; } elseif (substr($file, 36, 7) == 'ionCube' or substr($file, 37, 7) == 'ionCube') { $encoding = 'Ioncube'; } $row['_human_current'] .= " ({$encoding})"; } if ($row['app_enabled']) { $applications['enabled'][$row['app_directory']] = $row; } else { $applications['disabled'][$row['app_directory']] = $row; } } //----------------------------------------- // Uninstalled //----------------------------------------- foreach ($folders as $filepath => $_file) { if (!in_array($filepath, array_keys($_apps))) { $info = IPSSetUp::fetchXmlAppInformation($_file, $this->settings['gb_char_set']); /* OK, we're making no effort to conceal the secret behind the ipskey. It's an honourable setting - do not abuse it. We only mildly obfuscate it to stop copy and paste mistakes in information.xml */ $okToGo = 0; if (strstr($filepath, 'applications_addon/ips') or strstr($filepath, 'applications/')) { if (md5('ips_' . $_file) == $info['ipskey']) { $okToGo = 1; } } else { if (strstr($filepath, 'applications_addon/other')) { if (!$info['ipskey']) { $okToGo = 1; } } } if ($info['name'] && $info['key'] != "ipseo") { $uninstalled[$_file] = array('title' => $info['name'], 'author' => $info['author'], 'path' => $filepath, 'okToGo' => $okToGo, 'directory' => $_file); } } } /* Got updates to show? */ if ($checkUpdates === true) { $message = $appsUpdates == 1 ? $this->lang->words['updates_string_single'] : sprintf($this->lang->words['updates_string_more'], $appsUpdates); } /* Output */ $this->registry->output->html .= $this->html->applications_list($applications, $uninstalled, $message); }
/** * List the applications * * @access public * @param array Application * @param array Uninstalled applications * @return string HTML */ public function applications_list($applications, $uninstalled = array()) { $IPBHTML = ""; //--starthtml--// if (!IPSLib::appIsInstalled('blog') or !IPSLib::appIsInstalled('gallery') or !IPSLib::appIsInstalled('downloads') or !$this->settings['ips_cp_purchase']) { $IPBHTML .= <<<EOF <div class='section_title'> \t<h2>{$this->lang->words['purchase_additional']}</h2> </div> EOF; if (!IPSLib::appIsInstalled('blog')) { $IPBHTML .= <<<EOF <div class='menulinkwrap'> \t<img src='{$this->settings['skin_acp_url']}/images/icon_components/blog/blog.png' border='0' alt='' style='vertical-align:bottom' /> \t<a href='{$this->settings['base_url']}&core&module=applications&section=blog' style='text-decoration:none'>IP.Blog</a> </div> EOF; } if (!IPSLib::appIsInstalled('gallery')) { $IPBHTML .= <<<EOF <div class='menulinkwrap'> \t<img src='{$this->settings['skin_acp_url']}/images/icon_components/gallery/gallery.png' border='0' alt='' style='vertical-align:bottom' /> \t<a href='{$this->settings['base_url']}&core&module=applications&section=gallery' style='text-decoration:none'>IP.Gallery</a> </div> EOF; } if (!IPSLib::appIsInstalled('downloads')) { $IPBHTML .= <<<EOF <div class='menulinkwrap'> \t<img src='{$this->settings['skin_acp_url']}/images/icon_components/downloads/downloads.png' border='0' alt='' style='vertical-align:bottom' /> \t<a href='{$this->settings['base_url']}&core&module=applications&section=downloads' style='text-decoration:none'>IP.Downloads</a> </div> EOF; } if (!$this->settings['ips_cp_purchase']) { $IPBHTML .= <<<EOF <div class='menulinkwrap'> \t<img src='{$this->settings['skin_acp_url']}/_newimages/icons/package.png' border='0' alt='' style='vertical-align:bottom' /> \t<a href='{$this->settings['base_url']}&core&module=applications&section=copyright' style='text-decoration:none'>Copyright Removal</a> </div> EOF; } } $IPBHTML .= <<<EOF <div class='section_title'> \t<h2>{$this->lang->words['a_apps']}</h2> \t<ul class='context_menu'> \t\t<li><a href='{$this->settings['base_url']}&core&module=applications&section=applications&do=application_add'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/application_add.png' /> {$this->lang->words['a_addnewapp']}</a></li> \t\t<li><a href='{$this->settings['base_url']}&core&module=applications&section=applications&do=module_recache_all'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/arrow_refresh.png' /> {$this->lang->words['recache_link']}</a></li> \t\t<li><a href='{$this->settings['base_url']}&core&module=applications&section=applications&do=seoRebuild' title='{$this->lang->words['rebuild_furl_title']}'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/arrow_refresh.png' /> {$this->lang->words['rebuild_furl_link']}</a></li> \t\t<li><a href='{$this->settings['base_url']}&core&module=applications&section=applications&do=application_export'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/page_white_code.png' /> {$this->lang->words['export_xml']}</a></li> EOF; if ($this->settings['search_method'] == 'sphinx') { $IPBHTML .= <<<EOF \t\t<li><a href='{$this->settings['base_url']}&core&module=applications&section=applications&do=build_sphinx'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/cog.png' /> {$this->lang->words['build_sphinx_link']}</a></li> EOF; } $IPBHTML .= <<<EOF \t</ul> </div> <div class='acp-box'> \t<h3>{$this->lang->words['a_installedapps']}</h3> \t<div> \t\t<table width='100%' border='0' cellspacing='0' cellpadding='0'> \t\t\t<tr> \t\t\t\t<td class='tablesubheader' style='width: 2%'> </td> \t\t\t\t<td class='tablesubheader' style='width: 2%'> </td> \t\t\t\t<td class='tablesubheader' style='width: 38%'>{$this->lang->words['a_app']}</td> \t\t\t\t<td class='tablesubheader' style='width: 20%; text-align: center;'>{$this->lang->words['a_status']}</td> \t\t\t\t<td class='tablesubheader' style='width: 18%; text-align: center;'>{$this->lang->words['a_version']}</td> \t\t\t\t<td class='tablesubheader' style='width: 5%; text-align: center;'>{$this->lang->words['a_enabled']}</td> \t\t\t\t<td class='tablesubheader' style='width: 5%; text-align: center;'> </td> \t\t\t</tr> \t\t</table> \t</div> EOF; $incrementer = 1; foreach ($applications as $local => $apps) { if (!count($apps)) { continue; } if ($local == 'ips') { $app['titlePrefix'] = $this->lang->words['a_ips']; } else { if ($local == 'other') { $app['titlePrefix'] = $this->lang->words['a_thirdparty']; } else { $app['titlePrefix'] = $this->lang->words['a_rootapps']; } } $IPBHTML .= <<<EOF \t<ul id='handle_{$incrementer}' class='alternate_rows'> \t\t<li class='tablesubsubheader'> \t\t\t<strong>{$app['titlePrefix']}</strong> \t\t</li> EOF; foreach ($apps as $app) { $img = file_exists(IPSLib::getAppDir($app['app_directory']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($app['app_directory']) . '/' . $app['app_directory'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/_newimages/applications/{$app['app_directory']}.png"; $IPBHTML .= <<<EOF \t\t<li class='isDraggable' style='width:100%;' id='app_{$app['app_id']}'> \t\t\t<table width='100%' cellpadding='0' cellspacing='0' class='double_pad'> \t\t\t\t<tr> \t\t\t\t\t<td style='width: 2%'> \t\t\t\t\t\t<div class='draghandle'><img src='{$this->settings['skin_acp_url']}/_newimages/drag_icon.png' alt='drag' /></div> \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 2%'> \t\t\t\t\t\t<img src='{$img}' /> \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 38%'> \t\t\t\t\t\t<a href='{$this->settings['base_url']}&{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=1'><strong>{$app['titlePrefix']}{$app['app_title']}</strong></a> \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 20%; text-align: center;'> EOF; if (isset($app['_long_version']) && $app['_long_version'] > $app['_long_current']) { $IPBHTML .= "<a href='{$this->settings['board_url']}/" . CP_DIRECTORY . "/upgrade/' style='color:green; font-weight: bold;'>{$this->lang->words['a_upgradeavail']}</a>"; } else { $IPBHTML .= "<span class='desctext'>{$this->lang->words['a_oh_kay']}</span>"; } $IPBHTML .= <<<EOF \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 18%; text-align: center;'> \t\t\t\t\t\t{$app['_human_current']} \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 5%; text-align: center;'> \t\t\t\t\t\t<a href='{$this->settings['base_url']}{$this->form_code}&do=toggle_app&app_id={$app['app_id']}' title='{$this->lang->words['toggle_app_enabled']}'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/{$app['_app_enabled']}' class='ipd' /></a> \t\t\t\t\t</td> \t\t\t\t\t<td style='width: 5%; text-align: center;'> \t\t\t\t\t\t<img class='ipbmenu' id="menu_{$app['app_id']}" src='{$this->settings['skin_acp_url']}/_newimages/menu_open.png' alt='{$this->lang->words['a_options']}' /> \t\t\t\t\t\t<ul class='acp-menu' id='menu_{$app['app_id']}_menucontent'> EOF; if ($app['app_protected'] != 1 or IN_DEV) { $IPBHTML .= <<<EOF \t\t\t\t\t\t\t<li class='icon delete'><a href='#' onclick='return acp.confirmDelete("{$this->settings['base_url']}&{$this->form_code}&do=application_remove_splash&app_id={$app['app_id']}");'>{$this->lang->words['a_removeapp']}</a></li> \t\t\t\t\t\t\t<li class='icon edit'><a href='{$this->settings['base_url']}&{$this->form_code}&do=application_edit&app_id={$app['app_id']}'>{$this->lang->words['a_editapp']}</a></li> EOF; } $IPBHTML .= <<<EOF \t\t\t\t\t\t\t<li class='icon view'><a href='{$this->settings['base_url']}&{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=1'>{$this->lang->words['a_manageadmin']}</a></li> \t\t\t\t\t\t\t<li class='icon view'><a href='{$this->settings['base_url']}&{$this->form_code}&do=modules_overview&app_id={$app['app_id']}&sys_module_admin=0'>{$this->lang->words['a_managepublic']}</a></li> \t\t\t\t\t\t</ul> \t\t\t\t\t</td> \t\t\t\t</tr> \t\t\t</table> \t\t</li> EOF; } $IPBHTML .= <<<EOF </ul> \t\t<script type="text/javascript"> \t\tdropItLikeItsHot{$incrementer} = function( draggableObject, mouseObject ) \t\t{ \t\t\tvar options = { \t\t\t\t\t\t\tmethod : 'post', \t\t\t\t\t\t\tparameters : Sortable.serialize( 'handle_{$incrementer}', { tag: 'li', name: 'apps' } ) \t\t\t\t\t\t}; \t\t\tnew Ajax.Request( "{$this->settings['base_url']}&{$this->form_code_js}&do=application_manage_position&md5check={$this->registry->adminFunctions->getSecurityKey()}".replace( /&/g, '&' ), options ); \t\t\treturn false; \t\t}; \t\tSortable.create( 'handle_{$incrementer}', { only: 'isDraggable', revert: true, format: 'app_([0-9]+)', onUpdate: dropItLikeItsHot{$incrementer}, handle: 'draghandle' } ); \t\t</script> EOF; $incrementer++; } $IPBHTML .= <<<EOF <div align='center' class='tablefooter'> </div> </div> EOF; if (is_array($uninstalled) and count($uninstalled)) { $IPBHTML .= <<<EOF <br /> <div class='acp-box'> \t<h3>{$this->lang->words['a_unapps']}</h3> \t<table cellpadding='0' cellspacing='0' border='0' width='100%'> \t\t<tr> \t\t\t<td width='1%' class='tablesubheader'> </td> \t\t\t<td width='44%' class='tablesubheader'>{$this->lang->words['a_app']}</td> \t\t\t<td width='30%' align='center' class='tablesubheader'>{$this->lang->words['a_author']}</td> \t\t\t<td width='15%' align='center' class='tablesubheader'> </td> \t\t</tr> EOF; foreach ($uninstalled as $app) { if (strstr($app['path'], 'applications_addon/ips')) { $app['titlePrefix'] = $this->lang->words['a__ips']; $app['_location'] = 'ips'; } else { if (strstr($app['path'], 'applications_addon/other')) { $app['titlePrefix'] = $this->lang->words['a__thidparty']; $app['_location'] = 'other'; } else { $app['titlePrefix'] = $this->lang->words['a__rootapp']; $app['_location'] = 'root'; } } if ($app['okToGo']) { $warning = ''; $install = <<<EOF \t\t<a href='{$this->settings['base_url']}&module=applications&section=setup&do=install&app_directory={$app['directory']}&app_location={$app['_location']}' style='color:red'>{$this->lang->words['a_install']}</a> EOF; } else { $install = $this->lang->words['a_cannotinstall']; $warning = <<<EOF \t\t\t\t<div class='ok-box' style='margin-top:3px'>{$this->lang->words['a_cantinstall_info']}</div> EOF; } $IPBHTML .= <<<EOF <tr> <td align='center' class='tablerow1'><img src='{$this->settings['skin_acp_url']}/images/folder_components/applications/app_row_uninstalled.png' /></td> <td class='tablerow1'><strong>{$app['titlePrefix']}{$app['title']}</strong>{$warning}</td> <td align='center' class='tablerow2'>{$app['author']}</td> <td align='center' class='tablerow2'>{$install}</td> </tr> EOF; } $IPBHTML .= <<<EOF </table> <div align='center' class='tablefooter'> </div> </div> EOF; if (IN_DEV) { $IPBHTML .= <<<EOF <ul> <li><a href='{$this->settings['base_url']}{$this->form_code}&do=inDevExportAll'>In Dev: EXPORT All Module XML</a></li> \t<li><a href='{$this->settings['base_url']}{$this->form_code}&do=inDevRebuildAll'>In Dev: IMPORT All Module XML</a></li> </ul> \t EOF; } } //--endhtml--// return $IPBHTML; }
/** * Setting titles wrapper * * @access public * @param string Title * @param array Setting groups * @param string Application tab to start on * @return string HTML */ public function settings_titles_wrapper($title, $settings, $start_app = '') { $IPBHTML = ""; //--starthtml--// $_default_tab = isset($this->request['_dtab']) && $this->request['_dtab'] ? $this->request['_dtab'] : 'System'; $IPBHTML .= <<<EOF <div class='section_title'> \t<h2>{$this->lang->words['tol_settings']}</h2> \t<ul class='context_menu'> \t\t<li> \t\t\t<a href='{$this->settings['base_url']}module=tools&section=settings&do=settinggroup_new' style='text-decoration:none'><img src='{$this->settings['skin_acp_url']}/_newimages/icons/table_add.png' alt='' /> {$this->lang->words['tol_add_new_setting_group']}</a> \t\t</li> \t</ul> </div> <br /> <ul id='tabstrip_settings' class='tab_bar no_title'> EOF; foreach ($settings as $tab => $group) { if (ipsRegistry::$request['app'] and $tab == ipsRegistry::$request['app']) { $_default_tab = $tab; } $_tab = IPSText::md5Clean($tab); $IPBHTML .= <<<EOF \t<li id='tabtab-{$_tab}'>{$tab}</li> \t EOF; } $IPBHTML .= <<<EOF </ul> <script type="text/javascript"> //<![CDATA[ document.observe("dom:loaded",function() { ipbAcpTabStrips.register('tabstrip_settings'); ipbAcpTabStrips.doToggle(\$('tabtab-{$_default_tab}')); }); //]]> </script> <div class='acp-box'> EOF; foreach ($settings as $tab => $app_data) { $_tab = IPSText::md5Clean($tab); $IPBHTML .= <<<EOF \t<div id='tabpane-{$_tab}'> \t\t<table width='100%' class='alternate_rows double_pad' cellpadding='0' cellspacing='0' border='0'> \t\t EOF; foreach ($app_data as $r) { if (IN_DEV) { $export_settings_group = "<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=MOD_export_setting&conf_group={$r['conf_title_id']}' title='{$this->lang->words['export_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/export_settings_group.png' alt='Icon' /> {$this->lang->words['export_group']}</a>\n\t\t\t\t</li>"; } $img = file_exists(IPSLib::getAppDir($r['conf_title_app']) . '/skin_cp/appIcon.png') ? $this->settings['base_acp_url'] . '/' . IPSLib::getAppFolder($r['conf_title_app']) . '/' . $r['conf_title_app'] . '/skin_cp/appIcon.png' : "{$this->settings['skin_acp_url']}/_newimages/applications/{$r['conf_title_app']}.png"; $IPBHTML .= <<<EOF \t\t<tr> \t\t \t<td width='3%' style='text-align: center'><img src='{$img}' alt='{$this->lang->words['tol_folder']}' /></td> \t\t \t<td width='90%'> \t\t\t\t<a href='{$this->settings['base_url']}&{$this->form_code}&do=setting_view&conf_group={$r['conf_title_id']}'><b>{$r['conf_title_title']}</b></a> \t\t\t\t<span style='color:gray'>({$r['conf_title_count']} settings)</span><br /> \t\t\t\t<span class='desctext'>{$r['conf_title_desc']}</span> \t\t\t</td> \t\t\t<td style='width: 3%'> \t\t\t\t<img class='ipbmenu' id="menu{$r['conf_title_id']}" src='{$this->settings['skin_acp_url']}/_newimages/menu_open.png' alt='{$this->lang->words['frm_options']}' /> \t\t\t\t<ul class='acp-menu' id='menu{$r['conf_title_id']}_menucontent'> \t\t\t\t\t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=setting_view&conf_group={$r['conf_title_id']}' title='{$this->lang->words['tol_manage_settings']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/manage_settings.png' alt='Icon' /> {$this->lang->words['tol_manage_settings']}</a></li> \t\t\t\t\t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_showedit&id={$r['conf_title_id']}' title='{$this->lang->words['tol_edit_settings_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/edit_settings_group.png' alt='Icon' /> {$this->lang->words['tol_edit_settings_group']}</a></li> \t\t\t\t\t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_delete&id={$r['conf_title_id']}' title='{$this->lang->words['tol_delete_settings_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/delete_settings_group.png' alt='Icon' /> {$this->lang->words['tol_delete_settings_group']}</a></li> \t\t\t\t\t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settinggroup_resync&id={$r['conf_title_id']}' title='{$this->lang->words['tol_recount_settings_group']}'><img src='{$this->settings['skin_acp_url']}/images/options_menu/rebuild_settings_group.png' alt='Icon' /> {$this->lang->words['tol_recount_settings_group']}</a></li> \t\t\t\t\t{$export_settings_group} \t\t\t\t</ul> \t\t\t</td> \t\t</tr> EOF; } $IPBHTML .= <<<EOF \t\t</table> \t</div> \t EOF; } $IPBHTML .= <<<EOF </div> <br /> <form action='{$this->settings['base_url']}&{$this->form_code}&do=settings_do_import' enctype='multipart/form-data' method='post'> \t<div class='acp-box'> \t\t<h3>{$this->lang->words['tol_import_xml_settings']}</h3> \t\t<ul class='acp-form alternate_rows'> \t\t\t<li> \t\t\t\t<label>{$this->lang->words['tol_upload_xml_settings_file_from_']}<span class='desctext'>{$this->lang->words['tol_duplicate_entries_will_not_be_']}</span></label> \t\t\t\t<input class='textinput' type='file' size='30' name='FILE_UPLOAD' /> \t\t\t</li> \t\t\t<li> \t\t\t\t<label>{$this->lang->words['tol_or_enter_the_filename_of_the_x']}<span class='desctext'>{$this->lang->words['tol_the_file_must_be_uploaded_into']}</span></label> \t\t\t\t<td class='tablerow2'><input class='textinput' type='text' size='30' name='file_location' /></td> \t\t\t</li> \t\t</ul> \t\t<div class='acp-actionbar'> \t\t\t<div class='centeraction'> \t\t\t\t<input type='submit' class='button primary' value='{$this->lang->words['t_import']}' /> \t\t\t</div> \t\t</div> \t</div> </form> EOF; //startif if (IN_DEV != 0) { $IPBHTML .= <<<EOF <br /> <div align='center'> <ul> \t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settingsImportApps'>Import all APP XML Settings</a></li> \t<li><a href='{$this->settings['base_url']}&{$this->form_code}&do=settingsExportApps'>Export all APP XML Settings</a></li> </ul> EOF; } //endif $IPBHTML .= <<<EOF EOF; //--endhtml--// return $IPBHTML; }
/** * List applications * * @access private * @return void [Outputs to screen] */ private function applicationsOverview() { //----------------------------------------- // INIT //----------------------------------------- $folders = array(); $application = array(); $_apps = array(); $seen_count = 0; $total_items = 0; $uninstalled = array(); /* Get the setup class */ require IPS_ROOT_PATH . "setup/sources/base/setup.php"; //----------------------------------------- // Get DB applications //----------------------------------------- $this->DB->build(array('select' => '*', 'from' => 'core_applications', 'order' => 'app_position')); $this->DB->execute(); while ($row = $this->DB->fetch()) { $_apps[IPSLib::getAppFolder($row['app_directory']) . '/' . $row['app_directory']] = $row; $total_items++; } //----------------------------------------- // Get folder applications... //----------------------------------------- foreach (array('applications', 'applications_addon/ips', 'applications_addon/other') as $folder) { try { foreach (new DirectoryIterator(IPS_ROOT_PATH . $folder) as $file) { if (!$file->isDot() and $file->isDir()) { $_name = $file->getFileName(); if (substr($_name, 0, 1) != '.') { $folders[$folder . '/' . $_name] = $_name; } } } } catch (Exception $e) { } } //----------------------------------------- // Installed Loop... //----------------------------------------- foreach ($_apps as $_app_path => $row) { $app_dir = $row['app_directory']; //----------------------------------------- // Enabled? //----------------------------------------- $row['_app_enabled'] = $row['app_enabled'] ? 'tick.png' : 'cross.png'; /* Version numbers */ $_a = ($app_dir == 'forums' or $app_dir == 'members') ? 'core' : $app_dir; $numbers = IPSSetUp::fetchAppVersionNumbers($_a); $row['_human_version'] = $numbers['latest'][1]; $row['_long_version'] = $numbers['latest'][0]; $row['_human_current'] = $numbers['current'][1]; $row['_long_current'] = $numbers['current'][0]; /* Exists? */ if (!file_exists(IPSLib::getAppDir($app_dir))) { $row['_missing'] = 1; } $seen_count++; $application[$row['app_location']][] = $row; } /* Make sure they are in the proper order, hacky but it works :) */ $__apps = array(); $__apps['root'] = $application['root'] ? $application['root'] : array(); $__apps['ips'] = $application['ips'] ? $application['ips'] : array(); $__apps['other'] = $application['other'] ? $application['other'] : array(); $application = $__apps; //----------------------------------------- // Uninstalled //----------------------------------------- foreach ($folders as $filepath => $_file) { if (!in_array($filepath, array_keys($_apps))) { $info = IPSSetUp::fetchXmlAppInformation($_file); /* OK, we're making no effort to conceal the secret behind the ipskey. It's an honourable setting - do not abuse it. We only mildly obfuscate it to stop copy and paste mistakes in information.xml */ $okToGo = 0; if (strstr($filepath, 'applications_addon/ips') or strstr($filepath, 'applications/')) { if (md5('ips_' . $_file) == $info['ipskey']) { $okToGo = 1; } } else { if (strstr($filepath, 'applications_addon/other')) { if (!$info['ipskey']) { $okToGo = 1; } } } $uninstalled[$_file] = array('title' => $info['name'], 'author' => $info['author'], 'path' => $filepath, 'okToGo' => $okToGo, 'directory' => $_file); } } //----------------------------------------- // Show it... //----------------------------------------- $this->registry->output->html .= $this->html->applications_list($application, $uninstalled); }