Пример #1
0
 public static function photosWallEdit($userid, $asset, $wall_obj)
 {
     // @rule: We only allow editing of wall in 15 minutes
     $viewer = CFactory::getUser($userid);
     $now = JFactory::getDate();
     $interval = CTimeHelper::timeIntervalDifference($wall_obj->date, $now->toSql());
     $interval = abs($interval);
     // Only owner and site admin can edit
     if (COwnerHelper::isCommunityAdmin() || $viewer->id == $wall_obj->post_by) {
         return true;
     }
     return false;
 }
Пример #2
0
 public function editPhotoWall($wallId)
 {
     CFactory::load('helpers', 'owner');
     CFactory::load('helpers', 'time');
     $my = CFactory::getUser();
     $wall =& JTable::getInstance('Wall', 'CTable');
     $wall->load($wallId);
     // @rule: We only allow editing of wall in 15 minutes
     $now = JFactory::getDate();
     $interval = CTimeHelper::timeIntervalDifference($wall->date, $now->toMySQL());
     $interval = abs($interval);
     if ((COwnerHelper::isCommunityAdmin() || $my->id == $wall->post_by) && COMMUNITY_WALLS_EDIT_INTERVAL > $interval) {
         return true;
     }
     return false;
 }
Пример #3
0
 function _getWallHTML($wall, $wallComments, $appType, $isOwner, $processFunc, $templateFile)
 {
     CFactory::load('helpers', 'url');
     CFactory::load('helpers', 'user');
     CFactory::load('helpers', 'videos');
     CFactory::load('libraries', 'comment');
     CFactory::load('helpers', 'owner');
     CFactory::load('helpers', 'time');
     $user = CFactory::getUser($wall->post_by);
     $date = CTimeHelper::getDate($wall->date);
     $config = CFactory::getConfig();
     // @rule: for site super administrators we want to allow them to view the remove link
     $isOwner = COwnerHelper::isCommunityAdmin() ? true : $isOwner;
     $isEditable = CWall::isEditable($processFunc, $wall->id);
     // Apply any post processing on the content
     $wall->comment = CWallLibrary::_processWallContent($wall->comment);
     $commentsHTML = '';
     $comment = new CComment();
     // If the wall post is a user wall post (in profile pages), we
     // add wall comment feature
     if ($appType == 'user' || $appType == 'groups' || $appType == 'events') {
         $commentsHTML = $comment->getHTML($wallComments, 'wall-cmt-' . $wall->id, CWall::canComment($wall->type, $wall->contentid));
     }
     $avatarHTML = CUserHelper::getThumb($wall->post_by, 'avatar');
     //var_dump($avatarHTML);exit;
     // @rule: We only allow editing of wall in 15 minutes
     $now = JFactory::getDate();
     $interval = CTimeHelper::timeIntervalDifference($wall->date, $now->toMySQL());
     $interval = COMMUNITY_WALLS_EDIT_INTERVAL - abs($interval);
     $editInterval = round($interval / 60);
     // Create new instance of the template
     $tmpl = new CTemplate();
     $tmpl->set('id', $wall->id);
     $tmpl->set('author', $user->getDisplayName());
     $tmpl->set('avatarHTML', $avatarHTML);
     $tmpl->set('authorLink', CUrlHelper::userLink($user->id));
     $tmpl->set('created', $date->toFormat(JText::_('DATE_FORMAT_LC2')));
     $tmpl->set('content', $wall->comment);
     $tmpl->set('commentsHTML', $commentsHTML);
     $tmpl->set('avatar', $user->getThumbAvatar());
     $tmpl->set('isMine', $isOwner);
     $tmpl->set('isEditable', $isEditable);
     $tmpl->set('editInterval', $editInterval);
     $tmpl->set('processFunc', $processFunc);
     $tmpl->set('config', $config);
     return $tmpl->fetch($templateFile);
 }
Пример #4
0
/**
 * Deprecated since 1.8
 * Use CTimeHelper::timeIntervalDifference instead. 
 */
