_section) {
return;
}
// check role based permission
$instanceID = $form->getVar('_id');
if ($instanceID && !CRM_Report_Utils_Report::isInstanceGroupRoleAllowed($instanceID)) {
$url = CRM_Utils_System::url('civicrm/report/list', 'reset=1');
CRM_Core_Error::statusBounce(ts('You do not have permission to access this report.'),
$url
);
}
$attributes = CRM_Core_DAO::getAttribute('CRM_Report_DAO_Instance');
$form->add('text',
'title',
ts('Report Title'),
$attributes['title']
);
$form->add('text',
'description',
ts('Report Description'),
$attributes['description']
);
$form->add('text',
'email_subject',
ts('Subject'),
$attributes['email_subject']
);
$form->add('text',
'email_to',
ts('To'),
$attributes['email_to']
);
$form->add('text',
'email_cc',
ts('CC'),
$attributes['email_subject']
);
$form->add('textarea',
'report_header',
ts('Report Header'),
$attributes['header']
);
$form->add('textarea',
'report_footer',
ts('Report Footer'),
$attributes['footer']
);
$form->addElement('checkbox', 'is_navigation', ts('Include Report in Navigation Menu?'), NULL,
array('onclick' => "return showHideByValue('is_navigation','','navigation_menu','table-row','radio',false);")
);
$form->addElement('checkbox', 'addToDashboard', ts('Available for Dashboard?'));
$form->addElement('checkbox', 'is_reserved', ts('Reserved Report?'));
if (!CRM_Core_Permission::check('administer reserved reports')) {
$form->freeze('is_reserved');
}
$config = CRM_Core_Config::singleton();
if ($config->userFramework != 'Joomla' ||
$config->userFramework != 'WordPress'
) {
$form->addElement('select',
'permission',
ts('Permission'),
array('0' => ts('Everyone (includes anonymous)')) + CRM_Core_Permission::basicPermissions()
);
// prepare user_roles to save as names not as ids
if (function_exists('user_roles')) {
$user_roles_array = user_roles();
foreach ($user_roles_array as $key => $value) {
$user_roles[$value] = $value;
}
$grouprole = &$form->addElement('advmultiselect',
'grouprole',
ts('ACL Group/Role'),
$user_roles,
array(
'size' => 5,
'style' => 'width:240px',
'class' => 'advmultiselect',
)
);
$grouprole->setButtonAttributes('add', array('value' => ts('Add >>')));
$grouprole->setButtonAttributes('remove', array('value' => ts('<< Remove')));
}
}
// navigation field
$parentMenu = CRM_Core_BAO_Navigation::getNavigationList();
$form->add('select', 'parent_id', ts('Parent Menu'), array('' => ts('-- select --')) + $parentMenu);
// For now we only providing drilldown for one primary detail report only. In future this could be multiple reports
foreach ($form->_drilldownReport as $reportUrl => $drillLabel) {
$instanceList = CRM_Report_Utils_Report::getInstanceList($reportUrl);
if (count($instanceList) > 1)
$form->add('select', 'drilldown_id', $drillLabel, array('' => ts('- select -')) + $instanceList);
break;
}
$form->addButtons(array(
array(
'type' => 'submit',
'name' => ts('Save Report'),
'isDefault' => TRUE,
),
array(
'type' => 'cancel',
'name' => ts('Cancel'),
),
)
);
$form->addFormRule(array('CRM_Report_Form_Instance', 'formRule'), $form);
}
static function formRule($fields, $errors, $self) {
$buttonName = $self->controller->getButtonName();
$selfButtonName = $self->getVar('_instanceButtonName');
$errors = array();
if ($selfButtonName == $buttonName) {
if (empty($fields['title'])) {
$errors['title'] = ts('Title is a required field');
$self->assign('instanceFormError', TRUE);
}
}
return empty($errors) ? TRUE : $errors;
}
static function setDefaultValues(&$form, &$defaults) {
// we should not build form elements in dashlet mode
if ($form->_section) {
return;
}
$instanceID = $form->getVar('_id');
$navigationDefaults = array();
if (!isset($defaults['permission'])){
$permissions = array_flip(CRM_Core_Permission::basicPermissions( ));
$defaults['permission'] = $permissions['CiviReport: access CiviReport'];
}
$config = CRM_Core_Config::singleton();
$defaults['report_header'] = $report_header = "
CiviCRM Report
";
$defaults['report_footer'] = $report_footer = "
userFrameworkResourceURL}i/powered_by.png\" />
";
if ($instanceID) {
// this is already retrieved via Form.php
$defaults['description'] = CRM_Utils_Array::value('description', $defaults);
$defaults['report_header'] = CRM_Utils_Array::value('header', $defaults);
$defaults['report_footer'] = CRM_Utils_Array::value('footer', $defaults);
if (CRM_Utils_Array::value('navigation_id', $defaults)) {
//get the default navigation parent id
$params = array('id' => $defaults['navigation_id']);
CRM_Core_BAO_Navigation::retrieve($params, $navigationDefaults);
$defaults['is_navigation'] = 1;
$defaults['parent_id'] = CRM_Utils_Array::value('parent_id', $navigationDefaults);
if (CRM_Utils_Array::value('is_active', $navigationDefaults)) {
$form->assign('is_navigation', TRUE);
}
if (CRM_Utils_Array::value('id', $navigationDefaults)) {
$form->_navigation['id'] = $navigationDefaults['id'];
$form->_navigation['parent_id'] = $navigationDefaults['parent_id'];
}
}
if (CRM_Utils_Array::value('grouprole', $defaults)) {
foreach (explode(CRM_Core_DAO::VALUE_SEPARATOR, $defaults['grouprole']) as $value) {
$grouproles[] = $value;
}
$defaults['grouprole'] = $grouproles;
}
}
else {
$defaults['description'] = $form->_description;
}
}
static function postProcess(&$form, $redirect = TRUE) {
$params = $form->getVar('_params');
$config = CRM_Core_Config::singleton();
$params['header'] = CRM_Utils_Array::value('report_header',$params);
$params['footer'] = CRM_Utils_Array::value('report_footer',$params);
$params['domain_id'] = CRM_Core_Config::domainID();
//navigation parameters
if (CRM_Utils_Array::value('is_navigation', $params)) {
$form->_navigation['permission'] = array();
$form->_navigation['label'] = $params['title'];
$form->_navigation['name'] = $params['title'];
$permission = CRM_Utils_Array::value('permission', $params);
$form->_navigation['current_parent_id'] = CRM_Utils_Array::value('parent_id', $form->_navigation);
$form->_navigation['parent_id'] = CRM_Utils_Array::value('parent_id', $params);
$form->_navigation['is_active'] = 1;
if ($permission) {
$form->_navigation['permission'][] = $permission;
}
//unset the navigation related element,
//not used in report form values
unset($params['parent_id']);
unset($params['is_navigation']);
}
// convert roles array to string
if (isset($params['grouprole']) && is_array($params['grouprole'])) {
$grouprole_array = array();
foreach ($params['grouprole'] as $key => $value) {
$grouprole_array[$value] = $value;
}
$params['grouprole'] = implode(CRM_Core_DAO::VALUE_SEPARATOR,
array_keys($grouprole_array)
);
}
// add to dashboard
$dashletParams = array();
if (CRM_Utils_Array::value('addToDashboard', $params)) {
$dashletParams = array(
'label' => $params['title'],
'is_active' => 1,
);
$permission = CRM_Utils_Array::value('permission', $params);
if ($permission) {
$dashletParams['permission'][] = $permission;
}
}
$params['is_reserved'] = CRM_Utils_Array::value('is_reserved', $params, FALSE);
$dao = new CRM_Report_DAO_Instance();
$dao->copyValues($params);
if ($config->userFramework == 'Joomla') {
$dao->permission = 'null';
}
// explicitly set to null if params value is empty
if (empty($params['grouprole'])) {
$dao->grouprole = 'null';
}
// unset all the params that we use
$fields = array(
'title', 'to_emails', 'cc_emails', 'header', 'footer',
'qfKey', '_qf_default', 'report_header', 'report_footer', 'grouprole',
);
foreach ($fields as $field) {
unset($params[$field]);
}
$dao->form_values = serialize($params);
$instanceID = $form->getVar('_id');
$isNew = $form->getVar('_createNew');
$isCopy = 0;
if ($instanceID) {
if (!$isNew) {
// updating an existing report instance
$dao->id = $instanceID;
} else {
// making a copy of an existing instance
$isCopy = 1;
}
}
$dao->report_id = CRM_Report_Utils_Report::getValueFromUrl($instanceID);
$dao->save();
$form->set('id', $dao->id);
if (!empty($form->_navigation)) {
if ($isNew && CRM_Utils_Array::value('id', $form->_navigation)) {
unset($form->_navigation['id']);
}
$form->_navigation['url'] = "civicrm/report/instance/{$dao->id}&reset=1";
$navigation = CRM_Core_BAO_Navigation::add($form->_navigation);
if (CRM_Utils_Array::value('is_active', $form->_navigation)) {
//set the navigation id in report instance table
CRM_Core_DAO::setFieldValue('CRM_Report_DAO_Instance', $dao->id, 'navigation_id', $navigation->id);
}
else {
// has been removed from the navigation bar
CRM_Core_DAO::setFieldValue('CRM_Report_DAO_Instance', $dao->id, 'navigation_id', 'NULL');
}
//reset navigation
CRM_Core_BAO_Navigation::resetNavigation();
}
// add to dashlet
if (!empty($dashletParams)) {
$section = 2;
$chart = '';
if (CRM_Utils_Array::value('charts', $params)) {
$section = 1;
$chart = "&charts=" . $params['charts'];
}
$dashletParams['url'] = "civicrm/report/instance/{$dao->id}&reset=1§ion={$section}&snippet=5{$chart}&context=dashlet";
$dashletParams['fullscreen_url'] = "civicrm/report/instance/{$dao->id}&reset=1§ion={$section}&snippet=5{$chart}&context=dashletFullscreen";
$dashletParams['instanceURL'] = "civicrm/report/instance/{$dao->id}";
CRM_Core_BAO_Dashboard::addDashlet($dashletParams);
}
$instanceParams = array('value' => $dao->report_id);
$instanceDefaults = array();
$cmpName = "Contact";
$statusMsg = "null";
CRM_Core_DAO::commonRetrieve('CRM_Core_DAO_OptionValue',
$instanceParams,
$instanceDefaults
);
if ($cmpID = CRM_Utils_Array::value('component_id', $instanceDefaults)) {
$cmpName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Component', $cmpID,
'name', 'id'
);
$cmpName = substr($cmpName, 4);
}
if ($instanceID && !$isNew) {
// updating existing instance
$statusMsg = ts('"%1" report has been updated.', array(1 => $dao->title));
} elseif ($isCopy) {
$statusMsg = ts('Your report has been successfully copied as "%1". You are currently viewing the new copy.', array(1 => $dao->title));
} else {
$statusMsg = ts('"%1" report has been successfully created. You are currently viewing the new report instance.', array(1 => $dao->title));
}
$instanceUrl = CRM_Utils_System::url("civicrm/report/instance/{$dao->id}",
"reset=1"
);
CRM_Core_Session::setStatus($statusMsg);
if ( $redirect ) {
CRM_Utils_System::redirect($instanceUrl);
}
}
}