/** * Render object subscriptions icon and link * * Params: * * - object - Object user needs to be subscribed to * - user - User who is subscribed, if not set logged user is used * * @param array $params * @param Smarty $smarty * @return string */ function smarty_function_object_subscription($params, &$smarty) { $object = array_var($params, 'object'); if (!instance_of($object, 'ProjectObject')) { return new InvalidParamError('$object', $object, '$object is expected to be a valid instance of ProjectObject class', true); } // if $user = array_var($params, 'user'); if (!instance_of($user, 'User')) { return new InvalidParamError('$user', $user, '$user is expected to be a valid instance of User class', true); } // if $render_wrapper = (bool) array_var($params, 'render_wrapper', true); $wrapper_id = 'object_subscription_widget_' . $object->getId() . '_user_' . $user->getId(); require_once SMARTY_PATH . '/plugins/block.link.php'; if (Subscriptions::isSubscribed($user, $object)) { $content = '<a href="' . $object->getUnsubscribeUrl($user) . '" title="' . lang('Click to unsubscribe') . '"><img src="' . get_image_url('subscribe-small.gif') . '" alt="" /></a>'; } else { $content = '<a href="' . $object->getSubscribeUrl($user) . '" title="' . lang('Click to subscribe') . '"><img src="' . get_image_url('gray-subscribe-small.gif') . '" alt="" /></a>'; } // if $content .= '<script type="text/javascript">App.layout.init_subscribe_unsubscribe_link("' . $wrapper_id . '")</script>'; return $render_wrapper ? '<span id="' . $wrapper_id . '">' . $content . '</span>' : $content; }
/** * Subscribe $user to a given $object * * @param User $user * @param ProjectObject $object * @return boolean */ function subscribe($user, $object) { if (!$object->can_have_subscribers) { return new InvalidParamError('$object', $object, '$object does not support subscribers', true); } // if if (Subscriptions::isSubscribed($user, $object, false)) { return true; } // if $subscription = new Subscription(); $subscription->setUserId($user->getId()); $subscription->setParentId($object->getId()); $save = $subscription->save(); if ($save && !is_error($save)) { Subscriptions::dropUserCache($user); return true; } // if return $save; }
/** * Return array of quick options * * @param User $user * @return NamedList */ function getQuickOptions($user) { if (!isset($this->quick_options[$user->getId()])) { $options = new NamedList(); if ($this->canEdit($user)) { $options->add('edit', array('text' => lang('Edit'), 'url' => $this->getEditUrl())); } // if if ($this->canChangeCompleteStatus($user)) { if ($this->isCompleted()) { $options->add('reopen', array('text' => lang('Reopen'), 'url' => $this->getOpenUrl(), 'method' => 'post')); } else { $options->add('complete', array('text' => lang('Complete'), 'url' => $this->getCompleteUrl(), 'method' => 'post')); } // if } // if if ($this->canSubscribe($user)) { if (Subscriptions::isSubscribed($user, $this)) { $options->add('unsubscribe', array('text' => lang('Unsubscribe'), 'url' => $this->getUnsubscribeUrl(), 'method' => 'post')); } else { $options->add('subscribe', array('text' => lang('Subscribe'), 'url' => $this->getSubscribeUrl(), 'method' => 'post')); } // if } // if if ($this->canSubtask($user)) { $options->add('new_task', array('text' => lang('New Task'), 'url' => $this->getPostTaskUrl())); } // if if ($this->canSendReminder($user)) { $options->add('send_reminder', array('text' => lang('Send Reminder'), 'url' => $this->getSendReminderUrl(), 'class' => 'send_reminder')); } // if if ($this->getType() == 'Checklist') { if ($this->canEdit($user)) { $options->add('open_closed_tasks', array('text' => lang('Set All Tasks to Active'), 'url' => assemble_url('project_checklist_open_tasks', array('project_id' => $this->getProjectId(), 'checklist_id' => $this->getId())))); } } event_trigger('on_project_object_quick_options', array(&$options, $this, $user)); $this->quick_options[$user->getId()] = $options; } // if return $this->quick_options[$user->getId()]; }