function cTimeIntervalDiff($start, $end)
{
    return CTimeHelper::timeIntervalDifference($start, $end);
}
Пример #5
0
 /**
  * Method to save the group
  * @return false if create fail, return the group id if create is successful
  **/
 public function save(&$event)
 {
     // Check for request forgeries
     JRequest::checkToken() or jexit(JText::_('COM_COMMUNITY_INVALID_TOKEN'));
     $mainframe = JFactory::getApplication();
     $document = JFactory::getDocument();
     $viewType = $document->getType();
     $viewName = JRequest::getCmd('view', $this->getName());
     $view = $this->getView($viewName, '', $viewType);
     if (JString::strtoupper(JRequest::getMethod()) != 'POST') {
         $view->addWarning(JText::_('COM_COMMUNITY_PERMISSION_DENIED_WARNING'));
         return false;
     }
     // Get my current data.
     $my = CFactory::getUser();
     $validated = true;
     $model = $this->getModel('events');
     $eventId = JRequest::getInt('eventid', '0');
     $isNew = $eventId == '0' ? true : false;
     $postData = JRequest::get('post');
     //format startdate and eendate with time before we bind into event object
     $this->_formatStartEndDate($postData);
     //		if( !empty($postData['coordinate']) )
     //		{
     //			$coord	= explode( ',', $postData['coordinate'] );
     //			$postData['latitude']	=   trim($coord[0]);
     //			$postData['longitude']	=   trim($coord[1]);
     //		}
     $event->load($eventId);
     $event->bind($postData);
     if (!array_key_exists('permission', $postData)) {
         $event->permission = 0;
     }
     if (!array_key_exists('allowinvite', $postData)) {
         $event->allowinvite = 0;
     } elseif (isset($postData['endtime-ampm']) && $postData['endtime-ampm'] == 'AM' && $postData['endtime-hour'] == 12) {
         $postData['endtime-hour'] = 00;
     }
     $inputFilter = CFactory::getInputFilter(true);
     // Despite the bind, we would still need to capture RAW description
     $event->description = JRequest::getVar('description', '', 'post', 'string', JREQUEST_ALLOWRAW);
     $event->description = $inputFilter->clean($event->description);
     // @rule: Test for emptyness
     if (empty($event->title)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_TITLE_ERROR'), 'error');
     }
     if (empty($event->location)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_LOCATION_ERR0R'), 'error');
     }
     // @rule: Test if the event is exists
     if ($model->isEventExist($event->title, $event->location, $event->startdate, $event->enddate, $eventId)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_TAKEN_ERROR'), 'error');
     }
     // @rule: Description cannot be empty
     /*if( empty( $event->description ) )
     		{
     			$validated = false;
     			$mainframe->enqueueMessage( JText::_('COM_COMMUNITY_EVENTS_TAKEN_ERROR'), 'error');
     		}*/
     // @rule: Start date cannot be empty
     if (empty($event->startdate)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_STARTDATE_ERROR'), 'error');
     }
     // @rule: End date cannot be empty
     if (empty($event->enddate)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_ENDDATE_ERROR'), 'error');
     }
     // @rule: Number of ticket must at least be 0
     if (Jstring::strlen($event->ticket) <= 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_TICKET_EMPTY_ERROR'), 'error');
     }
     require_once JPATH_COMPONENT . DS . 'helpers' . DS . 'time.php';
     if (CTimeHelper::timeIntervalDifference($event->startdate, $event->enddate) > 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_STARTDATE_GREATER_ERROR'), 'error');
     }
     // @rule: Event must not end in the past
     $now = CTimeHelper::getLocaleDate();
     if (CTimeHelper::timeIntervalDifference($now->toMySQL(true), $event->enddate) > 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_EVENTS_ENDDATE_GREATER_ERROR'), 'error');
     }
     if ($validated) {
         // If show event timezone is disabled, we need to set the event offset to 0.
         $config = CFactory::getConfig();
         if (!$config->get('eventshowtimezone')) {
             $event->offset = 0;
         }
         // Set the default thumbnail and avatar for the event just in case
         // the user decides to skip this
         if ($isNew) {
             $event->creator = $my->id;
             $config = CFactory::getConfig();
             //@rule: If event moderation is enabled, event should be unpublished by default
             $event->published = $config->get('event_moderation') ? 0 : 1;
             $event->created = JFactory::getDate()->toMySQL();
         }
         $event->store();
         if ($isNew) {
             CFactory::load('helpers', 'event');
             $handler = CEventHelper::getHandler($event);
             $event->contentid = $handler->getContentId();
             $event->type = $handler->getType();
             // Since this is storing event, we also need to store the creator / admin
             // into the events members table
             $member = JTable::getInstance('EventMembers', 'CTable');
             $member->eventid = $event->id;
             $member->memberid = $event->creator;
             // Creator should always be 1 as approved as they are the creator.
             $member->status = COMMUNITY_EVENT_STATUS_ATTEND;
             // @todo: Setup required permissions in the future
             $member->permission = '1';
             $member->store();
             // Increment the member count
             $event->updateGuestStats();
             $event->store();
             CFactory::load('helpers', 'event');
             $handler = CEventHelper::getHandler($event);
             // Activity stream purpose if the event is a public event
             if ($handler->isPublic()) {
                 $actor = $my->id;
                 $target = 0;
                 $content = '';
                 $cid = $event->id;
                 $app = 'events';
                 $act = $handler->getActivity('events.create', $actor, $target, $content, $cid, $app);
                 $url = $handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id, false, true, false);
                 // Set activity group id if the event is in group
                 $act->groupid = $event->type == 'group' ? $event->contentid : null;
                 $act->eventid = $event->id;
                 $act->location = $event->location;
                 $act->comment_id = $event->id;
                 $act->comment_type = 'events';
                 $act->like_id = $event->id;
                 $act->like_type = 'events';
                 $params = new CParameter('');
                 $action_str = 'events.create';
                 $cat_url = $handler->getFormattedLink('index.php?option=com_community&view=events&task=display&categoryid=' . $event->catid, false, true, false);
                 $params->set('action', $action_str);
                 $params->set('event_url', $url);
                 $params->set('event_category_url', $cat_url);
                 // Add activity logging
                 CFactory::load('libraries', 'activities');
                 CActivityStream::add($act, $params->toString());
             }
             //add user points
             CFactory::load('libraries', 'userpoints');
             CUserPoints::assignPoint($action_str);
             //add notification: New group event is added
             CFactory::load('helpers', 'event');
             if ($event->type == CEventHelper::GROUP_TYPE && $event->contentid != 0) {
                 CFactory::load('libraries', 'notification');
                 $group =& JTable::getInstance('Group', 'CTable');
                 $group->load($event->contentid);
                 $modelGroup =& $this->getModel('groups');
                 $groupMembers = array();
                 $groupMembers = $modelGroup->getMembersId($event->contentid, true);
                 $subject = JText::sprintf('COM_COMMUNITY_GROUP_NEW_EVENT_NOTIFICATION', $my->getDisplayName(), $group->name);
                 $params = new CParameter('');
                 $params->set('title', $event->title);
                 $params->set('group', $group->name);
                 $params->set('subject', $subject);
                 $params->set('url', 'index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id);
                 CNotificationLibrary::add('etype_groups_create_event', $my->id, $groupMembers, $subject, '', 'groups.event', $params);
             }
         }
         $validated = $event->id;
         $this->cacheClean(array(COMMUNITY_CACHE_TAG_FRONTPAGE, COMMUNITY_CACHE_TAG_EVENTS, COMMUNITY_CACHE_TAG_EVENTS_CAT, COMMUNITY_CACHE_TAG_ACTIVITIES));
     }
     return $validated;
 }
