/** * Class entry point * * @access public * @param object Registry reference * @return void [Outputs to screen] */ public function doExecute(ipsRegistry $registry) { //----------------------------------------- // INIT //----------------------------------------- $info = array(); $id = intval($this->memberData['member_id']); //----------------------------------------- // Get HTML and skin //----------------------------------------- $this->registry->class_localization->loadLanguageFile(array('public_profile'), 'members'); //----------------------------------------- // Can we access? //----------------------------------------- if (!$this->memberData['g_mem_info'] or $this->memberData['gbw_no_status_update']) { $this->returnJsonError($this->lang->words['status_off']); } if (!$id) { $this->returnJsonError($this->lang->words['status_off']); } $newStatus = trim(IPSText::getTextClass('bbcode')->stripBadWords(IPSText::parseCleanValue($_POST['new_status']))); IPSMember::save($id, array('extendedProfile' => array('pp_status' => $newStatus, 'pp_status_update' => time()))); $this->returnJsonArray(array('status' => 'success', 'new_status' => $newStatus)); exit; }
/** * Class entry point * * @access public * @param object Registry reference * @return void [Outputs to screen] */ public function doExecute(ipsRegistry $registry) { //----------------------------------------- // Security check //----------------------------------------- if ($this->request['k'] != $this->member->form_hash) { $this->registry->getClass('output')->showError('no_permission', 20314); } //----------------------------------------- // INIT //----------------------------------------- $info = array(); $id = intval($this->memberData['member_id']); //----------------------------------------- // Get HTML and skin //----------------------------------------- $this->registry->class_localization->loadLanguageFile(array('public_profile'), 'members'); //----------------------------------------- // Can we access? //----------------------------------------- if (!$this->memberData['g_mem_info']) { $this->registry->output->showError('status_off', 10268); } if (!$id) { $this->registry->output->showError('status_off', 10269); } $newStatus = trim(IPSText::getTextClass('bbcode')->stripBadWords($this->request['new_status'])); IPSMember::save($id, array('extendedProfile' => array('pp_status' => $newStatus, 'pp_status_update' => time()))); $this->registry->output->redirectScreen($this->lang->words['status_was_changed'], $this->settings['base_url'] . 'showuser='******'members_seo_name']); }
/** * Main function executed automatically by the controller * * @param object $registry Registry object * @return @e void */ public function doExecute(ipsRegistry $registry) { /* Set up */ $inapp = trim($this->request['inapp']); $do = !empty($this->request['do']) ? $this->request['do'] : 'all'; /* Load navigation stuff */ $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/navigation/build.php', 'classes_navigation_build'); $navigation = new $classToLoad($inapp); /* Show warning if offline */ if ($this->settings['board_offline'] and !$this->memberData['g_access_offline']) { $row = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'core_sys_conf_settings', 'where' => "conf_key='offline_msg'")); IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parsing_section = 'global'; $row['conf_value'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse($row['conf_value'])); return $this->returnHtml($this->registry->output->getTemplate('global_other')->quickNavigationOffline($row['conf_value'])); } /* Return */ if ($do == 'all') { return $this->returnHtml($this->registry->output->getTemplate('global_other')->quickNavigationWrapper($navigation->loadApplicationTabs(), $navigation->loadNavigationData(), $navigation->getApp())); } else { return $this->returnHtml($this->registry->output->getTemplate('global_other')->quickNavigationPanel($navigation->loadNavigationData(), $navigation->getApp())); } }
/** * return HTML block * * @access public * @param array Member information * @return string HTML block */ public function return_html_block($member = array()) { /* Get blog API */ require_once IPS_ROOT_PATH . 'api/api_core.php'; require_once IPS_ROOT_PATH . 'api/blog/api_blog.php'; /* Create API Object */ $blog_api = new apiBlog(); /* Language */ $this->lang->loadLanguageFile(array('public_portal'), 'blog'); $content = ''; $blog_url = $blog_api->getBlogUrl($blog_api->getBlogID($member['member_id'])); $this->lang->words['visit_blog'] = "<a href=\"{$blog_url}\">{$this->lang->words['visit_blog']}</a>"; $entry_content = ''; $entries = $blog_api->lastXEntries('member', $member['member_id'], 5); if (is_array($entries) && count($entries)) { $attachments = 0; $entry_ids = array(); foreach ($entries as $row) { $row['_post_date'] = ipsRegistry::getClass('class_localization')->getDate($row['entry_date'], 'SHORT'); $row['_date_array'] = IPSTime::date_getgmdate($row['entry_date'] + ipsRegistry::getClass('class_localization')->getTimeOffset()); $entry_ids[$row['entry_id']] = $row['entry_id']; IPSText::getTextClass('bbcode')->parse_html = $row['entry_html_state'] ? 1 : 0; IPSText::getTextClass('bbcode')->parse_nl2br = $row['entry_html_state'] == 2 ? 1 : 0; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'blog'; $row['post'] = IPSText::getTextClass('bbcode')->preDisplayParse($row['entry']); $row['post'] = IPSText::getTextClass('bbcode')->memberViewImages($row['post']); if ($row['entry_has_attach']) { $parseAttachments = true; } $entry_content .= $this->registry->output->getTemplate('profile')->tabSingleColumn($row, $this->lang->words['readentry'], $row['entry_url'], $row['entry_name']); } //----------------------------------------- // Attachments (but only if necessary) //----------------------------------------- if ($parseAttachments and !is_object($this->class_attach)) { require_once IPSLib::getAppDir('core') . '/sources/classes/attach/class_attach.php'; $this->class_attach = new class_attach($this->registry); $this->class_attach->type = 'blogentry'; $this->class_attach->init(); $entry_content = $this->class_attach->renderAttachments($entry_content, $entry_ids, 'blog_show'); $entry_content = $entry_content[0]['html']; } $content = $this->registry->output->getTemplate('blog_portal')->profileTabWrap($this->lang->words['visit_blog'], $entry_content); } else { $content .= $this->registry->output->getTemplate('profile')->tabNoContent('noblogentries'); } //----------------------------------------- // Return content.. //----------------------------------------- return $content; }
/** * Class entry point * * @param object Registry reference * @return @e void [Outputs to screen/redirects] */ public function doExecute(ipsRegistry $registry) { /* Get board rule (not cached) */ $row = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'core_sys_conf_settings', 'where' => "conf_key='gl_guidelines'")); IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; $row['conf_value'] = IPSText::getTextClass('bbcode')->preDisplayParse($row['conf_value'] ? $row['conf_value'] : $row['conf_default']); $this->registry->output->addNavigation($this->settings['gl_title'], ''); $this->registry->output->setTitle($this->settings['gl_title'] . ' - ' . ipsRegistry::$settings['board_name']); $this->registry->output->addContent($this->registry->output->getTemplate('emails')->boardRules($this->settings['gl_title'], IPSText::getTextClass('bbcode')->preDisplayParse($row['conf_value']))); $this->registry->output->sendOutput(); }
/** * Function to format the actual message (applies BBcode, etc) * * @param string Raw text * @param array PM data * @return string Processed text */ private function _formatMessageForDisplay($msgContent, $data = array()) { IPSText::resetTextClass('bbcode'); $this->settings['max_emos'] = 0; IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_html = 0; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'pms'; IPSText::getTextClass('bbcode')->parsing_mgroup = $data['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $data['mgroup_others']; $msgContent = IPSText::getTextClass('bbcode')->preDisplayParse($msgContent); return $msgContent; }
/** * Class entry point * * @param object Registry reference * @return @e void [Outputs to screen/redirects] */ public function doExecute(ipsRegistry $registry) { $raw = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'core_sys_conf_settings', 'where' => 'conf_key=\'priv_body\'')); if ($this->settings['priv_title']) { IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'rules'; $policy = IPSText::getTextClass('bbcode')->preDisplayParse($raw['conf_value'] ? $raw['conf_value'] : $raw['conf_default']); $this->output .= $this->registry->getClass('output')->getTemplate('global_other')->privacyPolicy($this->settings['priv_title'], $policy); $this->registry->output->setTitle($this->settings['priv_title'] . ' - ' . ipsRegistry::$settings['board_name']); $this->registry->output->addContent($this->output); $this->registry->output->sendOutput(); } else { $this->registry->getClass('output')->showError('page_doesnt_exist', 10335, null, null, 404); } }
/** * Feturn HTML block * * @access public * @param array Member information * @return string HTML block */ public function return_html_block($member = array()) { //----------------------------------------- // Got a member? //----------------------------------------- if (!is_array($member) or !count($member)) { return $this->registry->getClass('output')->getTemplate('profile')->tabNoContent('err_no_aboutme_to_show'); } //----------------------------------------- // Format signature //----------------------------------------- if ($member['signature']) { IPSText::getTextClass('bbcode')->parse_bbcode = $this->settings['msg_allow_code']; IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = $this->settings['msg_allow_html']; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parsing_section = 'signatures'; IPSText::getTextClass('bbcode')->parsing_mgroup = $member['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $member['mgroup_others']; $member['signature'] = IPSText::getTextClass('bbcode')->preDisplayParse($member['signature']); $member['signature'] = $this->registry->getClass('output')->getTemplate('global')->signature_separator($member['signature']); } //----------------------------------------- // Format 'About me' //----------------------------------------- IPSText::getTextClass('bbcode')->parse_html = intval($this->settings['aboutme_html']); IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_smilies = $this->settings['aboutme_emoticons']; IPSText::getTextClass('bbcode')->parse_bbcode = $this->settings['aboutme_bbcode']; IPSText::getTextClass('bbcode')->parsing_section = 'aboutme'; IPSText::getTextClass('bbcode')->parsing_mgroup = $member['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $member['mgroup_others']; $member['pp_about_me'] = IPSText::getTextClass('bbcode')->preDisplayParse($member['pp_about_me']); $content = $this->registry->getClass('output')->getTemplate('profile')->tabAboutMe($member); //----------------------------------------- // Macros... //----------------------------------------- $content = $this->registry->output->replaceMacros($content); //----------------------------------------- // Return content.. //----------------------------------------- return $content ? $content : $this->registry->getClass('output')->getTemplate('profile')->tabNoContent('err_no_aboutme_to_show'); }
/** * Class entry point * * @access public * @param object Registry reference * @return void [Outputs to screen/redirects] */ public function doExecute(ipsRegistry $registry) { /* Get board rule (not cached) */ $row = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'core_sys_conf_settings', 'where' => "conf_key='gl_guidelines'")); IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parsing_section = 'global'; $row['conf_value'] = IPSText::getTextClass('bbcode')->preDbParse($row['conf_value']); $row['conf_value'] = IPSText::getTextClass('bbcode')->preDisplayParse($row['conf_value']); /* Hacky fix for bug #15632 */ //$row['conf_value'] = str_replace( '<ul><br />' , '<ul>', $row['conf_value'] ); //$row['conf_value'] = str_replace( '<ul' , '<ul class="bbc"', $row['conf_value'] ); //$row['conf_value'] = str_replace( '</li><br />' , '</li>', $row['conf_value'] ); //$row['conf_value'] = str_replace( '</ul><br />' , '</ul>', $row['conf_value'] ); //$row['conf_value'] = preg_replace( '#<li([^\n]*)<br />#', '<li$1', $row['conf_value'] ); $this->registry->output->addNavigation($this->settings['gl_title'], ''); $this->registry->output->setTitle($this->settings['gl_title']); $this->registry->output->addContent($this->registry->output->getTemplate('emails')->boardRules($this->settings['gl_title'], $row['conf_value'])); $this->registry->output->sendOutput(); }
/** * Constructor * * @access public * @param object ipsRegistry reference * @return @e void */ public function __construct(ipsRegistry $registry) { /* Make object */ $this->registry = $registry; $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); $this->member = $this->registry->member(); $this->memberData =& $this->registry->member()->fetchMemberData(); $this->generated_acp_hash = $this->generateSecureHash(); $this->_admin_auth_key = $this->getSecurityKey(); $this->registry->output->global_template = $this->registry->output->loadRootTemplate('cp_skin_global'); //------------------------------------------ // Message in a bottle? //------------------------------------------ if (!empty($this->request['messageinabottleacp'])) { $this->request['messageinabottleacp'] = IPSText::getTextClass('bbcode')->xssHtmlClean(IPSText::UNhtmlspecialchars(urldecode($this->request['messageinabottleacp']))); $this->registry->output->global_message = $this->request['messageinabottleacp']; $this->registry->output->persistent_message = intval($this->request['messagepersistent']); } }
/** * Test a bbcode * * @return @e void [Outputs to screen] * @todo [Future] Also show the resulting HTML alongside the formatted content */ protected function _bbcodeTest() { $t = IPSText::stripslashes(htmlspecialchars($_POST['bbtest'])); //----------------------------------------- // Run through libraries //----------------------------------------- IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_smilies = 0; IPSText::getTextClass('bbcode')->parsing_section = 'global'; //----------------------------------------- // Store the url/fix base url //----------------------------------------- $_current = $this->settings['base_url']; $this->settings['base_url'] = $this->settings['board_url'] . '/index.php?'; //----------------------------------------- // Parse //----------------------------------------- $t = IPSText::getTextClass('bbcode')->preDbParse($t); $t = IPSText::getTextClass('bbcode')->preDisplayParse($t); //----------------------------------------- // Restore base url //----------------------------------------- $this->settings['base_url'] = $_current; $this->registry->output->setMessage($this->lang->words['bbcode_test'] . $t, true); $this->_bbcodeStart(); }
/** * Topic multi-moderation * * @return @e void [Outputs to screen] */ protected function _multiTopicMmod() { //----------------------------------------- // It's tea time //----------------------------------------- if (!strstr($this->request['tact'], 't_') or !count($this->tids)) { $this->_showError('mod_stupid_beggar', 103114); } $mm_id = intval(str_replace('t_', '', $this->request['tact'])); //----------------------------------------- // Init modfunc module //----------------------------------------- $this->modLibrary->init($this->forum, "", $this->moderator); //----------------------------------------- // Do we have permission? //----------------------------------------- if ($this->modLibrary->mmAuthorize() != TRUE) { $this->_showError('mod_no_multimod', 103115); } $mm_data = $this->caches['multimod'][$mm_id]; if (!$mm_data) { $this->_showError('mod_no_mm_id', 103116, 404); } //----------------------------------------- // Does this forum have this mm_id //----------------------------------------- if ($this->modLibrary->mmCheckIdInForum($this->forum['id'], $mm_data) != TRUE) { $this->_showError('mod_no_multimod', 103117, 404); } //----------------------------------------- // Still here? We're damn good to go sir! //----------------------------------------- $this->modLibrary->stmInit(); //----------------------------------------- // Open close? //----------------------------------------- if ($mm_data['topic_state'] != 'leave') { if ($mm_data['topic_state'] == 'close') { $this->modLibrary->stmAddClose(); } else { if ($mm_data['topic_state'] == 'open') { $this->modLibrary->stmAddOpen(); } } } //----------------------------------------- // pin no-pin? //----------------------------------------- if ($mm_data['topic_pin'] != 'leave') { if ($mm_data['topic_pin'] == 'pin') { $this->modLibrary->stmAddPin(); } else { if ($mm_data['topic_pin'] == 'unpin') { $this->modLibrary->stmAddUnpin(); } } } //----------------------------------------- // Approve / Unapprove //----------------------------------------- if ($mm_data['topic_approve']) { if ($mm_data['topic_approve'] == 1) { $this->modLibrary->stmAddApprove(); } else { if ($mm_data['topic_approve'] == 2) { $this->modLibrary->stmAddUnapprove(); } } } //----------------------------------------- // Update what we have so far... //----------------------------------------- $this->modLibrary->stmExec($this->tids); //----------------------------------------- // Topic title (1337 - I am!) //----------------------------------------- if ($mm_data['topic_title_st'] or $mm_data['topic_title_end']) { $this->DB->update('topics', 'title=' . $this->DB->buildConcat(array(array($mm_data['topic_title_st'], 'string'), array('title'), array($mm_data['topic_title_end'], 'string'))), "tid IN(" . implode(',', $this->tids) . ")", false, true); //----------------------------------------- // Rebuild topic for SEO title //----------------------------------------- foreach ($this->tids as $tid) { $this->modLibrary->rebuildTopic($tid); } } //----------------------------------------- // Add reply? //----------------------------------------- if ($mm_data['topic_reply'] and $mm_data['topic_reply_content']) { $move_ids = array(); foreach ($this->tids as $tid) { $move_ids[] = array($tid, $this->forum['id']); } IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'topics'; $this->modLibrary->topicAddReply(IPSText::getTextClass('bbcode')->preDbParse($mm_data['topic_reply_content']), $move_ids, $mm_data['topic_reply_postcount']); } //----------------------------------------- // Move topic? //----------------------------------------- if ($mm_data['topic_move']) { //----------------------------------------- // Move to forum still exist? //----------------------------------------- $r = $this->registry->class_forums->allForums[$mm_data['topic_move']]; if ($r['id']) { if ($r['sub_can_post'] != 1) { $this->DB->update('topic_mmod', array('topic_move' => 0), "mm_id=" . $mm_id); } else { if ($r['id'] != $this->forum['id']) { $this->modLibrary->topicMove($this->tids, $this->forum['id'], $r['id'], $mm_data['topic_move_link']); $this->modLibrary->forumRecount($r['id']); } } } else { $this->DB->update('topic_mmod', array('topic_move' => 0), "mm_id=" . $mm_id); } } //----------------------------------------- // Recount root forum //----------------------------------------- $this->registry->class_forums->allForums[$this->forum['id']]['_update_deletion'] = 1; $this->modLibrary->forumRecount($this->forum['id']); $this->_addModeratorLog(sprintf($this->lang->words['acp_multi_mod'], $mm_data['mm_title'], $this->forum['name'])); }
/** * Show a single event based on eventid * * @return @e void */ public function calendarShowEvent() { //----------------------------------------- // Init //----------------------------------------- $event_id = intval($this->request['event_id']); if (!$event_id) { $this->registry->output->showError('calendar_event_not_found', 10429, null, null, 404); } //----------------------------------------- // Get the event data //----------------------------------------- $_joins = array(array('select' => 'm.*', 'from' => array('members' => 'm'), 'where' => 'm.member_id=e.event_member_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'm.member_id=pp.pp_member_id', 'type' => 'left')); if ($this->settings['reputation_enabled']) { $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/class_reputation_cache.php', 'classReputationCache'); $this->registry->setClass('repCache', new $classToLoad()); $_joins[] = $this->registry->getClass('repCache')->getTotalRatingJoin('event_id', $event_id, 'calendar'); $_joins[] = $this->registry->getClass('repCache')->getUserHasRatedJoin('event_id', $event_id, 'calendar'); } $event = $this->DB->buildAndFetch(array('select' => 'e.*', 'from' => array('cal_events' => 'e'), 'where' => 'e.event_id=' . $event_id, 'add_join' => $_joins)); if (!$event['event_id']) { $this->registry->output->showError('calendar_event_not_found', 10430, null, null, 404); } //----------------------------------------- // Reset calendar //----------------------------------------- $this->calendar = $this->functions->getCalendar($event['event_calendar_id']); if ($this->calendar['cal_id'] != $event['event_calendar_id']) { $this->registry->output->showError('cal_no_perm', 1040.22, null, null, 403); } //----------------------------------------- // Check permissions //----------------------------------------- if ($event['event_private'] and $this->memberData['member_id'] != $event['event_member_id']) { $this->registry->output->showError('calendar_event_not_found', 10431, null, null, 403); } if (!$this->memberData['g_is_supmod'] and !$event['event_approved']) { $this->registry->output->showError('calendar_event_not_found', 10432.1, null, null, 404); } if ($event['event_perms'] != '*') { $permissionGroups = explode(',', IPSText::cleanPermString($event['event_perms'])); if (!IPSMember::isInGroup($this->memberData, $permissionGroups)) { $this->registry->output->showError('calendar_event_not_found', 10432, null, null, 404); } } //----------------------------------------- // Are we RSVPing? //----------------------------------------- if ($this->request['_rsvp'] and $event['event_rsvp']) { if ($this->registry->permissions->check('rsvp', $this->calendar) and $this->memberData['member_id']) { //----------------------------------------- // Make sure we aren't already RSVPed //----------------------------------------- $_check = $this->DB->buildAndFetch(array('select' => 'rsvp_id', 'from' => 'cal_event_rsvp', 'where' => 'rsvp_event_id=' . $event['event_id'] . ' AND rsvp_member_id=' . $this->memberData['member_id'])); if (!$_check['rsvp_id']) { $_insert = array('rsvp_event_id' => $event['event_id'], 'rsvp_member_id' => $this->memberData['member_id'], 'rsvp_date' => time()); $this->DB->insert('cal_event_rsvp', $_insert); $this->registry->output->redirectScreen($this->lang->words['rsvp_saved_im'], $this->settings['base_url'] . "app=calendar&module=calendar&section=view&do=showevent&event_id=" . $event['event_id'], $event['event_title_seo'], 'cal_event'); } } } //----------------------------------------- // Comments class //----------------------------------------- require_once IPS_ROOT_PATH . 'sources/classes/comments/bootstrap.php'; /*noLibHook*/ $this->_comments = classes_comments_bootstrap::controller('calendar-events'); $comments = array('html' => $this->_comments->fetchFormatted($event, array('offset' => intval($this->request['st']))), 'count' => $this->_comments->count($event)); //----------------------------------------- // Highlight... //----------------------------------------- if ($this->request['hl']) { $event['event_content'] = IPSText::searchHighlight($event['event_content'], $this->request['hl']); $event['event_title'] = IPSText::searchHighlight($event['event_title'], $this->request['hl']); } //----------------------------------------- // Can we report? //----------------------------------------- $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('core') . '/sources/classes/reportLibrary.php', 'reportLibrary', 'core'); $reports = new $classToLoad($this->registry); $event['_canReport'] = $reports->canReport('calendar'); //----------------------------------------- // Output //----------------------------------------- $member = IPSMember::load($event['event_member_id'], 'all'); $this->registry->output->addNavigation($this->calendar['cal_title'], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}", $this->calendar['cal_title_seo'], 'cal_calendar'); //----------------------------------------- // Try to match out and improve navigation //----------------------------------------- $_referrer = $_SERVER['HTTP_REFERER']; if ($_referrer) { //----------------------------------------- // Came from add form? //----------------------------------------- if (preg_match("#/add\$#", $_referrer)) { $_data = $this->calendarMakeEventHTML($event, true); $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', $_data['event']['_start_time'])); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&do=showday&y={$_dateBits[0]}&m={$_dateBits[1]}&d={$_dateBits[2]}", $this->calendar['cal_title_seo'], 'cal_day'); } else { if (preg_match("#/day\\-(\\d{4})\\-(\\d{1,2})\\-(\\d{1,2})\$#i", $_referrer, $matches)) { $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', gmmktime(0, 0, 0, $matches[2], $matches[3], $matches[1]))); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&do=showday&y={$_dateBits[0]}&m={$_dateBits[1]}&d={$_dateBits[2]}", $this->calendar['cal_title_seo'], 'cal_day'); } else { if (preg_match("#/week\\-(\\d+?)\$#i", $_referrer, $matches)) { $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', $matches[1])); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); $this->registry->output->addNavigation("{$this->lang->words['week_beginning']} " . gmstrftime('%B %d, %Y', $matches[1]), "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&do=showweek&week={$matches[1]}", $this->calendar['cal_title_seo'], 'cal_week'); } else { if (preg_match("#/(\\d{1,2})\\-(\\d{4})\$#i", $_referrer, $matches)) { $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', gmmktime(0, 0, 0, $matches[1], 15, $matches[2]))); $this->registry->output->addNavigation($_dateBits[3] . " " . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); } else { if (preg_match("#/(\\d+?)\\-(.+?)\$#i", $_referrer, $matches)) { $_data = $this->calendarMakeEventHTML($event, true); $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', $_data['event']['_start_time'])); $this->registry->output->addNavigation($_dateBits[3] . " " . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); } else { $_data = $this->calendarMakeEventHTML($event, true); $_dateBits = explode('-', gmstrftime('%Y-%m-%d-%B', $_data['event']['_start_time'])); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&m={$_dateBits[1]}&y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month'); $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&module=calendar&section=view&cal_id={$this->calendar['cal_id']}&do=showday&y={$_dateBits[0]}&m={$_dateBits[1]}&d={$_dateBits[2]}", $this->calendar['cal_title_seo'], 'cal_day'); } } } } } } //----------------------------------------- // Finish output //----------------------------------------- $this->registry->output->addNavigation($event['event_title']); $this->registry->output->addMetaTag('keywords', $this->chosen_date['month_name'] . ' ' . $_dateBits[2] . ' events event calendar ' . $event['event_title'] . ' ' . IPSText::getTextClass('bbcode')->stripAllTags($event['event_content']), TRUE); $this->registry->output->addMetaTag('description', str_replace("\n", " ", str_replace("\r", "", IPSText::getTextClass('bbcode')->stripAllTags($event['event_content']))), FALSE, 155); $this->registry->output->addToDocumentHead('raw', "<link rel='up' href='" . $this->registry->output->buildSEOUrl('app=calendar&module=calendar&section=view&cal_id=' . $event['event_calendar_id'], 'publicNoSession', $this->calendar['cal_title_seo'], 'cal_calendar') . "' />"); $this->registry->output->addToDocumentHead('raw', "<link rel='author' href='" . $this->registry->output->buildSEOUrl('showuser='******'event_member_id'], 'publicNoSession', $member['members_seo_name'], 'showuser') . "' />"); $this->registry->getClass('output')->addCanonicalTag('app=calendar&module=calendar&section=view&do=showevent&event_id=' . $event['event_id'], $event['event_title_seo'], 'cal_event'); $this->page_title = $event['event_title']; $this->output .= $this->registry->output->getTemplate('calendar')->calendarShowEvent($this->calendarMakeEventHTML($event), $comments); }
/** * Moderate pending friends * * @return @e void [Prints to screen] * @since IPB 2.2.0.2006-08-09 */ protected function _moderation() { //----------------------------------------- // INIT //----------------------------------------- $md5check = IPSText::md5Clean($this->request['md5check']); $friends = array(); $friend_ids = array(); $friend_member_ids = array(); $_friend_ids = array(); $friends_already = array(); $friends_update = array(); $member = array(); $pp_option = $this->request['pp_option'] == 'delete' ? 'delete' : 'add'; $message = ''; $subject = ''; $msg = 'pp_friend_approved'; //----------------------------------------- // MD5 check //----------------------------------------- if ($md5check != $this->member->form_hash) { $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=error&tab=pending'); } //----------------------------------------- // Get friends... //----------------------------------------- if (!is_array($this->request['pp_friend_id']) or !count($this->request['pp_friend_id'])) { $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=error&tab=pending'); } //----------------------------------------- // Figure IDs //----------------------------------------- foreach ($this->request['pp_friend_id'] as $key => $value) { $_key = intval($key); if ($_key) { $_friend_ids[$_key] = $_key; } } if (!is_array($_friend_ids) or !count($_friend_ids)) { $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=error&tab=pending'); } //----------------------------------------- // Check our friends are OK //----------------------------------------- $this->DB->build(array('select' => '*', 'from' => 'profile_friends', 'where' => 'friends_friend_id=' . $this->memberData['member_id'] . ' AND friends_approved=0 AND friends_member_id IN (' . implode(',', $_friend_ids) . ')')); $this->DB->execute(); while ($row = $this->DB->fetch()) { $friend_ids[$row['friends_id']] = $row['friends_id']; $friend_member_ids[$row['friends_member_id']] = $row['friends_member_id']; } if (!is_array($friend_ids) or !count($friend_ids)) { $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=error&tab=pending'); } //----------------------------------------- // Load friends... //----------------------------------------- $friends = IPSMember::load($friend_member_ids); //----------------------------------------- // Check... //----------------------------------------- if (!is_array($friends) or !count($friends) or !$this->memberData['member_id']) { $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=error&tab=pending'); } //----------------------------------------- // What to do? //----------------------------------------- if ($pp_option == 'delete') { //----------------------------------------- // Delete friends records //----------------------------------------- foreach ($friend_member_ids as $friend_id) { $this->friend_lib->removeFriend($this->memberData['member_id'], $friend_id); $this->friend_lib->removeFriend($friend_id, $this->memberData['member_id']); } $msg = 'pp_friend_removed'; } else { //----------------------------------------- // Ok.. approve them in the DB. //----------------------------------------- $this->DB->update('profile_friends', array('friends_approved' => 1), 'friends_id IN(' . implode(',', $friend_ids) . ')'); //----------------------------------------- // And make sure they're added in reverse //----------------------------------------- foreach ($friend_member_ids as $friend_id) { $this->friend_lib->addFriend($friend_id, $this->memberData['member_id'], true, false); } //----------------------------------------- // Catch all (should find any missing friends) //----------------------------------------- if ($pp_option == 'add') { //----------------------------------------- // Find out who isn't already on your list... //----------------------------------------- $this->DB->build(array('select' => '*', 'from' => 'profile_friends', 'where' => 'friends_friend_id=' . $this->memberData['member_id'] . ' AND friends_approved=1 AND friends_member_id IN (' . implode(',', $_friend_ids) . ')')); $this->DB->execute(); while ($row = $this->DB->fetch()) { $friends_already[$row['friends_member_id']] = $row['friends_member_id']; } //----------------------------------------- // Check which aren't already members... //----------------------------------------- foreach ($friend_member_ids as $id => $_id) { if (in_array($id, $friends_already)) { continue; } $friends_update[$id] = $id; } //----------------------------------------- // Gonna do it? //----------------------------------------- if (is_array($friends_update) and count($friends_update)) { foreach ($friends_update as $id) { $this->DB->insert('profile_friends', array('friends_member_id' => $id, 'friends_friend_id' => $this->memberData['member_id'], 'friends_approved' => 1, 'friends_added' => time())); } } } //----------------------------------------- // Send out message... //----------------------------------------- foreach ($friends as $friend) { //----------------------------------------- // Notifications library //----------------------------------------- $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications'); $notifyLibrary = new $classToLoad($this->registry); IPSText::getTextClass('email')->getTemplate("new_friend_approved"); IPSText::getTextClass('email')->buildMessage(array('MEMBERS_DISPLAY_NAME' => $friend['members_display_name'], 'FRIEND_NAME' => $this->memberData['members_display_name'], 'LINK' => $this->settings['board_url'] . '/index.' . $this->settings['php_ext'] . '?app=members&module=profile&section=friends&do=list')); IPSText::getTextClass('email')->subject = sprintf(IPSText::getTextClass('email')->subject, $this->registry->output->buildSEOUrl('showuser='******'member_id'], 'public', $this->memberData['members_seo_name'], 'showuser'), $this->memberData['members_display_name']); $notifyLibrary->setMember($friend); $notifyLibrary->setFrom($this->memberData); $notifyLibrary->setNotificationKey('friend_request_approve'); $notifyLibrary->setNotificationUrl($this->registry->output->buildSEOUrl('showuser='******'member_id'], 'public', $this->memberData['members_seo_name'], 'showuser')); $notifyLibrary->setNotificationText(IPSText::getTextClass('email')->message); $notifyLibrary->setNotificationTitle(IPSText::getTextClass('email')->subject); try { $notifyLibrary->sendNotification(); } catch (Exception $e) { } } $this->friend_lib->recacheFriends($friend); } //----------------------------------------- // Recache.. //----------------------------------------- $this->friend_lib->recacheFriends($this->memberData); //----------------------------------------- // Return //----------------------------------------- $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=members§ion=friends&module=profile&do=list&___msg=' . $msg . '&tab=pending'); }
/** * Displays a help file * * @return @e void */ public function helpShowSection() { /* Check ID */ $id = $this->request['HID'] ? intval($this->request['HID']) : 0; if (!$id) { $this->helpShowTitles(); return; } /* Query the hel topic */ $topic = $this->DB->buildAndFetch(array('select' => 'id, title, text', 'from' => 'faq', 'where' => 'id=' . $id)); if (!$topic['id']) { $this->registry->output->showError('help_no_id', 10128); } /* Parse out board URL */ $topic['text'] = str_replace('{board_url}', $this->settings['base_url'], $topic['text']); IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'global'; $topic['text'] = IPSText::getTextClass('bbcode')->preDisplayParse($topic['text']); if ($this->request['hl']) { $topic['text'] = IPSText::searchHighlight($topic['text'], $this->request['hl']); $topic['title'] = IPSText::searchHighlight($topic['title'], $this->request['hl']); } /* Output */ $this->output .= $this->registry->output->getTemplate('help')->helpShowSection($this->lang->words['help_topic'], $this->lang->words['topic_text'], $topic['title'], $topic['text']); /* Navigation */ $this->registry->output->setTitle($this->lang->words['help_topic'] . ': ' . $topic['title'] . ' - ' . ipsRegistry::$settings['board_name']); $this->registry->output->addNavigation($this->lang->words['help_topics'], "app=core&module=help"); $this->registry->output->addNavigation($this->lang->words['help_topic'], ''); if ($this->request['xml'] == 1) { $classToLoad = IPSLib::loadLibrary(IPS_KERNEL_PATH . 'classAjax.php', 'classAjax'); $classAjax = new $classToLoad(); $classAjax->returnHtml($this->output); } }
/** * Process a report and save the data appropriate * * @access public * @param array Report data * @return array Data from saving the report */ public function processReport($com_dat) { $topic_id = intval($this->request['topic_id']); $post_id = intval($this->request['post_id']); $forum_id = intval($this->request['forum_id']); if (!$topic_id || !$post_id) { $this->registry->output->showError('reports_missing_tidpid', 10168); } $uid = md5('topic_' . $topic_id . '_' . $post_id . '_' . $forum_id . '_' . $com_dat['com_id']); $url = 'showtopic=' . intval($topic_id) . '&view=findpost&p=' . intval($post_id); $save_url = str_replace('&', '&', $url); $status = array(); $this->DB->build(array('select' => 'status, is_new, is_complete', 'from' => 'rc_status', 'where' => "is_new=1 OR is_complete=1")); $this->DB->execute(); while ($row = $this->DB->fetch()) { if ($row['is_new'] == 1) { $status['new'] = $row['status']; } elseif ($row['is_complete'] == 1) { $status['complete'] = $row['status']; } } $data = $this->DB->buildAndFetch(array('select' => 'p.post', 'from' => array('posts' => 'p'), 'where' => 'p.pid=' . $post_id, 'add_join' => array(array('select' => 't.title_seo', 'from' => array('topics' => 't'), 'where' => 't.tid=p.topic_id', 'type' => 'left'), array('select' => 'mem.member_id, mem.members_display_name', 'from' => array('members' => 'mem'), 'where' => 'mem.member_id=p.author_id', 'type' => 'left')))); IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_html = 0; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 0; IPSText::getTextClass('bbcode')->parsing_section = 'global'; $message = "[quote name='" . IPSText::getTextClass('bbcode')->makeQuoteSafe($data['members_display_name']) . "']"; $message .= IPSText::getTextClass('bbcode')->preEditParse($data['post']); $message .= "[/quote]\n\n"; $message .= $this->request['message']; $this->DB->build(array('select' => 'id', 'from' => 'rc_reports_index', 'where' => "uid='{$uid}'")); $this->DB->execute(); if ($this->DB->getTotalRows() == 0) { $this->_checkAccess($topic_id); $built_report_main = array('uid' => $uid, 'title' => $this->topic['title'], 'status' => $status['new'], 'url' => '/index.php?' . $save_url, 'seoname' => $data['title_seo'], 'seotemplate' => 'showtopic', 'rc_class' => $com_dat['com_id'], 'updated_by' => $this->memberData['member_id'], 'date_updated' => time(), 'date_created' => time(), 'exdat1' => $forum_id, 'exdat2' => $topic_id, 'exdat3' => $post_id); $this->DB->insert('rc_reports_index', $built_report_main); $rid = $this->DB->getInsertId(); } else { $the_report = $this->DB->fetch(); $rid = $the_report['id']; $this->DB->update('rc_reports_index', array('date_updated' => time(), 'status' => $status['new'], 'seoname' => $data['title_seo'], 'seotemplate' => 'showtopic'), "id='{$rid}'"); } IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_html = 0; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parsing_section = 'reports'; $build_report = array('rid' => $rid, 'report' => IPSText::getTextClass('bbcode')->preDbParse($message), 'report_by' => $this->memberData['member_id'], 'date_reported' => time()); $this->DB->insert('rc_reports', $build_report); $reports = $this->DB->buildAndFetch(array('select' => 'COUNT(*) as total', 'from' => 'rc_reports', 'where' => "rid='{$rid}'")); $this->DB->update('rc_reports_index', array('num_reports' => $reports['total']), "id='{$rid}'"); $return_data = array('REDIRECT_URL' => $url, 'FORUM_ID' => $forum_id, 'REPORT_INDEX' => $rid, 'SAVED_URL' => '/index.php?' . $save_url, 'REPORT' => $build_report['report'], 'SEOTITLE' => $data['title_seo'], 'TEMPLATE' => 'showtopic'); return $return_data; }
/** * Class entry point * * @access public * @param object Registry reference * @return void [Outputs to screen/redirects] */ public function doExecute(ipsRegistry $registry) { //----------------------------------------- // Are we doing anything with "site jump?" //----------------------------------------- switch ($this->request['f']) { case 'sj_home': $this->registry->getClass('output')->silentRedirect($this->settings['base_url']); break; case 'sj_search': $this->registry->getClass('output')->silentRedirect($this->settings['base_url'] . 'app=core&module=search'); break; case 'sj_help': $this->registry->getClass('output')->silentRedirect($this->settings['base_url'] . 'app=core&module=help'); break; default: $this->request['f'] = intval($this->request['f']); break; } $this->initForums(); //----------------------------------------- // Get the forum info based on the forum ID, // and get the category name, ID, etc. //----------------------------------------- $this->forum = $this->registry->getClass('class_forums')->forum_by_id[$this->request['f']]; //----------------------------------------- // Error out if we can not find the forum //----------------------------------------- if (!$this->forum['id']) { $this->registry->getClass('output')->showError('forums_no_id', 10333); } //----------------------------------------- // Build permissions //----------------------------------------- $this->_buildPermissions(); //----------------------------------------- // Is it a redirect forum? //----------------------------------------- if (isset($this->forum['redirect_on']) and $this->forum['redirect_on']) { $redirect = $this->DB->buildAndFetch(array('select' => 'redirect_url', 'from' => 'forums', 'where' => "id=" . $this->forum['id'])); if ($redirect['redirect_url']) { //----------------------------------------- // Update hits: //----------------------------------------- $this->DB->buildAndFetch(array('update' => 'forums', 'set' => 'redirect_hits=redirect_hits+1', 'where' => "id=" . $this->forum['id'])); //----------------------------------------- // Boink! //----------------------------------------- $this->registry->getClass('output')->silentRedirect($redirect['redirect_url']); // Game over man! } } //----------------------------------------- // If this is a sub forum, we need to get // the cat details, and parent details //----------------------------------------- $this->nav = $this->registry->getClass('class_forums')->forumsBreadcrumbNav($this->forum['id']); $this->forum['FORUM_JUMP'] = $this->registry->getClass('class_forums')->buildForumJump(1, 0, 0); //----------------------------------------- // Check forum access perms //----------------------------------------- if (empty($this->request['L'])) { $this->registry->getClass('class_forums')->forumsCheckAccess($this->forum['id'], 1); } //----------------------------------------- // Are we viewing the forum, or viewing the forum rules? //----------------------------------------- $subforum_data = array(); $data = array(); if ($this->registry->getClass('class_forums')->forumsGetChildren($this->forum['id'])) { $subforum_data = $this->showSubForums(); } if ($this->forum['sub_can_post']) { $data = $this->showForum(); } else { //----------------------------------------- // No forum to show, just use the HTML in $this->sub_output // or there will be no HTML to use in the str_replace! //----------------------------------------- $subforum_data = $subforum_data ? $subforum_data : $this->showSubForums(); } /* Posting Allowed? */ $this->forum['_user_can_post'] = 1; if (!$this->registry->permissions->check('start', $this->forum)) { $this->forum['_user_can_post'] = 0; } if (!$this->forum['sub_can_post']) { $this->forum['_user_can_post'] = 0; } if ($this->forum['min_posts_post'] && $this->forum['min_posts_post'] > $this->memberData['posts']) { $this->forum['_user_can_post'] = 0; } if (!$this->forum['status']) { $this->forum['_user_can_post'] = 0; } if (!$this->memberData['g_post_new_topics']) { $this->forum['_user_can_post'] = 0; } /* Rules */ if ($this->forum['show_rules'] == 2) { IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'topics'; IPSText::getTextClass('bbcode')->parsing_mgroup = $this->memberdata['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $this->memberData['mgroup_others']; $this->forum['rules_text'] = IPSText::getTextClass('bbcode')->preDisplayParse($this->forum['rules_text']); } //----------------------------------------- // Show the template //----------------------------------------- $template = $this->registry->getClass('output')->getTemplate('forum')->forumIndexTemplate($this->forum, $data['announce_data'], $data['topic_data'], $data['other_data'], $data['multi_mod_data'], $subforum_data, $data['footer_filter'], $data['active_users'], $this->registry->getClass('class_forums')->forumsGetModerators($this->forum['id'])); $this->registry->getClass('output')->setTitle($this->settings['board_name'] . ' -> ' . $this->forum['name']); $this->registry->getClass('output')->addContent($template); if (is_array($this->nav) and count($this->nav)) { foreach ($this->nav as $_id => $_nav) { $this->registry->getClass('output')->addNavigation($_nav[0], $_nav[1], $_nav[2], $_nav[3]); } } if ($this->forum['parent_id'] == 0) { $this->registry->output->addToDocumentHead('raw', "<link rel='up' href='{$this->settings['base_url']}' />"); } else { $this->registry->output->addToDocumentHead('raw', "<link rel='up' href='" . $this->registry->output->buildSEOUrl('showforum=' . $this->forum['parent_id'], 'public', $this->registry->getClass('class_forums')->forum_by_id[$this->forum['parent_id']]['name_seo'], 'showforum') . "' />"); } $this->registry->output->addMetaTag('description', $this->forum['name'] . ': ' . $this->forum['description']); $this->registry->getClass('output')->sendOutput(); }
/** * Function to resync a member's Facebook data * * @access public * @param mixed Member Data in an array form (result of IPSMember::load( $id, 'all' ) ) or a member ID * @return array Updated member data * * EXCEPTION CODES: * NO_MEMBER Member ID does not exist * NOT_LINKED Member ID or data specified is not linked to a FB profile */ public function syncMember($memberData) { //----------------------------------------- // INIT //----------------------------------------- $exProfile = array(); /* Do we need to load a member? */ if (!is_array($memberData)) { $memberData = IPSMember::load(intval($memberData), 'all'); } /* Got a member? */ if (!$memberData['member_id']) { throw new Exception('NO_MEMBER'); } /* Linked account? */ if (!$memberData['fb_uid']) { throw new Exception('NOT_LINKED'); } /* Thaw Options */ $bwOptions = IPSBWOptions::thaw($memberData['fb_bwoptions'], 'facebook'); /* Grab the data */ try { $this->resetApi($memberData['fb_token'], $memberData['fb_uid']); if ($this->isConnected()) { $user = $this->fetchUserData(); /* Load library */ if ($bwOptions['fbc_s_pic']) { $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/member/photo.php', 'classes_member_photo'); $photo = new $classToLoad($this->registry); $photo->save($memberData, 'facebook'); } if ($bwOptions['fbc_si_status'] and (isset($memberData['gbw_no_status_import']) and !$memberData['gbw_no_status_import']) and !$memberData['bw_no_status_update']) { /* Fetch timeline */ //$memberData['tc_last_sid_import'] = ( $memberData['tc_last_sid_import'] < 1 ) ? 100 : $memberData['tc_last_sid_import']; $_updates = $this->fetchUserTimeline($user['id'], 0, true); /* Got any? */ if (count($_updates)) { $update = array_shift($_updates); if (is_array($update) and isset($update['message'])) { /* @link http://community.invisionpower.com/tracker/issue-27746-video-in-facebook-status */ $update['message'] = strip_tags($update['message']); /* Load status class */ if (!$this->registry->isClassLoaded('memberStatus')) { $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/member/status.php', 'memberStatus'); $this->registry->setClass('memberStatus', new $classToLoad(ipsRegistry::instance())); } /* Set Author */ $this->registry->getClass('memberStatus')->setAuthor($memberData); $this->registry->getClass('memberStatus')->setStatusOwner($memberData); /* Convert if need be */ if (IPS_DOC_CHAR_SET != 'UTF-8') { $update['message'] = IPSText::utf8ToEntities($update['message']); } /* Set Content */ $this->registry->getClass('memberStatus')->setContent(trim(IPSText::getTextClass('bbcode')->stripBadWords($update['message']))); /* Set as imported */ $this->registry->getClass('memberStatus')->setIsImport(1); /* Set creator */ $this->registry->getClass('memberStatus')->setCreator('facebook'); /* Can we reply? */ if ($this->registry->getClass('memberStatus')->canCreate()) { $this->registry->getClass('memberStatus')->create(); //$exProfile['tc_last_sid_import'] = $update['id']; } } } } /* Update member */ IPSMember::save($memberData['member_id'], array('core' => array('fb_lastsync' => time()), 'extendedProfile' => $exProfile)); /* merge and return */ $memberData['fb_lastsync'] = time(); $memberData = array_merge($memberData, $exProfile); } else { /* Update member even if it failed so it's not selected on next task run */ IPSMember::save($memberData['member_id'], array('core' => array('fb_lastsync' => time()))); } } catch (Exception $e) { /* Update member even if it failed so it's not selected on next task run */ IPSMember::save($memberData['member_id'], array('core' => array('fb_lastsync' => time()))); $this->registry->output->logErrorMessage($e->getMessage(), 'FB-EXCEPTION'); } return $memberData; }
/** * Determine if notification needs to be sent, and send it * * @access protected * @param string Error message * @param integer Error code * @return boolean Email sent or not */ protected function sendErrorNotification($message, $code = 0) { if (!$this->settings['error_log_notify']) { return false; } if ($this->settings['error_log_notify'] > 1) { $level = substr($code, 0, 1); if ($this->settings['error_log_notify'] > 1) { if ($level < $this->settings['error_log_notify'] - 1) { return false; } } } //----------------------------------------- // Still here? Send email then. //----------------------------------------- IPSText::getTextClass('email')->getTemplate("error_log_notification"); IPSText::getTextClass('email')->buildMessage(array('CODE' => $code, 'MESSAGE' => $message, 'VIEWER' => $this->member->getProperty('member_id') ? $this->member->getProperty('members_display_name') : $this->lang->words['global_guestname'], 'IP_ADDRESS' => $this->member->ip_address)); IPSText::getTextClass('email')->to = $this->settings['email_in']; IPSText::getTextClass('email')->from = $this->settings['email_out']; IPSText::getTextClass('email')->sendMail(); return true; }
/** * Send a test email * * @return @e void [Outputs to screen] */ public function _emailCheckerGo() { //----------------------------------------- // Send it //----------------------------------------- IPSText::getTextClass('email')->to = $this->request['to']; IPSText::getTextClass('email')->from = $this->request['from']; IPSText::getTextClass('email')->subject = $this->request['subject']; IPSText::getTextClass('email')->message = $this->request['message']; IPSText::getTextClass('email')->sendMail(); //----------------------------------------- // Check the error log //----------------------------------------- $error = ''; $lastLog = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'mail_error_logs', 'order' => 'mlog_date DESC', 'limit' => 1)); if ($lastLog['mlog_date'] >= time() - 2 and $lastLog['mlog_subject'] == $this->request['subject']) { $error = $lastLog['mlog_msg']; } else { $this->registry->output->global_message = $this->lang->words['email_tester_ok']; } //----------------------------------------- // Show //----------------------------------------- $this->_emailCheckerForm($error); }
/** * Rebuild the RSS Stream cache * * @param mixed $rss_import_id ID of the stream to import * @param bool $return Set to true to return true/false * @param bool $id_is_array Set to true if the first paramter is an array of ids * @return mixed */ public function rssImportRebuildCache($rss_import_id, $return = true, $id_is_array = false) { /* INIT */ $errors = array(); $affected_forum_ids = array(); $rss_error = array(); $rss_import_ids = array(); $items_imported = 0; /* Check the ID */ if (!$rss_import_id) { $rss_import_id = $this->request['rss_import_id'] == 'all' ? 'all' : intval($this->request['rss_import_id']); } /* No ID Found */ if (!$rss_import_id) { $this->registry->output->global_error = $this->lang->words['im_noid']; $this->rssImportOverview(); return; } /* Create an array of ids */ if ($id_is_array == 1) { $rss_import_ids = explode(",", $rss_import_id); } /* Load the classes we need */ if (!$this->classes_loaded) { /* Get the RSS Class */ if (!is_object($this->class_rss)) { $classToLoad = IPSLib::loadLibrary(IPS_KERNEL_PATH . 'classRss.php', 'classRss'); $this->class_rss = new $classToLoad(); $this->class_rss->rss_max_show = 100; } /* Get the post class */ require_once IPSLib::getAppDir('forums') . '/sources/classes/post/classPost.php'; /*noLibHook*/ $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('forums') . '/sources/classes/post/classPostForms.php', 'classPostForms', 'forums'); $this->post = new $classToLoad($this->registry); /* Load the mod libarry */ if (!$this->func_mod) { $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('forums') . '/sources/classes/moderate.php', 'moderatorLibrary', 'forums'); $this->func_mod = new $classToLoad($this->registry); } $this->classes_loaded = 1; } /* INIT Forums */ if (!is_array($this->registry->class_forums->forum_by_id) or !count($this->registry->class_forums->forum_by_id)) { $this->registry->class_forums->forumsInit(); } /* Sort out which IDs to load.. */ if ($rss_import_id == 'all') { $where = 'rss_import_enabled=1'; // Update only enabled ones! } elseif ($id_is_array == 1) { $where = 'rss_import_id IN (' . implode(',', $rss_import_ids) . ')'; } else { $where = 'rss_import_id=' . $rss_import_id; } /* Query the RSS imports */ $this->DB->build(array('select' => '*', 'from' => 'rss_import', 'where' => $where)); $outer = $this->DB->execute(); /* Loop through and build cache */ while ($row = $this->DB->fetch($outer)) { /* Skip non-existent forums - bad stuff happens */ if (empty($this->registry->class_forums->forum_by_id[$row['rss_import_forum_id']])) { continue; } /* Allowing badwords? */ IPSText::getTextClass('bbcode')->bypass_badwords = $row['rss_import_allow_html']; /* Set this import's doctype */ $this->class_rss->doc_type = strtoupper(IPS_DOC_CHAR_SET); /* Set this import's authentication */ $this->class_rss->auth_req = $row['rss_import_auth']; $this->class_rss->auth_user = $row['rss_import_auth_user']; $this->class_rss->auth_pass = $row['rss_import_auth_pass']; /* Clear RSS object's error cache first */ $this->class_rss->errors = array(); $this->class_rss->rss_items = array(); /* Reset the rss count as this is a new feed */ $this->class_rss->rss_count = 0; $this->class_rss->rss_max_show = $row['rss_import_pergo']; /* Parse RSS */ $this->class_rss->parseFeedFromUrl($row['rss_import_url']); /* Check for errors */ if (is_array($this->class_rss->errors) and count($this->class_rss->errors)) { $rss_error = array_merge($rss_error, $this->class_rss->errors); continue; } if (!is_array($this->class_rss->rss_channels) or !count($this->class_rss->rss_channels)) { $rss_error[] = sprintf($this->lang->words['im_noopen'], $row['rss_import_url']); continue; } /* Update last check time */ $this->DB->update('rss_import', array('rss_import_last_import' => IPS_UNIX_TIME_NOW), 'rss_import_id=' . $row['rss_import_id']); /* Apparently so: Parse feeds and check for already imported GUIDs */ $final_items = array(); $items = array(); $check_guids = array(); $final_guids = array(); $count = 0; if (!is_array($this->class_rss->rss_items) or !count($this->class_rss->rss_items)) { $rss_error[] = $row['rss_import_url'] . $this->lang->words['im_noimport']; continue; } /* Loop through the channels */ foreach ($this->class_rss->rss_channels as $channel_id => $channel_data) { if (is_array($this->class_rss->rss_items[$channel_id]) and count($this->class_rss->rss_items[$channel_id])) { /* Loop through the items in this channel */ foreach ($this->class_rss->rss_items[$channel_id] as $item_data) { /* Item Data */ $item_data['content'] = $item_data['content'] ? $item_data['content'] : $item_data['description']; $item_data['guid'] = md5($row['rss_import_id'] . ($item_data['guid'] ? $item_data['guid'] : preg_replace('#\\s|\\r|\\n#is', "", $item_data['title'] . $item_data['link'] . $item_data['description']))); $item_data['unixdate'] = intval($item_data['unixdate']) ? intval($item_data['unixdate']) : IPS_UNIX_TIME_NOW; /* If feed charset doesn't match original, we converted to utf-8 and need to convert back now */ if ($this->class_rss->doc_type != $this->class_rss->orig_doc_type) { $item_data['title'] = IPSText::convertCharsets($item_data['title'], "UTF-8", IPS_DOC_CHAR_SET); $item_data['content'] = IPSText::convertCharsets($item_data['content'], "UTF-8", IPS_DOC_CHAR_SET); } /* Error check */ if (!$item_data['title'] or !$item_data['content']) { $rss_error[] = sprintf($this->lang->words['im_notitle'], $item_data['title']); continue; } /* Dates */ if ($item_data['unixdate'] < 1) { $item_data['unixdate'] = IPS_UNIX_TIME_NOW; } else { if ($item_data['unixdate'] > IPS_UNIX_TIME_NOW) { $item_data['unixdate'] = IPS_UNIX_TIME_NOW; } } /* Add to array */ $items[$item_data['guid']] = $item_data; $check_guids[] = $item_data['guid']; } } } /* Check GUIDs */ if (!count($check_guids)) { $rss_error[] = $this->lang->words['im_noitems']; continue; } $this->DB->build(array('select' => '*', 'from' => 'rss_imported', 'where' => "rss_imported_guid IN ('" . implode("','", $check_guids) . "')")); $this->DB->execute(); while ($guid = $this->DB->fetch()) { $final_guids[$guid['rss_imported_guid']] = $guid['rss_imported_guid']; } /* Compare GUIDs */ $item_count = 0; foreach ($items as $guid => $data) { if (in_array($guid, $final_guids)) { continue; } else { $item_count++; /* Make sure each item has a unique date */ $final_items[$data['unixdate'] . $item_count] = $data; } } /* Sort Array */ krsort($final_items); /* Pick off last X */ $count = 1; $tmp_final_items = $final_items; $final_items = array(); foreach ($tmp_final_items as $date => $data) { $final_items[$date] = $data; if ($count >= $row['rss_import_pergo']) { break; } $count++; } /* Anything left? */ if (!count($final_items)) { continue; } /* Figure out MID */ $member = $this->DB->buildAndFetch(array('select' => 'member_id, name, members_display_name, ip_address', 'from' => 'members', 'where' => "member_id={$row['rss_import_mid']}")); if (!$member['member_id']) { continue; } /* Set member in post class */ $this->post->setAuthor($member['member_id']); $this->post->setForumData($this->registry->getClass('class_forums')->forum_by_id[$row['rss_import_forum_id']]); $this->post->setBypassPermissionCheck(true); $this->post->setForumID($row['rss_import_forum_id']); /* Make 'dem posts */ $affected_forum_ids[] = $row['rss_import_forum_id']; /* Get editor */ $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite'); $editor = new $classToLoad(); /* Force RTE */ $editor->setForceRte(true); $editor->setRteEnabled(true); $editor->setLegacyMode(false); foreach ($final_items as $topic_item) { /* Fix & */ $topic_item['title'] = str_replace('&', '&', $topic_item['title']); $topic_item['title'] = str_replace(array("\r", "\n"), ' ', $topic_item['title']); $topic_item['title'] = str_replace(array("<br />", "<br>"), ' ', $topic_item['title']); $topic_item['title'] = trim($topic_item['title']); $topic_item['title'] = strip_tags($topic_item['title']); $topic_item['title'] = IPSText::parseCleanValue($topic_item['title']); /* Fix up &reg; */ $topic_item['title'] = str_replace('&reg;', '®', $topic_item['title']); if ($row['rss_import_topic_pre']) { $topic_item['title'] = str_replace(' ', ' ', str_replace('&nbsp;', ' ', $row['rss_import_topic_pre'])) . ' ' . $topic_item['title']; } $this->post->setTopicTitle(IPSText::mbsubstr($topic_item['title'], 0, $this->settings['topic_title_max_len'])); $this->post->setDate($topic_item['unixdate']); $this->post->setPublished($row['rss_import_topic_hide'] ? false : true); $this->post->setPublishedRedirectSkip(true); /* Clean up.. */ $topic_item['content'] = preg_replace("#<br />(\r)?\n#is", "<br />", $topic_item['content']); if (!$row['rss_import_allow_html']) { $topic_item['content'] = stripslashes($topic_item['content']); $post_content = $editor->process($topic_item['content']); } else { $post_content = stripslashes($topic_item['content']); } /* Add in Show link... */ if ($row['rss_import_showlink'] and $topic_item['link']) { $the_link = str_replace('{url}', trim($topic_item['link']), $row['rss_import_showlink']); $the_link = "<br /><br />" . stripslashes($the_link); $post_content .= $the_link; } /* Make sure HTML mode is enabled correctly */ $this->request['post_htmlstatus'] = 1; /* Prevent invalid img extensions from breaking */ $_hack = $this->settings['img_ext']; $_zack = $this->settings['max_quotes_per_post']; $this->settings['img_ext'] = null; $this->settings['max_quotes_per_post'] = 500; $tmpForum = $this->post->getForumData(); $tmpAuthor = $this->post->getAuthor(); $this->post->setForumData(array_merge($tmpForum, array('use_html' => 1))); $this->post->setAuthor(array_merge($tmpAuthor, array('g_dohtml' => 1))); $this->post->setPostContentPreFormatted($post_content); /* Insert */ try { $this->post->addTopic(); } catch (Exception $e) { } /* Reset */ $this->settings['img_ext'] = $_hack; $this->settings['max_quotes_per_post'] = $_zack; $this->request['post_htmlstatus'] = 0; $this->post->setForumData($tmpForum); $this->post->setAuthor($tmpAuthor); if (!$row['rss_import_topic_open']) { if (!$this->modLibrary) { $classToLoad = IPSLib::loadLibrary(IPSLib::getAppDir('forums') . '/sources/classes/moderate.php', 'moderatorLibrary', 'forums'); $this->modLibrary = new $classToLoad($this->registry); } $this->modLibrary->init($row['rss_import_forum_id']); $this->modLibrary->topicClose($this->post->getTopicData('tid')); } /* Insert GUID match */ $this->DB->insert('rss_imported', array('rss_imported_impid' => $row['rss_import_id'], 'rss_imported_guid' => $topic_item['guid'], 'rss_imported_tid' => $this->post->getTopicData('tid'))); $this->import_count++; } } /* Uncomment when testing imports */ //$this->DB->delete( 'rss_imported', '1=1'); /* Recount Stats */ if (count($affected_forum_ids)) { foreach ($affected_forum_ids as $fid) { $this->func_mod->forumRecount($fid); } $this->cache->rebuildCache('stats', 'global'); } /* Return */ if ($return) { $this->registry->output->global_message = $this->lang->words['im_recached']; if (count($rss_error)) { $this->registry->output->global_message .= "<br />" . implode("<br />", $rss_error); } $this->rssImportOverview(); return; } else { return TRUE; } }
/** * Recieves comment, submits to database, and redirects user * * @access private * @return void */ private function _saveComment() { //----------------------------------------- // Make sure we have a report id... //----------------------------------------- $rid = intval($this->request['rid']); if ($rid < 1) { $this->registry->output->showError('reports_no_comment', 10139); } //----------------------------------------- // Lets make sure we even have this report //----------------------------------------- $report = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'rc_reports_index', 'where' => "id=" . $rid)); if ($report['id']) { $postContent = IPSText::getTextClass('editor')->processRawPost($_POST['comment']); IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parse_html = 0; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parsing_section = 'reports'; $postContent = IPSText::getTextClass('bbcode')->preDbParse($postContent); if (!trim(IPSText::br2nl($postContent))) { $this->registry->output->showError('reports_no_comment_text', 10188); } $build_comment = array('rid' => $rid, 'comment' => $postContent, 'comment_by' => $this->memberData['member_id'], 'comment_date' => time()); $this->DB->insert('rc_comments', $build_comment); $this->DB->update('rc_reports_index', array('num_comments' => $report['num_comments'] + 1, 'date_updated' => time()), "id=" . $report['id']); } $this->registry->output->redirectScreen($this->lang->words['report_comment_saved'], $this->settings['base_url'] . "app=core&module=reports&rid={$report['id']}&do=show_report"); }
/** * Processes the registration form * * @access public * @return void */ public function registerProcessForm() { $form_errors = array(); $coppa = $this->request['coppa_user'] == 1 ? 1 : 0; $in_password = trim($this->request['PassWord']); $in_email = strtolower(trim($this->request['EmailAddress'])); $_SFS_FOUND = FALSE; /* Check */ if ($this->settings['no_reg'] == 1) { $this->registry->output->showError('registration_disabled', 2016, true); } /* Custom profile field stuff */ require_once IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php'; $custom_fields = new customProfileFields(); $custom_fields->initData('edit'); $custom_fields->parseToSave($this->request, 'register'); /* Check */ if ($custom_fields->error_messages) { $form_errors['general'] = $custom_fields->error_messages; } /* Check the email address */ if (!$in_email or strlen($in_email) < 6 or !IPSText::checkEmailAddress($in_email)) { $form_errors['email'][$this->lang->words['err_invalid_email']] = $this->lang->words['err_invalid_email']; } if (trim($this->request['PassWord_Check']) != $in_password) { $form_errors['password'][$this->lang->words['passwords_not_match']] = $this->lang->words['passwords_not_match']; } /* Test email address */ $this->request['EmailAddress_two'] = strtolower(trim($this->request['EmailAddress_two'])); $this->request['EmailAddress'] = strtolower(trim($this->request['EmailAddress'])); if (!IPSText::checkEmailAddress($this->request['EmailAddress_two'])) { $form_errors['email'][$this->lang->words['reg_error_email_invalid']] = $this->lang->words['reg_error_email_invalid']; } else { if ($in_email and $this->request['EmailAddress_two'] != $in_email) { $form_errors['email'][$this->lang->words['reg_error_email_nm']] = $this->lang->words['reg_error_email_nm']; } } /* Need username? */ $uses_name = false; foreach ($this->cache->getCache('login_methods') as $method) { if ($method['login_user_id'] == 'username') { $uses_name = true; } } if (!$uses_name) { $_REQUEST['UserName'] = $_REQUEST['members_display_name']; $this->request['UserName'] = $this->request['members_display_name']; } /* Check the username */ $user_check = IPSMember::getFunction()->cleanAndCheckName($this->request['UserName'], array(), 'name'); if ($this->settings['auth_allow_dnames']) { $disp_check = IPSMember::getFunction()->cleanAndCheckName($this->request['members_display_name'], array(), 'members_display_name'); } if (is_array($user_check['errors']) && count($user_check['errors'])) { foreach ($user_check['errors'] as $key => $error) { $form_errors[$key][] = $error; } } if ($this->settings['auth_allow_dnames'] and is_array($disp_check['errors']) && count($disp_check['errors'])) { foreach ($disp_check['errors'] as $key => $error) { $form_errors[$key][] = $error; } } /* CHECK 1: Any errors (missing fields, etc)? */ if (count($form_errors)) { $this->registerForm($form_errors); return; } /* Is this email addy taken? */ if (IPSMember::checkByEmail($in_email) == TRUE) { $form_errors['email'][$this->lang->words['reg_error_email_taken']] = $this->lang->words['reg_error_email_taken']; } /* Load handler... */ require_once IPS_ROOT_PATH . 'sources/handlers/han_login.php'; $this->han_login = new han_login($this->registry); $this->han_login->init(); $this->han_login->emailExistsCheck($in_email); if ($this->han_login->return_code and $this->han_login->return_code != 'METHOD_NOT_DEFINED' and $this->han_login->return_code != 'EMAIL_NOT_IN_USE') { $form_errors['email'][$this->lang->words['reg_error_email_taken']] = $this->lang->words['reg_error_email_taken']; } /* Are they banned [EMAIL]? */ if (IPSMember::isBanned('email', $in_email) === TRUE) { $form_errors['email'][$this->lang->words['reg_error_email_ban']] = $this->lang->words['reg_error_email_ban']; } /* Check the CAPTCHA */ if ($this->settings['bot_antispam']) { if ($this->registry->getClass('class_captcha')->validate() !== TRUE) { $form_errors['general'][$this->lang->words['err_reg_code']] = $this->lang->words['err_reg_code']; } } /* Check the Q and A */ if ($this->settings['registration_qanda']) { $qanda = intval($this->request['qanda_id']); $pass = false; if ($qanda) { $data = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'question_and_answer', 'where' => 'qa_id=' . $qanda)); if ($data['qa_id']) { $answers = explode("\n", str_replace("\r", "", $data['qa_answers'])); if (count($answers)) { foreach ($answers as $answer) { if (strtolower($answer) == strtolower($this->request['qa_answer'])) { $pass = true; break; } } } } } else { //----------------------------------------- // Do we have any questions? //----------------------------------------- $data = $this->DB->buildAndFetch(array('select' => 'COUNT(*) as questions', 'from' => 'question_and_answer')); if (!$data['questions']) { $pass = true; } } if (!$pass) { $form_errors['general'][$this->lang->words['err_q_and_a']] = $this->lang->words['err_q_and_a']; } } /* CHECK 2: Any errors ? */ if (count($form_errors)) { $this->registerForm($form_errors); return; } /* Build up the hashes */ $mem_group = $this->settings['member_group']; /* Are we asking the member or admin to preview? */ if ($this->settings['reg_auth_type']) { $mem_group = $this->settings['auth_group']; } else { if ($coppa == 1) { $mem_group = $this->settings['auth_group']; } } /* Create member */ $member = array('name' => $this->request['UserName'], 'password' => $in_password, 'members_display_name' => $this->settings['auth_allow_dnames'] ? $this->request['members_display_name'] : $this->request['UserName'], 'email' => $in_email, 'member_group_id' => $mem_group, 'joined' => time(), 'ip_address' => $this->member->ip_address, 'time_offset' => $this->request['time_offset'], 'coppa_user' => $coppa, 'members_auto_dst' => intval($this->request['dst']), 'allow_admin_mails' => intval($this->request['allow_admin_mail']), 'hide_email' => $this->request['allow_member_mail'] ? 0 : 1); /* Spam Service */ $spamCode = 0; if ($this->settings['spam_service_enabled'] && $this->settings['spam_service_api_key']) { /* Query the service */ $spamCode = IPSMember::querySpamService($in_email); /* Action to perform */ $action = $this->settings['spam_service_action_' . $spamCode]; /* Perform Action */ switch ($action) { /* Proceed with registraction */ case 1: break; /* Flag for admin approval */ /* Flag for admin approval */ case 2: $member['member_group_id'] = $this->settings['auth_group']; $this->settings['reg_auth_type'] = 'admin'; break; /* Approve the account, but ban it */ /* Approve the account, but ban it */ case 3: $member['member_banned'] = 1; $member['member_group_id'] = $this->settings['banned_group']; $this->settings['reg_auth_type'] = ''; break; } } //----------------------------------------- // Create the account //----------------------------------------- $member = IPSMember::create(array('members' => $member, 'pfields_content' => $this->request)); //----------------------------------------- // Login handler create account callback //----------------------------------------- $this->han_login->createAccount(array('email' => $member['email'], 'joined' => $member['joined'], 'password' => $in_password, 'ip_address' => $this->member->ip_address, 'username' => $member['members_display_name'])); //----------------------------------------- // We'll just ignore if this fails - it shouldn't hold up IPB anyways //----------------------------------------- /*if ( $han_login->return_code AND ( $han_login->return_code != 'METHOD_NOT_DEFINED' AND $han_login->return_code != 'SUCCESS' ) ) { $this->registry->output->showError( 'han_login_create_failed', 2017, true ); }*/ //----------------------------------------- // Validation //----------------------------------------- $validate_key = md5(IPSLib::makePassword() . time()); $time = time(); if ($coppa != 1) { if ($this->settings['reg_auth_type'] == 'user' or $this->settings['reg_auth_type'] == 'admin' or $this->settings['reg_auth_type'] == 'admin_user') { //----------------------------------------- // We want to validate all reg's via email, // after email verificiation has taken place, // we restore their previous group and remove the validate_key //----------------------------------------- $this->DB->insert('validating', array('vid' => $validate_key, 'member_id' => $member['member_id'], 'real_group' => $this->settings['member_group'], 'temp_group' => $this->settings['auth_group'], 'entry_date' => $time, 'coppa_user' => $coppa, 'new_reg' => 1, 'ip_address' => $member['ip_address'])); if ($this->settings['reg_auth_type'] == 'user' or $this->settings['reg_auth_type'] == 'admin_user') { IPSText::getTextClass('email')->getTemplate("reg_validate"); IPSText::getTextClass('email')->buildMessage(array('THE_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=auto_validate&uid=" . urlencode($member['member_id']) . "&aid=" . urlencode($validate_key), 'NAME' => $member['members_display_name'], 'MAN_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=05", 'EMAIL' => $member['email'], 'ID' => $member['member_id'], 'CODE' => $validate_key)); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $member['email']; IPSText::getTextClass('email')->sendMail(); $this->output = $this->registry->output->getTemplate('register')->showAuthorize($member); } else { if ($this->settings['reg_auth_type'] == 'admin') { $this->output = $this->registry->output->getTemplate('register')->showPreview($member); } } if ($this->settings['new_reg_notify']) { $date = $this->registry->class_localization->getDate(time(), 'LONG', 1); IPSText::getTextClass('email')->getTemplate('admin_newuser'); IPSText::getTextClass('email')->buildMessage(array('DATE' => $date, 'MEMBER_NAME' => $member['members_display_name'])); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email1'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $this->settings['email_in']; IPSText::getTextClass('email')->sendMail(); } $this->registry->output->setTitle($this->lang->words['reg_success']); $this->registry->output->addNavigation($this->lang->words['nav_reg'], ''); } else { /* We don't want to preview, or get them to validate via email. */ $stat_cache = $this->caches['stats']; if ($member['members_display_name'] and $member['member_id']) { $stat_cache['last_mem_name'] = $member['members_display_name']; $stat_cache['last_mem_id'] = $member['member_id']; } $stat_cache['mem_count'] += 1; $this->cache->setCache('stats', $stat_cache, array('array' => 1, 'deletefirst' => 0)); if ($this->settings['new_reg_notify']) { $date = $this->registry->class_localization->getDate(time(), 'LONG', 1); IPSText::getTextClass('email')->getTemplate('admin_newuser'); IPSText::getTextClass('email')->buildMessage(array('DATE' => $date, 'MEMBER_NAME' => $member['members_display_name'])); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email1'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $this->settings['email_in']; IPSText::getTextClass('email')->sendMail(); } IPSCookie::set('pass_hash', $member['member_login_key'], 1); IPSCookie::set('member_id', $member['member_id'], 1); //----------------------------------------- // Fix up session //----------------------------------------- $privacy = $this->request['Privacy'] ? 1 : 0; if ($member['g_hide_online_list']) { $privacy = 1; } $this->member->sessionClass()->convertGuestToMember(array('member_name' => $member['members_display_name'], 'member_id' => $member['member_id'], 'member_group' => $member['member_group_id'], 'login_type' => $privacy)); $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=core&module=global§ion=login&do=autologin&fromreg=1'); } } else { /* This is a COPPA user, so lets tell them they registered OK and redirect to the form. */ $this->DB->insert('validating', array('vid' => $validate_key, 'member_id' => $member['member_id'], 'real_group' => $this->settings['member_group'], 'temp_group' => $this->settings['auth_group'], 'entry_date' => $time, 'coppa_user' => $coppa, 'new_reg' => 1, 'ip_address' => $member['ip_address'])); $this->registry->output->redirectScreen($this->lang->words['cp_success'], $this->settings['base_url'] . 'app=core&module=global&section=register&do=12'); } }
/** * Parse common search results * * @access private * @param array $r Search result * @return array $html Blocks of HTML */ public function parseAndFetchHtmlBlocks($rows) { /* Forum stuff */ $sub = false; $isVnc = false; $search_term = IPSSearchRegistry::get('in.clean_search_term'); $results = array(); /* loop and process */ if (is_array($rows) and count($rows)) { foreach ($rows as $id => $r) { /* If basic search, strip the content - process only if we have content though */ if ($r['content']) { IPSText::getTextClass('bbcode')->parse_bbcode = 0; IPSText::getTextClass('bbcode')->strip_quotes = 1; IPSText::getTextClass('bbcode')->parsing_section = 'topics'; IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others']; $r['content'] = strip_tags(IPSText::getTextClass('bbcode')->stripAllTags($r['content'])); $r['content'] = str_replace(array('<br>', '<br />'), '', $r['content']); $r['content'] = trim(str_replace(array("\n\n\n", "\n\n"), "\n", str_replace("\r", '', $r['content']))); /* Highlight */ $r['content'] = IPSText::searchHighlight($this->searchTruncate($r['content'], $search_term), $search_term); } /* Format title */ $r['content_title'] = IPSText::searchHighlight($r['content_title'], $search_term); /* Format content */ list($html, $sub) = $this->formatContent($r); $results[$id] = array('html' => $html, 'app' => $r['app'], 'type' => $r['type'], 'sub' => $sub, '_followData' => !empty($r['_followData']) ? $r['_followData'] : array()); } } return $results; }
private function convert_ccs_articles() { $main = array('select' => '*', 'from' => 'content', 'order' => 'id ASC'); $this->lib->load('ccs_articles', $main); $fields = array(); $this->DB->build(array('select' => '*', 'from' => 'ccs_database_fields', 'where' => 'field_database_id = 1')); $this->DB->execute(); while ($row = $this->DB->fetch()) { $fields[$row['field_key']] = $row['field_id']; } while ($row = ipsRegistry::DB('hb')->fetch($this->lib->queryRes)) { $save = array('member_id' => $row['created_by'], 'record_saved' => strtotime($row['created']), 'category_id' => $row['catid'], 'record_locked' => 0, 'record_approved' => $row['state'] != 0 ? 1 : 0); if (strtotime($row['modified']) > 0) { $save['record_updated'] = strtotime($row['modified']); } else { $save['record_updated'] = $save['record_saved']; } if ($fields['article_title']) { $save['field_' . $fields['article_title']] = $row['title']; } if ($fields['article_body']) { IPSText::getTextClass('bbcode')->parse_bbcode = 0; IPSText::getTextClass('bbcode')->parse_html = 1; IPSText::getTextClass('bbcode')->parse_emoticons = 1; IPSText::getTextClass('bbcode')->parse_nl2br = 0; IPSText::getTextClass('bbcode')->parsing_section = 'global'; // Joomla saves half in intro and half in full if (isset($row['introtext']) && $row['introtext']) { if (!$row['fulltext']) { $row['fulltext'] = $row['introtext']; } else { $row['fulltext'] = $row['introtext'] . '<br /><br />' . $row['fulltext']; } } $save['field_' . $fields['article_body']] = IPSText::getTextClass('bbcode')->preDisplayParse($this->fixPostData($row['fulltext'])); } if ($fields['article_date']) { $save['field_' . $fields['article_date']] = strtotime($row['created']); } if ($fields['article_homepage']) { $save['field_' . $fields['article_homepage']] = ',1,'; } if ($fields['article_comments']) { $save['field_' . $fields['article_comments']] = 1; } if ($fields['article_expiry']) { $save['field_' . $fields['article_expiry']] = ''; } if ($fields['article_cutoff']) { $save['field_' . $fields['article_cutoff']] = ''; } if ($fields['article_image']) { $save['field_' . $fields['article_image']] = ''; } $this->lib->convertArticle($row['id'], $save); } $this->lib->next(); }
/** * Send digest notifications to anyone subscribed to item * * @param string $type Types of notifications to send (Possible: daily, weekly) * @param integer $sendMax Null (use ipsRegistry::$setting or send INT only) * @return @e boolean * @see allowedFrequencies() */ public function sendDigestNotifications($type, $sendMax = null) { /* Fetch data */ $blackhole = time(); // mktime( 0, 0 ); - http://community.invisionpower.com/tracker/issue-35320-daily-digests-every-2-days // The below has been changed based on troubleshooting in a ticket, 10.17.2012. With the code below not commented out, for a weekly digest we grab 15-7 days ago, rather than 8-0 days ago to send. $time = $blackhole; //( $type == 'daily' ) ? $blackhole - ( 86400 ) : $blackhole - ( 86400 * 7 ); $data = $this->getDataByAreaAndLastSentOlderThanDate($time, array($type), false, $sendMax); if (!count($data)) { return false; } /* Check for outdated notifications and update them as required */ $oldestPossDate = 0; if ($type == 'daily') { /* Grab 4 days to account for timezone differences */ $oldestPossDate = $blackhole - 86400 * 4; } else { /* Grab 10 days to ensure we don't update rows ready to be sent */ $oldestPossDate = $blackhole - 86400 * 10; } if ($oldestPossDate) { $this->DB->update('core_like', array('like_notify_sent' => IPS_UNIX_TIME_NOW), 'like_app=\'' . classes_like_registry::getApp() . '\' AND like_area=\'' . classes_like_registry::getArea() . '\' AND like_notify_sent < ' . $oldestPossDate . " AND like_notify_freq='{$type}'"); } $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications'); $notifyLibrary = new $classToLoad($this->registry); /* Array structure will be $data[ $memberId ][ $likeId ] = array(); */ foreach ($data as $memberId => $_rows) { foreach ($_rows as $row) { if (!$row['like_notify_freq'] or $row['like_notify_freq'] != $type) { continue; } /* Make sure we don't send huge digests if this is their first email since subscribing */ $row['like_notify_sent'] = $row['like_notify_sent'] ? $row['like_notify_sent'] : $row['like_added']; /* Want to fetch the data from the plug in files? */ $notificationOpts = $this->buildNotificationData($row, $type); if (!is_array($notificationOpts) or !count($notificationOpts)) { /* This will get hit if topic hasn't had a post since notification was last sent - to prevent the same row from getting picked up each time this runs we need to update the last sent timestamp for the like */ $this->DB->update('core_like', array('like_notify_sent' => IPS_UNIX_TIME_NOW), 'like_id=\'' . classes_like_registry::getKey($row['like_rel_id'], $row['like_member_id']) . '\''); continue; } $buildMessage = array(); if (is_array($notificationOpts['build_message_array']) and count($notificationOpts['build_message_array'])) { foreach ($notificationOpts['build_message_array'] as $k => $v) { if (preg_match('/\\-member:(.+?)\\-/', $v, $_matches)) { $v = str_replace($_matches[0], $row[$_matches[1]], $v); } $buildMessage[$k] = $v; } } /* Add in unsubscribe link */ $key = $row['like_app'] . ';' . $row['like_area'] . ';' . $row['like_rel_id'] . ';' . $row['like_member_id'] . ';' . $row['member_id'] . ';' . $row['email']; $buildMessage['UNSUBCRIBE_URL'] = $this->registry->output->buildSEOUrl('app=core&module=global&section=like&do=unsubscribe&key=' . IPSText::base64_encode_urlSafe($key), 'publicNoSession', 'unsubscribe', 'likeunsubscribe'); IPSText::getTextClass('email')->setPlainTextTemplate(IPSText::getTextClass('email')->getTemplate($notificationOpts['email_template'], $row['language'], trim($notificationOpts['email_lang_file']), trim($notificationOpts['email_lang_app']))); IPSText::getTextClass('email')->buildPlainTextContent($buildMessage); $notifyLibrary->setMember($row); $notifyLibrary->setFrom($notificationOpts['from'] ? $notificationOpts['from'] : $this->memberData); $notifyLibrary->setNotificationKey($notificationOpts['notification_key']); $notifyLibrary->setNotificationUrl($notificationOpts['notification_url']); $notifyLibrary->setNotificationText(IPSText::getTextClass('email')->getPlainTextContent()); $notifyLibrary->setNotificationTitle($notificationOpts['email_subject'] ? $notificationOpts['email_subject'] : IPSText::getTextClass('email')->subject); $notifyLibrary->setNotificationHtml(IPSText::getTextClass('email')->buildHtmlContent($buildMessage)); try { $notifyLibrary->sendNotification(); } catch (Exception $e) { } /* Update sent timestamp */ $this->DB->update('core_like', array('like_notify_sent' => IPS_UNIX_TIME_NOW), 'like_id=\'' . classes_like_registry::getKey($row['like_rel_id'], $row['like_member_id']) . '\''); } } return true; }
/** * Process Results * * @param array Row from database using query specified in fetch() * @return array Same data with any additional processing necessary */ public function process($row) { /* Build poster's display data */ $member = $row['author_id'] ? IPSMember::load($row['author_id'], 'profile_portal,pfields_content,sessions,groups', 'id') : IPSMember::setUpGuest(); $row = array_merge($row, IPSMember::buildDisplayData($member, array('reputation' => 0, 'warn' => 0))); /* Get forum data (damn HTML >.<) */ $forumData = ipsRegistry::getClass('class_forums')->getForumById($row['forum_id']); /* Parse BBCode */ IPSText::getTextClass('bbcode')->parse_smilies = $row['use_emo']; IPSText::getTextClass('bbcode')->parse_html = ($forumData['use_html'] and $member['g_dohtml'] and $row['post_htmlstate']) ? 1 : 0; IPSText::getTextClass('bbcode')->parse_nl2br = $row['post_htmlstate'] == 2 ? 1 : 0; IPSText::getTextClass('bbcode')->parse_bbcode = 1; IPSText::getTextClass('bbcode')->parsing_section = 'topics'; IPSText::getTextClass('bbcode')->parsing_mgroup = $member['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $member['mgroup_others']; $row['post'] = IPSText::getTextClass('bbcode')->preDisplayParse($row['post']); /* Parse attachments */ $messageHTML = array($row['pid'] => $row['post']); $attachHTML = $this->class_attach->renderAttachments($messageHTML, array($row['pid'])); if (is_array($attachHTML) and count($attachHTML)) { /* Get rid of any lingering attachment tags */ if (stristr($attachHTML[$row['pid']]['html'], "[attachment=")) { $attachHTML[$row['pid']]['html'] = IPSText::stripAttachTag($attachHTML[$row['pid']]['html']); } $row['post'] = $attachHTML[$row['pid']]['html'] . $attachHTML[$row['pid']]['attachmentHtml']; } /* Get rep buttons */ if ($row['repUserGiving'] == ipsRegistry::member()->getProperty('member_id')) { $row['has_given_rep'] = $row['rep_rating']; } $row['rep_points'] = ipsRegistry::getClass('repCache')->getRepPoints(array('app' => 'forums', 'type' => 'pid', 'type_id' => $row['pid'], 'rep_points' => $row['rep_points'])); $row['repButtons'] = ipsRegistry::getClass('repCache')->getLikeFormatted(array('app' => 'forums', 'type' => 'pid', 'id' => $row['pid'], 'rep_like_cache' => $row['rep_like_cache'])); /* Return */ return $row; }
/** * Adds a friend to the account that is logged in or specified * * @access public * @param integer $friend_id The friend being added to the account * @param integer $from_id The requesting member, defaults to current member * @param boolean $forceApproval Automatically approve, regardless of setting * @return string Error Key or blank for success */ public function addFriend($friend_id, $from_id = 0, $forceApproval = false) { /* INIT */ $friend_id = intval($friend_id); $from_id = $from_id ? intval($from_id) : $this->memberData['member_id']; $friend = array(); $member = array(); $friends_approved = 1; $message = ''; $subject = ''; $to = array(); $from = array(); $return_msg = ''; /* Can't add yourself */ if ($from_id == $friend_id) { return 'error'; } /* Load our friends account */ $friend = IPSMember::load($friend_id); /* Load our account */ $member = IPSMember::load($from_id); /* This group not allowed to add friends */ if (!$member['g_can_add_friends']) { return 'error'; } /* Make sure we found ourselves and our friend */ if (!$friend['member_id'] or !$member['member_id']) { return 'error'; } /* Are we already friends? */ $friend_check = $this->DB->buildAndFetch(array('select' => 'friends_id', 'from' => 'profile_friends', 'where' => "friends_member_id={$from_id} AND friends_friend_id={$friend['member_id']}")); if ($friend_check['friends_id']) { return 'pp_friend_already'; } /* Check flood table */ if ($this->_canAddFriend($from_id, $friend['member_id']) !== TRUE) { return 'pp_friend_timeflood'; } /* Do we approve our friends first? */ if (!$forceApproval and $friend['pp_setting_moderate_friends']) { $friends_approved = 0; $this->pendingApproval = true; } /* Insert the friend */ $this->DB->insert('profile_friends', array('friends_member_id' => $member['member_id'], 'friends_friend_id' => $friend['member_id'], 'friends_approved' => $friends_approved, 'friends_added' => time())); /* Do we need to send notifications? */ if (!$friends_approved and $friend['pp_setting_notify_friend']) { IPSText::getTextClass('email')->getTemplate("new_friend_request", $friend['language']); IPSText::getTextClass('email')->buildMessage(array('MEMBERS_DISPLAY_NAME' => $friend['members_display_name'], 'FRIEND_NAME' => $member['members_display_name'], 'LINK' => "{$this->settings['board_url']}/index.{$this->settings['php_ext']}?app=members&section=friends&module=profile&do=list&tab=pending")); $message = IPSText::getTextClass('email')->message; $subject = IPSText::getTextClass('email')->subject; $to = $friend; $from = $member; $return_msg = 'pp_friend_added_mod'; } else { if ($friend['pp_setting_notify_friend'] != 'none') { IPSText::getTextClass('email')->getTemplate("new_friend_added", $friend['language']); IPSText::getTextClass('email')->buildMessage(array('MEMBERS_DISPLAY_NAME' => $friend['members_display_name'], 'FRIEND_NAME' => $member['members_display_name'], 'LINK' => "{$this->settings['board_url']}/index.{$this->settings['php_ext']}?app=members&section=friends&module=profile&do=list")); $message = IPSText::getTextClass('email')->message; $subject = IPSText::getTextClass('email')->subject; $to = $friend; $from = $member; $return_msg = 'pp_friend_added'; } } /* Do we have something to send? */ if ($message and $subject) { /* Send an Email */ if ($friend['pp_setting_notify_friend'] == 'email' or $friend['pp_setting_notify_friend'] and $friend['members_disable_pm']) { IPSText::getTextClass('email')->subject = $subject; IPSText::getTextClass('email')->message = $message; IPSText::getTextClass('email')->to = $to['email']; IPSText::getTextClass('email')->sendMail(); } else { if ($friend['pp_setting_notify_friend']) { require_once IPSLib::getAppDir('members') . '/sources/classes/messaging/messengerFunctions.php'; $this->messengerFunctions = new messengerFunctions($this->registry); try { $this->messengerFunctions->sendNewPersonalTopic($to['member_id'], $from['member_id'], array(), $subject, IPSText::getTextClass('editor')->method == 'rte' ? nl2br($message) : $message, array('origMsgID' => 0, 'fromMsgID' => 0, 'postKey' => md5(microtime()), 'trackMsg' => 0, 'addToSentFolder' => 0, 'hideCCUser' => 0, 'forcePm' => 1, 'isSystem' => 1)); } catch (Exception $error) { $msg = $error->getMessage(); $toMember = IPSMember::load($toMemberID, 'core', 'displayname'); if (strstr($msg, 'BBCODE_')) { $msg = str_replace('BBCODE_', '', $msg); $this->registry->output->showError($msg, 10261); } else { if (isset($this->lang->words['err_' . $msg])) { $this->lang->words['err_' . $msg] = $this->lang->words['err_' . $msg]; $this->lang->words['err_' . $msg] = str_replace('#NAMES#', implode(",", $this->messengerFunctions->exceptionData), $this->lang->words['err_' . $msg]); $this->lang->words['err_' . $msg] = str_replace('#TONAME#', $toMember['members_display_name'], $this->lang->words['err_' . $msg]); $this->lang->words['err_' . $msg] = str_replace('#FROMNAME#', $this->memberData['members_display_name'], $this->lang->words['err_' . $msg]); $this->registry->output->showError('err_' . $msg, 10262); } else { $_msgString = $this->lang->words['err_UNKNOWN'] . ' ' . $msg; $this->registry->output->showError('err_UNKNOWN', 10263); } } } } } } /* Reache */ $this->recacheFriends($member); $this->recacheFriends($friend); return ''; }
/** * Process the sending of the bulk mail * * @return @e void */ protected function _mailPreviewComplete() { //----------------------------------------- // Init //----------------------------------------- $id = intval($this->request['id']); $mail = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'bulk_mail', 'where' => 'mail_id=' . $id)); $mailopts = unserialize($mail['mail_opts']); //----------------------------------------- // Build It //----------------------------------------- $contents = $this->_convertQuicktags($mail['mail_content'], $this->memberData); /* Clear out previous data */ IPSText::getTextClass('email')->clearContent(); IPSText::getTextClass('email')->unsubscribe = true; /* Specifically a HTML email */ if ($mailopts['mail_html_on']) { IPSText::getTextClass('email')->setHtmlEmail(true); IPSText::getTextClass('email')->setHtmlTemplate(str_replace("\n", "", $contents)); IPSText::getTextClass('email')->setHtmlWrapper('<#content#>'); IPSText::getTextClass('email')->buildMessage(array(), false, true, $this->memberData); } else { if ($this->settings['email_use_html']) { IPSText::getTextClass('email')->setHtmlEmail(true); IPSText::getTextClass('email')->setHtmlTemplate($contents); IPSText::getTextClass('email')->buildMessage(array(), false, true, $this->memberData); } else { IPSText::getTextClass('email')->setPlainTextTemplate($contents); IPSText::getTextClass('email')->buildMessage(array(), false, false, $this->memberData); } } IPSText::getTextClass('email')->from = $this->settings['email_out']; IPSText::getTextClass('email')->to = $this->memberData['email']; IPSText::getTextClass('email')->subject = $mail['mail_subject']; IPSText::getTextClass('email')->setHeader('Precedence', 'bulk'); //----------------------------------------- // Display //----------------------------------------- if ($mailopts['mail_html_on'] or $this->settings['email_use_html']) { echo IPSText::getTextClass('email')->getHtmlContent(); } else { echo '<pre>'; echo IPSText::getTextClass('email')->getPlainTextContent(); echo '</pre>'; } IPSText::getTextClass('email')->clearContent(); exit; }
/** * Show PM form * * @access private * @param array Array of errors * @return string returns HTML */ private function _showNewTopicForm($errors = '') { //----------------------------------------- // INIT //----------------------------------------- /* Check max per day */ if ($this->messengerFunctions->checkHasHitMax()) { $this->registry->getClass('output')->showError('maxperday_hit', 10271); } /* Check PM flood */ if ($this->messengerFunctions->floodControlCheck() !== TRUE) { $this->registry->getClass('output')->showError(sprintf($this->lang->words['pm_flood_stop'], $this->messengerFunctions->exceptionData[0]), 010271); } $_msg_id = 0; $formMemberID = intval($this->request['fromMemberID']); # WAS MID $topicID = intval($this->request['topicID']); $preview = $this->request['preview']; $inviteUsers = array(); $displayData = array('errors' => $errors, 'topicID' => $topicID, 'preview' => '', 'name' => '', 'title' => '', 'message' => ''); $_POST['Post-NS'] = isset($_POST['Post']) ? $_POST['Post'] : ''; $_POST['Post'] = IPSText::removeMacrosFromInput(IPSText::raw2form(isset($_POST['Post']) ? $_POST['Post'] : '')); //----------------------------------------- // Preview post? //----------------------------------------- if ($preview) { /* Grab language for attachment previews */ $this->registry->getClass('class_localization')->loadLanguageFile(array("public_topic"), 'forums'); IPSText::getTextClass('bbcode')->parse_html = $this->settings['msg_allow_html']; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_bbcode = $this->settings['msg_allow_code']; IPSText::getTextClass('bbcode')->parsing_section = 'pms'; IPSText::getTextClass('bbcode')->parsing_mgroup = $this->memberData['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $this->memberData['mgroup_others']; $this->settings['max_emos'] = 0; $old_msg = IPSText::getTextClass('editor')->processRawPost('Post-NS'); $old_msg = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse($old_msg)); if (!is_object($this->class_attach)) { //----------------------------------------- // Grab render attach class //----------------------------------------- require_once IPSLib::getAppDir('core') . '/sources/classes/attach/class_attach.php'; $this->class_attach = new class_attach($this->registry); } //----------------------------------------- // Continue... //----------------------------------------- $this->class_attach->type = 'msg'; $this->class_attach->attach_post_key = $this->_postKey; $this->class_attach->init(); $attachData = $this->class_attach->renderAttachments(array(0 => $old_msg)); $displayData['preview'] = $attachData[0]['html'] . $attachData[0]['attachmentHtml']; } //----------------------------------------- // Errors //----------------------------------------- if ($errors or IPSText::getTextClass('bbcode')->error != "") { if (IPSText::getTextClass('bbcode')->error) { $displayData['errors'][] = $this->lang->words[IPSText::getTextClass('bbcode')->error]; } $preview = 1; } //----------------------------------------- // Did we come from a button with a user ID? //----------------------------------------- if ($formMemberID) { $name = IPSMember::load($formMemberID, 'core'); if ($name['member_id']) { $displayData['name'] = $name['members_display_name']; } } else { $displayData['name'] = $this->request['entered_name'] ? $this->request['entered_name'] : ''; } //----------------------------------------- // Are we quoting an old message? //----------------------------------------- if ($preview) { $displayData['message'] = $_POST['Post-NS']; $displayData['title'] = str_replace("'", "'", str_replace('"', '"', IPSText::stripslashes($_POST['msg_title']))); } else { if ($topicID) { $draftTopic = $this->messengerFunctions->fetchTopicDataWithMessage($topicID, TRUE); if ($draftTopic['mt_to_member_id']) { $displayData['name'] = $draftTopic['from_name']; } if ($draftTopic['mt_title']) { $_member = IPSMember::load($draftTopic['mt_to_member_id'], 'core'); $displayData['name'] = $_member['members_display_name']; $displayData['title'] = $draftTopic['mt_title']; $_msg_id = $draftTopic['msg_id']; $this->_postKey = $draftTopic['msg_post_key']; IPSText::getTextClass('bbcode')->parse_html = $this->settings['msg_allow_html']; IPSText::getTextClass('bbcode')->parse_nl2br = 1; IPSText::getTextClass('bbcode')->parse_smilies = 1; IPSText::getTextClass('bbcode')->parse_bbcode = $this->settings['msg_allow_code']; IPSText::getTextClass('bbcode')->parsing_section = 'pms'; $displayData['message'] = IPSText::getTextClass('bbcode')->preEditParse($draftTopic['msg_post']); } } } //----------------------------------------- // CC Boxes //----------------------------------------- if ($this->memberData['g_max_mass_pm'] > 0) { if ($_POST['inviteUsers']) { $displayData['inviteUsers'] = $_POST['inviteUsers']; } else { if ($draftTopic['mt_invited_members']) { $_inviteUsers = $this->messengerFunctions->getInvitedUsers($draftTopic['mt_invited_members']); $__inviteUsers = IPSMember::load($_inviteUsers, 'core'); if (is_array($__inviteUsers)) { $_tmp = array(); foreach ($__inviteUsers as $id => $data) { $_tmp[] = $data['members_display_name']; } if (is_array($_tmp)) { $displayData['inviteUsers'] = implode(", ", $_tmp); } } } } } //----------------------------------------- // Remove side panel //----------------------------------------- IPSText::getTextClass('editor')->remove_side_panel = 1; //----------------------------------------- // PM returns //----------------------------------------- if (IPSText::getTextClass('editor')->method == 'rte' and $displayData['message'] and $fromMsgID) { $displayData['message'] = IPSText::getTextClass('bbcode')->convertForRTE(nl2br($displayData['message'])); } else { if (IPSText::getTextClass('editor')->method == 'std' and $displayData['message'] and $fromMsgID) { $displayData['message'] = IPSText::getTextClass('bbcode')->preEditParse($displayData['message']); } } //----------------------------------------- // Is this RTE? If so, convert BBCode //----------------------------------------- if (IPSText::getTextClass('editor')->method == 'rte' and $displayData['message']) { if (count($errors) or $preview) { $displayData['message'] = stripslashes($displayData['message']); } $displayData['message'] = IPSText::getTextClass('bbcode')->convertForRTE($displayData['message']); } else { if ($displayData['message']) { $displayData['message'] = IPSText::stripslashes($displayData['message']); } } $displayData['editor'] = IPSText::getTextClass('editor')->showEditor($displayData['message'], 'Post'); //----------------------------------------- // More Data... //----------------------------------------- $displayData['uploadData'] = $this->_canUpload ? array('canUpload' => 1) : array('canUpload' => 0); $displayData['postKey'] = $this->_postKey; //----------------------------------------- // Load attachments so we get some stats //----------------------------------------- require_once IPSLib::getAppDir('core') . '/sources/classes/attach/class_attach.php'; $class_attach = new class_attach($this->registry); $class_attach->type = 'msg'; $class_attach->init(); $class_attach->getUploadFormSettings(); $displayData['uploadData']['attach_stats'] = $class_attach->attach_stats; //----------------------------------------- // Build up the HTML for the send form //----------------------------------------- $this->_title = $this->lang->words['sendMsgTitle']; $this->_navigation[] = array($this->lang->words['sendMsgTitle'], ''); return $this->registry->getClass('output')->getTemplate('messaging')->sendNewPersonalTopicForm($displayData); }