Exemplo n.º 1
0
    /**
     * Show the special page
     *
     * @param $par Mixed: parameter passed to the page or null
     */
    public function execute($par)
    {
        global $wgUploadPath;
        $out = $this->getOutput();
        $request = $this->getRequest();
        $currentUser = $this->getUser();
        // Set the page title, robot policies, etc.
        $this->setHeaders();
        // Add CSS
        $out->addModuleStyles('ext.socialprofile.usergifts.css');
        $user_name = $request->getVal('user');
        $page = $request->getInt('page', 1);
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the ViewGifts page
         */
        if ($currentUser->getID() == 0 && $user_name == '') {
            $login = SpecialPage::getTitleFor('Userlogin');
            $out->redirect(htmlspecialchars($login->getFullURL('returnto=Special:ViewGifts')));
            return false;
        }
        /**
         * If no user is set in the URL, we assume it's the current user
         */
        if (!$user_name) {
            $user_name = $currentUser->getName();
        }
        $user_id = User::idFromName($user_name);
        $user = Title::makeTitle(NS_USER, $user_name);
        /**
         * Error message for username that does not exist (from URL)
         */
        if ($user_id == 0) {
            $out->setPageTitle($this->msg('g-error-title')->plain());
            $out->addHTML($this->msg('g-error-message-no-user')->plain());
            return false;
        }
        /**
         * Config for the page
         */
        $per_page = 10;
        $per_row = 2;
        /**
         * Get all gifts for this user into the array
         */
        $rel = new UserGifts($user_name);
        $gifts = $rel->getUserGiftList(0, $per_page, $page);
        $total = $rel->getGiftCountByUsername($user_name);
        /**
         * Show gift count for user
         */
        $out->setPageTitle($this->msg('g-list-title', $rel->user_name)->parse());
        $output = '<div class="back-links">
			<a href="' . $user->getFullURL() . '">' . $this->msg('g-back-link', $rel->user_name)->parse() . '</a>
		</div>
		<div class="g-count">' . $this->msg('g-count', $rel->user_name, $total)->parse() . '</div>';
        if ($gifts) {
            $x = 1;
            // Safe links
            $viewGiftLink = SpecialPage::getTitleFor('ViewGift');
            $giveGiftLink = SpecialPage::getTitleFor('GiveGift');
            $removeGiftLink = SpecialPage::getTitleFor('RemoveGift');
            foreach ($gifts as $gift) {
                $giftname_length = strlen($gift['gift_name']);
                $giftname_space = stripos($gift['gift_name'], ' ');
                if (($giftname_space == false || $giftname_space >= "30") && $giftname_length > 30) {
                    $gift_name_display = substr($gift['gift_name'], 0, 30) . ' ' . substr($gift['gift_name'], 30, 50);
                } else {
                    $gift_name_display = $gift['gift_name'];
                }
                $user_from = Title::makeTitle(NS_USER, $gift['user_name_from']);
                $gift_image = "<img src=\"{$wgUploadPath}/awards/" . Gifts::getGiftImage($gift['gift_id'], 'l') . '" border="0" alt="" />';
                $output .= '<div class="g-item">
					<a href="' . htmlspecialchars($viewGiftLink->getFullURL('gift_id=' . $gift['id'])) . '">' . $gift_image . '</a>
					<div class="g-title">
						<a href="' . htmlspecialchars($viewGiftLink->getFullURL('gift_id=' . $gift['id'])) . '">' . $gift_name_display . '</a>';
                if ($gift['status'] == 1) {
                    if ($user_name == $currentUser->getName()) {
                        $rel->clearUserGiftStatus($gift['id']);
                        $rel->decNewGiftCount($currentUser->getID());
                    }
                    $output .= '<span class="g-new">' . $this->msg('g-new')->plain() . '</span>';
                }
                $output .= '</div>';
                $output .= '<div class="g-from">' . $this->msg('g-from', htmlspecialchars($user_from->getFullURL()), $gift['user_name_from'])->text() . '</div>
					<div class="g-actions">
						<a href="' . htmlspecialchars($giveGiftLink->getFullURL('gift_id=' . $gift['gift_id'])) . '">' . $this->msg('g-to-another')->plain() . '</a>';
                if ($rel->user_name == $currentUser->getName()) {
                    $output .= '&#160;';
                    $output .= $this->msg('pipe-separator')->escaped();
                    $output .= '&#160;';
                    $output .= '<a href="' . htmlspecialchars($removeGiftLink->getFullURL('gift_id=' . $gift['id'])) . '">' . $this->msg('g-remove-gift')->plain() . '</a>';
                }
                $output .= '</div>
					<div class="cleared"></div>';
                $output .= '</div>';
                if ($x == count($gifts) || $x != 1 && $x % $per_row == 0) {
                    $output .= '<div class="cleared"></div>';
                }
                $x++;
            }
        }
        /**
         * Build next/prev nav
         */
        $numofpages = $total / $per_page;
        $pageLink = $this->getPageTitle();
        if ($numofpages > 1) {
            $output .= '<div class="page-nav">';
            if ($page > 1) {
                $output .= Linker::link($pageLink, $this->msg('g-previous')->plain(), array(), array('user' => $user_name, 'page' => $page - 1)) . $this->msg('word-separator')->plain();
            }
            if ($total % $per_page != 0) {
                $numofpages++;
            }
            if ($numofpages >= 9 && $page < $total) {
                $numofpages = 9 + $page;
            }
            if ($numofpages >= $total / $per_page) {
                $numofpages = $total / $per_page + 1;
            }
            for ($i = 1; $i <= $numofpages; $i++) {
                if ($i == $page) {
                    $output .= $i . ' ';
                } else {
                    $output .= Linker::link($pageLink, $i, array(), array('user' => $user_name, 'page' => $i)) . $this->msg('word-separator')->plain();
                }
            }
            if ($total - $per_page * $page > 0) {
                $output .= $this->msg('word-separator')->plain() . Linker::link($pageLink, $this->msg('g-next')->plain(), array(), array('user' => $user_name, 'page' => $page + 1));
            }
            $output .= '</div>';
        }
        $out->addHTML($output);
    }
    function getGifts($user_name)
    {
        global $wgUser, $wgMemc, $wgUserProfileDisplay, $wgUploadPath;
        // If not enabled in site settings, don't display
        if ($wgUserProfileDisplay['gifts'] == false) {
            return '';
        }
        $output = '';
        // User to user gifts
        $g = new UserGifts($user_name);
        $user_safe = urlencode($user_name);
        // Try cache
        $key = wfMemcKey('user', 'profile', 'gifts', "{$g->user_id}");
        $data = $wgMemc->get($key);
        if (!$data) {
            wfDebug("Got profile gifts for user {$user_name} from DB\n");
            $gifts = $g->getUserGiftList(0, 4);
            $wgMemc->set($key, $gifts, 60 * 60 * 4);
        } else {
            wfDebug("Got profile gifts for user {$user_name} from cache\n");
            $gifts = $data;
        }
        $gift_count = $g->getGiftCountByUsername($user_name);
        $gift_link = SpecialPage::getTitleFor('ViewGifts');
        $per_row = 4;
        if ($gifts) {
            $output .= '<div class="user-section-heading">
				<div class="user-section-title">' . wfMsg('user-gifts-title') . '</div>
				<div class="user-section-actions">
					<div class="action-right">';
            if ($gift_count > 4) {
                $output .= '<a href="' . $gift_link->escapeFullURL('user='******'" rel="nofollow">' . wfMsg('user-view-all') . '</a>';
            }
            $output .= '</div>
					<div class="action-left">';
            if ($gift_count > 4) {
                $output .= wfMsg('user-count-separator', '4', $gift_count);
            } else {
                $output .= wfMsg('user-count-separator', $gift_count, $gift_count);
            }
            $output .= '</div>
					<div class="cleared"></div>
				</div>
			</div>
			<div class="cleared"></div>
			<div class="user-gift-container">';
            $x = 1;
            foreach ($gifts as $gift) {
                if ($gift['status'] == 1 && $user_name == $wgUser->getName()) {
                    $g->clearUserGiftStatus($gift['id']);
                    $wgMemc->delete($key);
                    $g->decNewGiftCount($wgUser->getID());
                }
                $user = Title::makeTitle(NS_USER, $gift['user_name_from']);
                $gift_image = '<img src="' . $wgUploadPath . '/awards/' . Gifts::getGiftImage($gift['gift_id'], 'ml') . '" border="0" alt="" />';
                $gift_link = $user = SpecialPage::getTitleFor('ViewGift');
                $class = '';
                if ($gift['status'] == 1) {
                    $class = 'class="user-page-new"';
                }
                $output .= '<a href="' . $gift_link->escapeFullURL('gift_id=' . $gift['id']) . '" ' . $class . " rel=\"nofollow\">{$gift_image}</a>";
                if ($x == count($gifts) || $x != 1 && $x % $per_row == 0) {
                    $output .= '<div class="cleared"></div>';
                }
                $x++;
            }
            $output .= '</div>';
        }
        return $output;
    }