Пример #6
0
 public function editDiscussionWall($wallId)
 {
     CFactory::load('helpers', 'owner');
     CFactory::load('helpers', 'time');
     $wall =& JTable::getInstance('Wall', 'CTable');
     $wall->load($wallId);
     $discussion =& JTable::getInstance('Discussion', 'CTable');
     $discussion->load($wall->contentid);
     $group =& JTable::getInstance('Group', 'CTable');
     $group->load($discussion->groupid);
     $model = CFactory::getModel('Groups');
     $my = CFactory::getUser();
     // @rule: We only allow editing of wall in 15 minutes
     $now = JFactory::getDate();
     $interval = CTimeHelper::timeIntervalDifference($wall->date, $now->toMySQL());
     $interval = abs($interval);
     if (($model->isAdmin($my->id, $group->id) || COwnerHelper::isCommunityAdmin() || $my->id == $wall->post_by) && COMMUNITY_WALLS_EDIT_INTERVAL > $interval) {
         return true;
     }
     return false;
 }
Пример #7
0
 private function _generateRepeatList($event, $postData = '')
 {
     $day = 0;
     $month = 0;
     $eventList = array();
     $limit = isset($postData['limit']) ? (int) $postData['limit'] : 0;
     $defaultLimit = 0;
     $count = 0;
     // Repeat option.
     switch ($event->repeat) {
         case 'daily':
             $day = 1;
             $defaultLimit = COMMUNITY_EVENT_RECURRING_LIMIT_DAILY;
             break;
         case 'weekly':
             $day = 7;
             $defaultLimit = COMMUNITY_EVENT_RECURRING_LIMIT_WEEKLY;
             break;
         case 'monthly':
             $month = 1;
             $defaultLimit = COMMUNITY_EVENT_RECURRING_LIMIT_MONTHLY;
             break;
         default:
             break;
     }
     $strstartdate = strtotime($event->startdate);
     $starttime = date('H', $strstartdate) . ':' . date('i', $strstartdate) . ':' . date('s', $strstartdate);
     $strenddate = strtotime($event->enddate);
     $endtime = date('H', $strenddate) . ':' . date('i', $strenddate) . ':' . date('s', $strenddate);
     $startdate = date('Y-m-d', $strstartdate);
     $enddate = date('Y-m-d', $strenddate);
     $start = strtotime($event->startdate);
     $end = strtotime($event->enddate);
     // if repeatend is empty, generate dummy date to make it valid.
     if ($event->repeatend == '') {
         $repeatend = $event->enddate;
         // if both repeat end and limit never been set, use default limit.
         $limit = $limit == 0 ? $defaultLimit : $limit;
     } else {
         $repeatend = $event->repeatend;
     }
     $addDay = 0;
     $addMonth = 0;
     // Generate list of event childs in given date.
     while (CTimeHelper::timeIntervalDifference($repeatend, $enddate) >= 0 || $count < $limit) {
         // Add event child as new array item.
         $eventList[] = array('startdate' => $startdate . ' ' . $starttime, 'enddate' => $enddate . ' ' . $endtime);
         // Compute the next event child.
         $addDay += $day;
         $addMonth += $month;
         $startdate = date('Y-m-d', mktime(0, 0, 0, date('m', $start) + $addMonth, date('d', $start) + $addDay, date('Y', $start)));
         $enddate = date('Y-m-d', mktime(0, 0, 0, date('m', $end) + $addMonth, date('d', $end) + $addDay, date('Y', $end)));
         $count++;
         // To avoid unnecessary loop.
         if ($count > $defaultLimit) {
             break;
         }
     }
     // SET repeat end date for empty data from import page
     if ($event->repeatend == '') {
         $event->repeatend = $enddate;
     }
     return $eventList;
 }
