Beispiel #1
0
function AdkAdmin()
{
    global $txt, $context, $settings, $adkportal, $boardurl, $adkFolder;
    //Is allowed to manage adkportal
    isAllowedTo('adk_portal');
    //Load my template
    adktemplate('Adk-Admin');
    //Load Adk Language
    adkLanguage('Adk-Admin');
    $subActions = array('view' => 'view', 'adksettings' => 'adksettings', 'adksavesettings' => 'adksavesettings', 'manageicons' => 'manageicons');
    //Set subactions for standalone mode
    if ($adkportal['adk_enable'] == 2) {
        $subActions += array('standalone' => 'SettingsStandAlone', 'save_stand' => 'SaveSettingsStandAlone');
    }
    $context['html_headers'] .= getCss('admin_adkportal');
    $context['html_headers'] .= getJs('admin');
    $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['adkadmin_settings'], 'description' => $txt['adkadmin_news_desc'], 'tabs' => array('view' => array('description' => $txt['adkadmin_news_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/news.png" />&nbsp;' . $txt['adkadmin_news']), 'adksettings' => array('description' => $txt['adkadmin_setting_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/settings.png" />&nbsp;' . $txt['adkadmin_setting']), 'manageicons' => array('description' => $txt['adkadmin_icons_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/icons.png" />&nbsp;' . $txt['adkadmin_icons'])));
    //The last thing... print the stand alone menu
    if ($adkportal['adk_enable'] == 2) {
        $context[$context['admin_menu_name']]['tab_data']['tabs']['standalone'] = array('description' => $txt['adkadmin_stand_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $adkFolder['images'] . '/php.png" />&nbsp;' . $txt['adkadmin_stand']);
    }
    // Follow the sa or just go to View function
    if (!empty($_GET['sa']) && !empty($subActions[$_GET['sa']])) {
        $subActions[@$_GET['sa']]();
    } else {
        $subActions['view']();
    }
}
function AdkSeoMain()
{
    global $context, $txt, $scripturl, $settings, $boardurl;
    //Set css
    $context['html_headers'] .= getCss('admin_adkportal');
    //Load Basic Info
    isAllowedTo('adk_portal');
    adktemplate('Adk-AdminSeo');
    //Load Adk Language
    adkLanguage('Adk-Admin');
    //What are my subactions?
    $subActions = array('htaccess' => 'AdkCreateHtaccess', 'savehtaccess' => 'AdkSaveHtaccess', 'deletehtaccess' => 'AdkDeleteHtaccess', 'settings' => 'AdkSeoSettings', 'savesettings' => 'AdkSaveSettings', 'robotstxt' => 'AdkCreateRobotstxt', 'saverobots' => 'AdkSaveRobotstxt');
    //Set icons
    $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['adkmod_seo_manage'], 'description' => $txt['adkportal_seo_manage_desc'], 'tabs' => array('htaccess' => array('description' => '', 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/htaccess.png" />' . $txt['adkmod_seo_htaccess']), 'settings' => array('description' => '', 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/settings.png" />' . $txt['adkadmin_setting']), 'robotstxt' => array('description' => '', 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/robot.png" />' . $txt['adkmod_seo_robots'])));
    // Follow the sa or just go to View function
    if (!empty($_GET['sa']) && !empty($subActions[$_GET['sa']])) {
        $subActions[@$_GET['sa']]();
    } else {
        $subActions['htaccess']();
    }
}
function AdkBlocksGeneral()
{
    global $txt, $context, $sourcedir, $boardurl, $settings, $adkFolder;
    //Permisos
    isAllowedTo('adk_portal');
    //Load my template
    adktemplate('Adk-AdminBlocks');
    //Load my language
    adkLanguage('Adk-AdminBlocks');
    $subActions = array('checktemplates' => 'LoadBlocksTemplates', 'newtemplate' => 'createNewTemplate', 'save_template' => 'saveNewTemplate', 'edittemplate' => 'editTemplate', 'save_edit_template' => 'saveEditTemplate', 'deletetemplate' => 'deleteTemplate', 'approve_template' => 'approveTemplate', 'viewblocks' => 'viewblocks', 'settingsblocks' => 'SettingsBlocks', 'savesettingsblocks2' => 'SaveSettingsBlocks2', 'deleteblocks' => 'deleteblocks', 'editblocks' => 'editblocks', 'saveeditblocks' => 'saveeditblocks', 'newblocks' => 'LoadTheNewBlocksToCreate', 'savenewblocks' => 'savenewblocks', 'showeditnews' => 'showeditnews', 'showdeletenews' => 'showdeletenews', 'showsaveeditnews' => 'showsaveeditnews', 'createnews' => 'createnews', 'savecreatenews' => 'savecreatenews', 'uploadblock' => 'uploadblock', 'saveuploadblock' => 'saveuploadblock', 'previewblock' => 'PreviewBlockAdKPortal', 'permissions' => 'PermissionBlock', 'savepermissions' => 'SavePermissionBlock', 'download' => 'DownloadNewBlock', 'add_smf_block' => 'AddSMFPersonalBlock', 'shoutboxdeleteall' => 'DeleteShoutboxMessages');
    //Load CSS
    $context['html_headers'] .= getCss('admin_adkportal');
    $context['html_headers'] .= javaScript_blocks();
    $context['html_headers'] .= getJs('admin');
    $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['adkmod_block_manage'], 'description' => $txt['adkblock_first_descrip'], 'tabs' => array('checktemplates' => array('description' => $txt['adkblock_templates_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $adkFolder['images'] . '/wrench_orange.png" />&nbsp;' . $txt['adkblock_templates']), 'viewblocks' => array('description' => '', 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/blocks.png" />&nbsp;' . $txt['adkmod_block_title']), 'settingsblocks' => array('description' => $txt['adkblock_settings_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $adkFolder['images'] . '/admin.png" />&nbsp;' . $txt['adkmod_block_settings']), 'newblocks' => array('description' => $txt['adkblock_newblocks_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/createblock.png" />&nbsp;' . $txt['adkmod_block_add']), 'createnews' => array('description' => $txt['adkblock_news_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/createnews.png" />&nbsp;' . $txt['adkmod_block_add_news']), 'download' => array('description' => $txt['adkblock_download_personal_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $adkFolder['images'] . '/drive_add.png" />&nbsp;' . $txt['adkmod_block_download'])));
    // Follow the sa or just go to View function
    if (!empty($_GET['sa']) && !empty($subActions[$_GET['sa']])) {
        $subActions[@$_GET['sa']]();
    } else {
        $subActions['checktemplates']();
    }
}
function ShowDownloadsMainAdmin()
{
    global $context, $txt, $smcFunc, $settings, $sourcedir;
    //Load AdkDownloads Sources file
    require_once $sourcedir . '/AdkPortal/Subs-adkdownloads.php';
    //Set the subactions
    $subActions = array('settings' => 'AdkDownloadSettings', 'savesettings' => 'AdkDownloadSaveSettings', 'addcategory' => 'AdkDownloadAddCategory', 'savecategory' => 'AdkDownloadSaveCategory', 'allcategories' => 'AdkDownloadAllCategories', 'editcategory' => 'AdkDownloadEditCategory', 'saveeditcategory' => 'AdkDownloadSaveEditCategory', 'deletecategory' => 'AdkDownloadDeleteCategory', 'approvedownloads' => 'ApproveDownloadsAdmin');
    //Unnaproved downloads
    $TotalUnApproved = getTotal('adk_down_file', 'approved = {int:cero}', array('cero' => 0));
    //Permisos
    isAllowedTo('adk_downloads_manage');
    //Load Template and language
    adktemplate('Adk-AdminDownloads');
    adkLanguage('Adk-AdminDownloads');
    $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['adkeds_main_title'], 'description' => $txt['adkeds_main_desc'], 'tabs' => array('settings' => array('description' => '', 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/settings.png" />' . $txt['adkeds_settings']), 'addcategory' => array('description' => $txt['adkeds_add_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/addcategory.png" />' . $txt['adkmod_eds_add']), 'allcategories' => array('description' => $txt['adkeds_current_cat_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/editcategory.png" />' . $txt['adkmod_eds_categories']), 'approvedownloads' => array('description' => $txt['adkeds_approve_desc'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/approve.png" />' . $txt['adkeds_approve'] . ' (' . $TotalUnApproved . ')')));
    //print the subaction
    if (!empty($_GET['sa']) && !empty($subActions[$_GET['sa']])) {
        $subActions[@$_GET['sa']]();
    } else {
        $subActions['settings']();
    }
}
function AdkModules()
{
    global $context, $txt, $settings, $boardurl, $adkFolder;
    isAllowedTo('adk_portal');
    adktemplate('Adk-AdminModules');
    adkLanguage('Adk-AdminModules');
    $subActions = array('intro' => 'introAdk', 'viewadminpages' => 'viewadminpages', 'createpages' => 'createpages', 'savecreatedpages' => 'savecreatedpages', 'editpages' => 'editpages', 'saveeditpages' => 'saveeditpages', 'deletepages' => 'deletepages', 'uploadanyimage' => 'UploadNewImage', 'saveuploadimg' => 'SaveUploadNewImage', 'manageimagesadk' => 'ManageImagesAdk', 'deleteimagesadk' => 'DeleteImagesAdk', 'contact' => 'ContactAdmin', 'save_contact' => 'SaveContactAdmin', 'enable_page_menu' => 'EnablePageMenu', 'enable_comments' => 'EnableComments', 'enable_notifications' => 'EnableNotifications');
    $context[$context['admin_menu_name']]['tab_data'] = array('title' => $txt['adkmodules_modules_settings'], 'description' => $txt['adkmodules_first_modules'], 'tabs' => array('intro' => array('description' => $txt['adkmodules_first_modules'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/intro.png" /> ' . $txt['adkmod_modules_intro']), 'viewadminpages' => array('description' => $txt['adkmodules_second_modules'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/pages.png" /> ' . $txt['adkmod_modules_pages']), 'contact' => array('description' => $txt['adkmodules_desc_contacto'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $adkFolder['images'] . '/newmsg.png" /> ' . $txt['adkmod_modules_contacto']), 'uploadanyimage' => array('description' => $txt['adkmodules_tirth_modules'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/imagesadvanced.png" /> ' . $txt['adkmod_modules_images']), 'manageimagesadk' => array('description' => $txt['adkmodules_fourth_modules'], 'label' => '<img style="vertical-align: middle;" alt="" src="' . $settings['default_theme_url'] . '/images/admin/images.png" /> ' . $txt['adkmod_modules_manage_images'])));
    // Hooks menu integrations
    call_integration_hook('integrate_modules_menu', array(&$context[$context['admin_menu_name']]['tab_data']));
    // Hooks sa integration
    call_integration_hook('modules_subactions', array(&$subActions));
    //Hooks pre includes
    adkportal_include_hooks('integrate_pre_include_modules');
    $context['html_headers'] .= getCss('admin_adkportal');
    $context['html_headers'] .= getJs('admin');
    // Follow the sa or just go to View function
    if (!empty($_GET['sa']) && !empty($subActions[$_GET['sa']])) {
        $subActions[@$_GET['sa']]();
    } else {
        $subActions['intro']();
    }
}
function Adk_portal_pre_load()
{
    global $context;
    // Adk Portal Language is needed all the time
    adkLanguage('Adk-Modifications');
    getAdkportalSettings();
}
function AdkDownloadFile()
{
    global $modSettings, $txt, $context, $smcFunc, $user_info, $boarddir, $adkFolder;
    if (!empty($_REQUEST['id'])) {
        $id = (int) $_REQUEST['id'];
    } else {
        fatal_lang_error('adkfatal_require_id_file', false);
    }
    $sql = $smcFunc['db_query']('', '
		SELECT a.id_file, a.id_attach, a.filename, a.orginalfilename, d.id_cat, d.id_file, d.id_member, d.approved
		FROM {db_prefix}adk_down_attachs AS a, {db_prefix}adk_down_file AS d
		INNER JOIN {db_prefix}members AS m ON (m.id_member = d.id_member)
		WHERE id_attach = {int:a} AND a.id_file = d.id_file', array('a' => $id));
    $row = $smcFunc['db_fetch_assoc']($sql);
    //Empty file?
    if ($smcFunc['db_num_rows']($sql) == 0) {
        fatal_lang_error('adkfatal_require_id_file', false);
    }
    $smcFunc['db_free_result']($sql);
    if ($row['approved'] == 0 && $user_info['id'] != $row['id_member'] && !allowedTo('adk_downloads_manage')) {
        fatal_lang_error('adkfatal_this_download_not_approved', false);
    }
    verifyCatPermissions('view', $row['id_cat']);
    $last = time();
    $smcFunc['db_query']('', "UPDATE {db_prefix}adk_down_file\n\t\tSET totaldownloads = totaldownloads + 1, lastdownload = {int:l} WHERE id_file = {int:id} LIMIT 1", array('id' => $row['id_file'], 'l' => $last));
    $real_filename = $row['orginalfilename'];
    $filename = $adkFolder['eds'] . '/' . $row['filename'];
    $ext = explode('.', $real_filename);
    $file_ext = $ext[count($ext) - 1];
    // This is done to clear any output that was made before now. (would use ob_clean(), but that's PHP 4.2.0+...)
    ob_end_clean();
    if (!empty($modSettings['enableCompressedOutput']) && @version_compare(PHP_VERSION, '4.2.0') >= 0 && @filesize($filename) <= 4194304 && in_array($file_ext, array('txt', 'html', 'htm', 'js', 'doc', 'pdf', 'docx', 'rtf', 'css', 'php', 'log', 'xml', 'sql', 'c', 'java'))) {
        @ob_start('ob_gzhandler');
    } else {
        ob_start();
        header('Content-Encoding: none');
    }
    // No point in a nicer message, because this is supposed to be an attachment anyway...
    if (!file_exists($filename)) {
        adkLanguage('Errors');
        header('HTTP/1.0 404 ' . $txt['attachment_not_found']);
        header('Content-Type: text/plain; charset=' . (empty($context['character_set']) ? 'ISO-8859-1' : $context['character_set']));
        // We need to die like this *before* we send any anti-caching headers as below.
        die('404 - ' . $txt['attachment_not_found']);
    }
    // If it hasn't been modified since the last time this attachement was retrieved, there's no need to display it again.
    if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
        list($modified_since) = explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE']);
        if (strtotime($modified_since) >= filemtime($filename)) {
            ob_end_clean();
            // Answer the question - no, it hasn't been modified ;).
            header('HTTP/1.1 304 Not Modified');
            exit;
        }
    }
    // Check whether the ETag was sent back, and cache based on that...
    $eTag = '"' . substr($_REQUEST['id'] . $real_filename . filemtime($filename), 0, 64) . '"';
    if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) && strpos($_SERVER['HTTP_IF_NONE_MATCH'], $eTag) !== false) {
        ob_end_clean();
        header('HTTP/1.1 304 Not Modified');
        exit;
    }
    // Send the attachment headers.
    header('Pragma: ');
    if (!$context['browser']['is_gecko']) {
        header('Content-Transfer-Encoding: binary');
    }
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 525600 * 60) . ' GMT');
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($filename)) . ' GMT');
    header('Accept-Ranges: bytes');
    header('Connection: close');
    header('ETag: ' . $eTag);
    // IE 6 just doesn't play nice. As dirty as this seems, it works.
    if ($context['browser']['is_ie6'] && isset($_REQUEST['image'])) {
        unset($_REQUEST['image']);
    } elseif (isset($_REQUEST['image']) && !empty($mime_type) && strpos($mime_type, 'image/') !== 0) {
        unset($_REQUEST['image']);
    } elseif (!empty($mime_type) && (isset($_REQUEST['image']) || !in_array($file_ext, array('jpg', 'gif', 'jpeg', 'x-ms-bmp', 'png', 'psd', 'tiff', 'iff')))) {
        header('Content-Type: ' . strtr($mime_type, array('image/bmp' => 'image/x-ms-bmp')));
    } else {
        header('Content-Type: ' . ($context['browser']['is_ie'] || $context['browser']['is_opera'] ? 'application/octetstream' : 'application/octet-stream'));
        if (isset($_REQUEST['image'])) {
            unset($_REQUEST['image']);
        }
    }
    // Convert the file to UTF-8, cuz most browsers dig that.
    $utf8name = !$context['utf8'] && function_exists('iconv') ? iconv($context['character_set'], 'UTF-8', $real_filename) : (!$context['utf8'] && function_exists('mb_convert_encoding') ? mb_convert_encoding($real_filename, 'UTF-8', $context['character_set']) : $real_filename);
    $fixchar = create_function('$n', '
		if ($n < 32)
			return \'\';
		elseif ($n < 128)
			return chr($n);
		elseif ($n < 2048)
			return chr(192 | $n >> 6) . chr(128 | $n & 63);
		elseif ($n < 65536)
			return chr(224 | $n >> 12) . chr(128 | $n >> 6 & 63) . chr(128 | $n & 63);
		else
			return chr(240 | $n >> 18) . chr(128 | $n >> 12 & 63) . chr(128 | $n >> 6 & 63) . chr(128 | $n & 63);');
    $disposition = !isset($_REQUEST['image']) ? 'attachment' : 'inline';
    // Different browsers like different standards...
    if ($context['browser']['is_firefox']) {
        header('Content-Disposition: ' . $disposition . '; filename*=UTF-8\'\'' . rawurlencode(preg_replace_callback('~&#(\\d{3,8});~', 'fixchar__callback', $utf8name)));
    } elseif ($context['browser']['is_opera']) {
        header('Content-Disposition: ' . $disposition . '; filename="' . preg_replace_callback('~&#(\\d{3,8});~', 'fixchar__callback', $utf8name) . '"');
    } elseif ($context['browser']['is_ie']) {
        header('Content-Disposition: ' . $disposition . '; filename="' . urlencode(preg_replace_callback('~&#(\\d{3,8});~', 'fixchar__callback', $utf8name)) . '"');
    } else {
        header('Content-Disposition: ' . $disposition . '; filename="' . $utf8name . '"');
    }
    // If this has an "image extension" - but isn't actually an image - then ensure it isn't cached cause of silly IE.
    if (!isset($_REQUEST['image']) && in_array($file_ext, array('gif', 'jpg', 'bmp', 'png', 'jpeg', 'tiff'))) {
        header('Cache-Control: no-cache');
    } else {
        header('Cache-Control: max-age=' . 525600 * 60 . ', private');
    }
    if (empty($modSettings['enableCompressedOutput']) || filesize($filename) > 4194304) {
        header('Content-Length: ' . filesize($filename));
    }
    // Try to buy some time...
    @set_time_limit(600);
    // Recode line endings for text files, if enabled.
    if (!empty($modSettings['attachmentRecodeLineEndings']) && !isset($_REQUEST['image']) && in_array($file_ext, array('txt', 'css', 'htm', 'html', 'php', 'xml'))) {
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'Windows') !== false) {
            $callback = create_function('$buffer', 'return preg_replace(\'~[\\r]?\\n~\', "\\r\\n", $buffer);');
        } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) {
            $callback = create_function('$buffer', 'return preg_replace(\'~[\\r]?\\n~\', "\\r", $buffer);');
        } else {
            $callback = create_function('$buffer', 'return preg_replace(\'~[\\r]?\\n~\', "\\n", $buffer);');
        }
    }
    // Since we don't do output compression for files this large...
    if (filesize($filename) > 4194304) {
        // Forcibly end any output buffering going on.
        if (function_exists('ob_get_level')) {
            while (@ob_get_level() > 0) {
                @ob_end_clean();
            }
        } else {
            @ob_end_clean();
            @ob_end_clean();
            @ob_end_clean();
        }
        $fp = fopen($filename, 'rb');
        while (!feof($fp)) {
            if (isset($callback)) {
                echo $callback(fread($fp, 8192));
            } else {
                echo fread($fp, 8192);
            }
            flush();
        }
        fclose($fp);
    } elseif (isset($callback) || @readfile($filename) == null) {
        echo isset($callback) ? $callback(file_get_contents($filename)) : file_get_contents($filename);
    }
    obExit(false);
}
function AdkContact()
{
    if (!empty($_REQUEST['sa']) && $_REQUEST['sa'] == 'send') {
        $function = 'AdkContactSend';
    } else {
        $function = 'AdkContactWrite';
    }
    //Load our Custom language
    adkLanguage('Adk-echomodules');
    adktemplate('Adk-echomodules');
    if (!allowedToViewContactPage()) {
        fatal_lang_error('adkfatal_shout_now_allowed', false);
    }
    $function();
}