drupal-civicrm/sites/all/modules/civicrm/CRM/Contact/Page/View/Note.php

307 lines
9.7 KiB
PHP
Raw Normal View History

2018-01-14 15:10:16 +02:00
<?php
/*
+--------------------------------------------------------------------+
| CiviCRM version 4.7 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2017 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
| CiviCRM is free software; you can copy, modify, and distribute it |
| under the terms of the GNU Affero General Public License |
| Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
| |
| CiviCRM is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the GNU Affero General Public License for more details. |
| |
| You should have received a copy of the GNU Affero General Public |
| License and the CiviCRM Licensing Exception along |
| with this program; if not, contact CiviCRM LLC |
| at info[AT]civicrm[DOT]org. If you have questions about the |
| GNU Affero General Public License or the licensing of CiviCRM, |
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
+--------------------------------------------------------------------+
*/
/**
*
* @package CRM
* @copyright CiviCRM LLC (c) 2004-2017
*/
/**
* Main page for viewing Notes.
*/
class CRM_Contact_Page_View_Note extends CRM_Core_Page {
/**
* The action links for notes that we need to display for the browse screen
*
* @var array
*/
static $_links = NULL;
/**
* The action links for comments that we need to display for the browse screen
*
* @var array
*/
static $_commentLinks = NULL;
/**
* View details of a note.
*/
public function view() {
$note = new CRM_Core_DAO_Note();
$note->id = $this->_id;
if ($note->find(TRUE)) {
$values = array();
CRM_Core_DAO::storeValues($note, $values);
$values['privacy'] = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_Note', 'privacy', $values['privacy']);
$this->assign('note', $values);
}
$comments = CRM_Core_BAO_Note::getNoteTree($values['id'], 1);
if (!empty($comments)) {
$this->assign('comments', $comments);
}
// add attachments part
$currentAttachmentInfo = CRM_Core_BAO_File::getEntityFile('civicrm_note', $this->_id);
$this->assign('currentAttachmentInfo', $currentAttachmentInfo);
}
/**
* called when action is browse.
*/
public function browse() {
$note = new CRM_Core_DAO_Note();
$note->entity_table = 'civicrm_contact';
$note->entity_id = $this->_contactId;
$note->orderBy('modified_date desc');
//CRM-4418, handling edit and delete separately.
$permissions = array($this->_permission);
if ($this->_permission == CRM_Core_Permission::EDIT) {
//previously delete was subset of edit
//so for consistency lets grant delete also.
$permissions[] = CRM_Core_Permission::DELETE;
}
$mask = CRM_Core_Action::mask($permissions);
$values = array();
$links = self::links();
$action = array_sum(array_keys($links)) & $mask;
$note->find();
while ($note->fetch()) {
if (!CRM_Core_BAO_Note::getNotePrivacyHidden($note)) {
CRM_Core_DAO::storeValues($note, $values[$note->id]);
$values[$note->id]['action'] = CRM_Core_Action::formLink($links,
$action,
array(
'id' => $note->id,
'cid' => $this->_contactId,
),
ts('more'),
FALSE,
'note.selector.row',
'Note',
$note->id
);
$contact = new CRM_Contact_DAO_Contact();
$contact->id = $note->contact_id;
$contact->find();
$contact->fetch();
$values[$note->id]['createdBy'] = $contact->display_name;
$values[$note->id]['comment_count'] = CRM_Core_BAO_Note::getChildCount($note->id);
// paper icon view for attachments part
$paperIconAttachmentInfo = CRM_Core_BAO_File::paperIconAttachment('civicrm_note', $note->id);
$values[$note->id]['attachment'] = $paperIconAttachmentInfo;
}
}
$this->assign('notes', $values);
$commentLinks = self::commentLinks();
$action = array_sum(array_keys($commentLinks)) & $mask;
$commentAction = CRM_Core_Action::formLink($commentLinks,
$action,
array(
'id' => $note->id,
'pid' => $note->entity_id,
'cid' => $note->entity_id,
),
ts('more'),
FALSE,
'note.comment.action',
'Note',
$note->id
);
$this->assign('commentAction', $commentAction);
$this->ajaxResponse['tabCount'] = CRM_Contact_BAO_Contact::getCountComponent('note', $this->_contactId);
}
/**
* called when action is update or new.
*/
public function edit() {
$controller = new CRM_Core_Controller_Simple('CRM_Note_Form_Note', ts('Contact Notes'), $this->_action);
$controller->setEmbedded(TRUE);
// set the userContext stack
$session = CRM_Core_Session::singleton();
$url = CRM_Utils_System::url('civicrm/contact/view',
'action=browse&selectedChild=note&cid=' . $this->_contactId
);
$session->pushUserContext($url);
if (CRM_Utils_Request::retrieve('confirmed', 'Boolean')) {
CRM_Core_BAO_Note::del($this->_id);
CRM_Utils_System::redirect($url);
}
$controller->reset();
$controller->set('entityTable', 'civicrm_contact');
$controller->set('entityId', $this->_contactId);
$controller->set('id', $this->_id);
$controller->process();
$controller->run();
}
public function preProcess() {
$this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);
if ($this->_id && CRM_Core_BAO_Note::getNotePrivacyHidden($this->_id)) {
CRM_Core_Error::statusBounce(ts('You do not have access to this note.'));
}
$this->_contactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this, TRUE);
$this->assign('contactId', $this->_contactId);
// check logged in url permission
CRM_Contact_Page_View::checkUserPermission($this);
$displayName = CRM_Contact_BAO_Contact::displayName($this->_contactId);
CRM_Utils_System::setTitle(ts('Notes for') . ' ' . $displayName);
$this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'browse');
$this->assign('action', $this->_action);
}
/**
* the main function that is called when the page loads,
* it decides the which action has to be taken for the page.
*
* @return null
*/
public function run() {
$this->preProcess();
if ($this->_action & CRM_Core_Action::VIEW) {
$this->view();
}
elseif ($this->_action & (CRM_Core_Action::UPDATE | CRM_Core_Action::ADD)) {
$this->edit();
}
elseif ($this->_action & CRM_Core_Action::DELETE) {
// we use the edit screen the confirm the delete
$this->edit();
}
$this->browse();
return parent::run();
}
/**
* Delete the note object from the db.
*/
public function delete() {
CRM_Core_BAO_Note::del($this->_id);
}
/**
* Get action links.
*
* @return array
* (reference) of action links
*/
public static function &links() {
if (!(self::$_links)) {
$deleteExtra = ts('Are you sure you want to delete this note?');
self::$_links = array(
CRM_Core_Action::VIEW => array(
'name' => ts('View'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=view&reset=1&cid=%%cid%%&id=%%id%%&selectedChild=note',
'title' => ts('View Note'),
),
CRM_Core_Action::UPDATE => array(
'name' => ts('Edit'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=update&reset=1&cid=%%cid%%&id=%%id%%&selectedChild=note',
'title' => ts('Edit Note'),
),
CRM_Core_Action::ADD => array(
'name' => ts('Comment'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=add&reset=1&cid=%%cid%%&parentId=%%id%%&selectedChild=note',
'title' => ts('Add Comment'),
),
CRM_Core_Action::DELETE => array(
'name' => ts('Delete'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=delete&reset=1&cid=%%cid%%&id=%%id%%&selectedChild=note',
'title' => ts('Delete Note'),
),
);
}
return self::$_links;
}
/**
* Get action links for comments.
*
* @return array
* (reference) of action links
*/
public static function &commentLinks() {
if (!(self::$_commentLinks)) {
self::$_commentLinks = array(
CRM_Core_Action::VIEW => array(
'name' => ts('View'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=view&reset=1&cid=%%cid%%&id={id}&selectedChild=note',
'title' => ts('View Comment'),
),
CRM_Core_Action::UPDATE => array(
'name' => ts('Edit'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=update&reset=1&cid=%%cid%%&id={id}&parentId=%%pid%%&selectedChild=note',
'title' => ts('Edit Comment'),
),
CRM_Core_Action::DELETE => array(
'name' => ts('Delete'),
'url' => 'civicrm/contact/view/note',
'qs' => 'action=delete&reset=1&cid=%%cid%%&id={id}&selectedChild=note',
'title' => ts('Delete Comment'),
),
);
}
return self::$_commentLinks;
}
}