/**
  * 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']);
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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();
 }
Ejemplo n.º 6
0
 /**
  * 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;
 }
Ejemplo n.º 7
0
 /**
  * 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']);
     }
 }
Ejemplo n.º 11
0
 /**
  * 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();
 }
Ejemplo n.º 12
0
 /**
  * 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']));
 }
Ejemplo n.º 13
0
 /**
  * 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&amp;module=calendar&amp;section=view&amp;do=showevent&amp;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&amp;module=calendar&amp;section=view&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month');
             $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;do=showday&amp;y={$_dateBits[0]}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month');
                 $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;do=showday&amp;y={$_dateBits[0]}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;do=showweek&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;m={$_dateBits[1]}&amp;y={$_dateBits[0]}", $this->calendar['cal_title_seo'], 'cal_month');
                             $this->registry->output->addNavigation($_dateBits[3] . ' ' . $_dateBits[2] . ', ' . $_dateBits[0], "app=calendar&amp;module=calendar&amp;section=view&amp;cal_id={$this->calendar['cal_id']}&amp;do=showday&amp;y={$_dateBits[0]}&amp;m={$_dateBits[1]}&amp;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&amp;module=calendar&amp;section=view&amp;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&amp;module=calendar&amp;section=view&amp;do=showevent&amp;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);
 }
Ejemplo n.º 14
0
 /**
  * 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&section=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&section=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&section=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&section=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&section=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&amp;module=profile&amp;section=friends&amp;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&section=friends&module=profile&do=list&___msg=' . $msg . '&tab=pending');
 }
Ejemplo n.º 15
0
 /**
  * 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&amp;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('&', '&amp;', $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&amp;module=search');
             break;
         case 'sj_help':
             $this->registry->getClass('output')->silentRedirect($this->settings['base_url'] . 'app=core&amp;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();
 }
Ejemplo n.º 18
0
 /**
  * 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;
 }
Ejemplo n.º 20
0
 /**
  * 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);
 }
Ejemplo n.º 21
0
 /**
  * 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 &amp; */
             $topic_item['title'] = str_replace('&amp;', '&', $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 &amp;reg; */
             $topic_item['title'] = str_replace('&amp;reg;', '&reg;', $topic_item['title']);
             if ($row['rss_import_topic_pre']) {
                 $topic_item['title'] = str_replace('&nbsp;', ' ', str_replace('&amp;nbsp;', '&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&amp;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&section=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&section=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&section=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&amp;module=global&amp;section=register&amp;do=12');
     }
 }
Ejemplo n.º 24
0
 /**
  * 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('&lt;br&gt;', '&lt;br /&gt;'), '', $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;
 }
Ejemplo n.º 25
0
 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();
 }
Ejemplo n.º 26
0
 /**
  * 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&amp;module=global&amp;section=like&amp;do=unsubscribe&amp;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;
 }
Ejemplo n.º 27
0
 /**
  * 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&amp;section=friends&amp;module=profile&amp;do=list&amp;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&amp;section=friends&amp;module=profile&amp;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 '';
 }
Ejemplo n.º 29
0
 /**
  * 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("'", "&#39;", str_replace('"', '&#34;', 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);
 }