Пример #8
0
 public function editDiscussionWall($wallId)
 {
     CFactory::load('helpers', 'owner');
     CFactory::load('helpers', 'time');
     $wall =& JTable::getInstance('Wall', 'CTable');
     $wall->load($wallId);
     $discussion =& JTable::getInstance('Discussion', 'CTable');
     $discussion->load($wall->contentid);
     $my = CFactory::getUser();
     // @rule: We only allow editing of wall in 15 minutes
     $now = JFactory::getDate();
     $interval = CTimeHelper::timeIntervalDifference($wall->date, $now->toMySQL());
     $interval = abs($interval);
     if ($my->authorise('community.edit', 'groups.discussion.' . $discussion->groupid, $wall) && COMMUNITY_WALLS_EDIT_INTERVAL > $interval) {
         return true;
     }
     return false;
 }
Пример #9
0
 /**
  * Method to save the group
  * @return false if create fail, return the group id if create is successful
  **/
 public function save(&$event)
 {
     // Check for request forgeries
     JRequest::checkToken() or jexit(JText::_('CC INVALID TOKEN'));
     $mainframe = JFactory::getApplication();
     $document = JFactory::getDocument();
     $viewType = $document->getType();
     $viewName = JRequest::getCmd('view', $this->getName());
     $view = $this->getView($viewName, '', $viewType);
     if (JString::strtoupper(JRequest::getMethod()) != 'POST') {
         $view->addWarning(JText::_('CC PERMISSION DENIED'));
         return false;
     }
     // Get my current data.
     $my = CFactory::getUser();
     $validated = true;
     $model = $this->getModel('events');
     $eventId = JRequest::getInt('eventid', '0');
     $isNew = $eventId == '0' ? true : false;
     $postData = JRequest::get('post');
     //format startdate and eendate with time before we bind into event object
     if (isset($postData['starttime-ampm']) && $postData['starttime-ampm'] == 'PM' && $postData['starttime-hour'] != 12) {
         $postData['starttime-hour'] = $postData['starttime-hour'] + 12;
     }
     if (isset($postData['endtime-ampm']) && $postData['endtime-ampm'] == 'PM' && $postData['endtime-hour'] != 12) {
         $postData['endtime-hour'] = $postData['endtime-hour'] + 12;
     }
     $postData['startdate'] = $postData['startdate'] . ' ' . $postData['starttime-hour'] . ':' . $postData['starttime-min'] . ':00';
     $postData['enddate'] = $postData['enddate'] . ' ' . $postData['endtime-hour'] . ':' . $postData['endtime-min'] . ':00';
     unset($postData['startdatetime']);
     unset($postData['enddatetime']);
     unset($postData['starttime-hour']);
     unset($postData['starttime-min']);
     unset($postData['starttime-ampm']);
     unset($postData['endtime-hour']);
     unset($postData['endtime-min']);
     unset($postData['endtime-ampm']);
     $event->load($eventId);
     $event->bind($postData);
     $inputFilter = CFactory::getInputFilter(true);
     // Despite the bind, we would still need to capture RAW description
     $event->description = JRequest::getVar('description', '', 'post', 'string', JREQUEST_ALLOWRAW);
     $event->description = $inputFilter->clean($event->description);
     // @rule: Test for emptyness
     if (empty($event->title)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENTS TITLE CANNOT BE EMPTY'), 'error');
     }
     if (empty($event->location)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENTS LOCATION CANNOT BE EMPTY'), 'error');
     }
     // @rule: Test if group exists
     if ($model->isEventExist($event->title, $event->location, $eventId)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENTS TAKEN'), 'error');
     }
     // @rule: Description cannot be empty
     if (empty($event->description)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENTS DESCRIPTION CANNOT BE EMPTY'), 'error');
     }
     // @rule: Start date cannot be empty
     if (empty($event->startdate)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC STARTDATE CANNOT BE EMPTY'), 'error');
     }
     // @rule: End date cannot be empty
     if (empty($event->enddate)) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC ENDATE CANNOT BE EMPTY'), 'error');
     }
     // @rule: Number of ticket must at least be 0
     if (Jstring::strlen($event->ticket) <= 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENTS TICKET CANNOT BE EMPTY'), 'error');
     }
     require_once JPATH_COMPONENT . DS . 'helpers' . DS . 'time.php';
     if (CTimeHelper::timeIntervalDifference($event->startdate, $event->enddate) > 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENT STARTDATE GREATER THAN ENDDATE'), 'error');
     }
     // @rule: Event must not end in the past
     $now = new JDate();
     $jConfig = JFactory::getConfig();
     $now->setOffset($jConfig->getValue('offset') + -COMMUNITY_DAY_HOURS);
     if (CTimeHelper::timeIntervalDifference($now->toMySQL(true), $event->enddate) > 0) {
         $validated = false;
         $mainframe->enqueueMessage(JText::_('CC EVENT ENDDATE GREATER THAN NOW'), 'error');
     }
     if ($validated) {
         // If event offset is disabled, we need to set it to 0.
         if ($event->offset == null) {
             $event->offset = 0;
         }
         // Set the default thumbnail and avatar for the event just in case
         // the user decides to skip this
         if ($isNew) {
             $event->creator = $my->id;
             $config = CFactory::getConfig();
             //@rule: If event moderation is enabled, event should be unpublished by default
             $event->published = $config->get('event_moderation') ? 0 : 1;
             $event->created = JFactory::getDate()->toMySQL();
         }
         $event->store();
         if ($isNew) {
             CFactory::load('helpers', 'event');
             $handler = CEventHelper::getHandler($event);
             $event->contentid = $handler->getContentId();
             $event->type = $handler->getType();
             // Since this is storing event, we also need to store the creator / admin
             // into the events members table
             $member = JTable::getInstance('EventMembers', 'CTable');
             $member->eventid = $event->id;
             $member->memberid = $event->creator;
             // Creator should always be 1 as approved as they are the creator.
             $member->status = COMMUNITY_EVENT_STATUS_ATTEND;
             // @todo: Setup required permissions in the future
             $member->permission = '1';
             $member->store();
             // Increment the member count
             $event->updateGuestStats();
             $event->store();
             CFactory::load('helpers', 'event');
             $handler = CEventHelper::getHandler($event);
             // Activity stream purpose if the event is a public event
             if ($handler->isPublic()) {
                 $actor = $my->id;
                 $target = 0;
                 $content = '';
                 $cid = $event->id;
                 $app = 'events';
                 $act = $handler->getActivity('events.create', $actor, $target, $content, $cid, $app);
                 $url = $handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id, false, true, false);
                 $params = new JParameter('');
                 $action_str = 'events.create';
                 $params->set('action', $action_str);
                 $params->set('event_url', $url);
                 // Add activity logging
                 CFactory::load('libraries', 'activities');
                 CActivityStream::add($act, $params->toString());
             }
             //add user points
             CFactory::load('libraries', 'userpoints');
             CUserPoints::assignPoint($action_str);
         }
         $validated = $event->id;
     }
     return $validated;
 }