Remove functions and db columns no longer needed by the streamlined dashboard.
*/
public static function dashboard() {
switch ($_REQUEST['op']) {
- case 'get_widget':
- $dashletID = CRM_Utils_Type::escape($_GET['id'], 'Positive');
- $dashlets = CRM_Core_BAO_Dashboard::getDashletInfo($dashletID);
- CRM_Utils_JSON::output($dashlets);
- break;
-
case 'save_columns':
CRM_Core_BAO_Dashboard::saveDashletChanges($_REQUEST['columns']);
break;
$resources->addStyleFile('civicrm', 'css/dashboard.css');
$this->assign('contactDashlets', CRM_Core_BAO_Dashboard::getContactDashletsForJS());
- $resetCache = CRM_Utils_Request::retrieve('resetCache', 'Positive', CRM_Core_DAO::$_nullObject);
-
CRM_Utils_System::setTitle(ts('CiviCRM Home'));
$session = CRM_Core_Session::singleton();
$contactID = $session->get('userID');
- if ($resetCache) {
- CRM_Core_BAO_Dashboard::resetDashletCache($contactID);
- }
-
// call hook to get html from other modules
// ignored but needed to prevent warnings
$contentPlacement = CRM_Utils_Hook::DASHBOARD_BELOW;
$contactDashlets = $availableDashlets = array();
foreach ($currentDashlets as $item) {
- $key = "{$item['dashboard_id']}-{$item['is_minimized']}";
+ $key = "{$item['dashboard_id']}-0";
$contactDashlets[$item['column_no']][$key] = array(
'label' => $item['label'],
'is_reserved' => $allDashlets[$item['dashboard_id']]['is_reserved'],
'id',
'weight',
'column_no',
- 'is_minimized',
'dashboard_id',
'dashboard_id.name',
'dashboard_id.label',
'dashboard_id' => $item['dashboard_id'],
'weight' => $item['weight'],
'column_no' => $item['column_no'],
- 'is_minimized' => $item['is_minimized'],
'name' => $item['dashboard_id.name'],
'label' => $item['dashboard_id.label'],
'url' => $item['dashboard_id.url'],
return $dashlets;
}
+ /**
+ * @return array
+ */
public static function getContactDashletsForJS() {
$data = array(array(), array());
foreach (self::getContactDashlets() as $item) {
'dashboard_id' => $values['dashboard_id'],
'weight' => $values['weight'],
'column_no' => $values['column_no'],
- 'is_minimized' => $values['is_minimized'],
'name' => $dashlet['name'],
'label' => $dashlet['label'],
'url' => $dashlet['url'],
}
/**
- * Get details of each dashlets.
- *
- * @param int $dashletID
- * Widget ID.
- *
- * @return array
- * associted array title and content
- */
- public static function getDashletInfo($dashletID) {
- $dashletInfo = array();
-
- $params = array(1 => array($dashletID, 'Integer'));
- $query = "SELECT name, label, url, fullscreen_url, is_fullscreen FROM civicrm_dashboard WHERE id = %1";
- $dashboadDAO = CRM_Core_DAO::executeQuery($query, $params);
- $dashboadDAO->fetch();
-
- // build the content
- $dao = new CRM_Contact_DAO_DashboardContact();
-
- $session = CRM_Core_Session::singleton();
- $dao->contact_id = $session->get('userID');
- $dao->dashboard_id = $dashletID;
- $dao->find(TRUE);
-
- //reset content based on the cache time set in config
- $createdDate = strtotime($dao->created_date);
- $dateDiff = round(abs(time() - $createdDate) / 60);
-
- $config = CRM_Core_Config::singleton();
- if ($config->dashboardCacheTimeout <= $dateDiff) {
- $dao->content = NULL;
- }
-
- // if content is empty and url is set, retrieve it from url
- if (!$dao->content && $dashboadDAO->url) {
- $url = $dashboadDAO->url;
-
- // CRM-7087
- // -lets use relative url for internal use.
- // -make sure relative url should not be htmlize.
- if (substr($dashboadDAO->url, 0, 4) != 'http') {
- $urlParam = explode('?', $dashboadDAO->url);
- $url = CRM_Utils_System::url($urlParam[0], $urlParam[1], TRUE, NULL, FALSE);
- }
-
- //get content from url
- $dao->content = CRM_Utils_System::getServerResponse($url);
- $dao->created_date = date("YmdHis");
- $dao->save();
- }
-
- $dashletInfo = array(
- 'title' => $dashboadDAO->label,
- 'name' => $dashboadDAO->name,
- 'content' => $dao->content,
- );
-
- if ($dashboadDAO->is_fullscreen) {
- $fullscreenUrl = $dashboadDAO->fullscreen_url;
- if (substr($fullscreenUrl, 0, 4) != 'http') {
- $urlParam = explode('?', $dashboadDAO->fullscreen_url);
- $fullscreenUrl = CRM_Utils_System::url($urlParam[0], $urlParam[1], TRUE, NULL, FALSE);
- }
- $dashletInfo['fullscreenUrl'] = $fullscreenUrl;
- }
- return $dashletInfo;
- }
-
- /**
- * Save changes made by use to the Dashlet.
+ * Save changes made by user to the Dashlet.
*
* @param array $columns
*
}
$weight = 1;
foreach ($dashlets as $dashletID => $isMinimized) {
- $isMinimized = (int) $isMinimized;
$dashletID = (int) $dashletID;
$query = "INSERT INTO civicrm_dashboard_contact
- (weight, is_minimized, column_no, is_active, dashboard_id, contact_id)
- VALUES({$weight}, {$isMinimized}, {$colNo}, 1, {$dashletID}, {$contactID})
- ON DUPLICATE KEY UPDATE weight = {$weight}, is_minimized = {$isMinimized}, column_no = {$colNo}, is_active = 1";
+ (weight, column_no, is_active, dashboard_id, contact_id)
+ VALUES({$weight}, {$colNo}, 1, {$dashletID}, {$contactID})
+ ON DUPLICATE KEY UPDATE weight = {$weight}, column_no = {$colNo}, is_active = 1";
// fire update query for each column
CRM_Core_DAO::executeQuery($query);
return $dashlet;
}
- /**
- * @param $url
- *
- * @return string
- */
- public static function getDashletName($url) {
- $urlElements = explode('/', $url);
- if ($urlElements[1] == 'dashlet') {
- return $urlElements[2];
- }
- elseif ($urlElements[1] == 'report') {
- return 'report/' . $urlElements[3];
- }
- return $url;
- }
-
/**
* Update contact dashboard with new dashlet.
*
return TRUE;
}
- /**
- * Reset dashlet cache.
- *
- * @param int $contactID
- * Reset cache only for specific contact.
- */
- public static function resetDashletCache($contactID = NULL) {
- $whereClause = NULL;
- $params = array();
- if ($contactID) {
- $whereClause = "WHERE contact_id = %1";
- $params[1] = array($contactID, 'Integer');
- }
- $query = "UPDATE civicrm_dashboard_contact SET content = NULL $whereClause";
- $dao = CRM_Core_DAO::executeQuery($query, $params);
- }
-
/**
* Delete Dashlet.
*
);
}
}
- // also reset the dashlet cache in case permissions have changed etc
- // FIXME: decouple this
- CRM_Core_BAO_Dashboard::resetDashletCache($contactID);
return $newKey;
}
* @param string $columnName
*/
public static function dropColumn($tableName, $columnName) {
- $sql = "ALTER TABLE $tableName DROP COLUMN $columnName";
- CRM_Core_DAO::executeQuery($sql);
+ if (self::checkIfFieldExists($tableName, $columnName)) {
+ $sql = "ALTER TABLE $tableName DROP COLUMN $columnName";
+ CRM_Core_DAO::executeQuery($sql);
+ }
}
/**
// add to dashlet
if (!empty($dashletParams)) {
$section = 2;
- $chart = '';
+ $chart = $limitResult = '';
if (!empty($params['charts'])) {
$section = 1;
$chart = "&charts=" . $params['charts'];
}
- $limitResult = NULL;
if (!empty($params['row_count'])) {
$limitResult = '&rowCount=' . $params['row_count'];
}
$dashletParams['name'] = "report/{$instance->id}";
- $dashletParams['url'] = "civicrm/report/instance/{$instance->id}?reset=1§ion={$section}&snippet=5{$chart}&context=dashlet" . $limitResult;
- $dashletParams['fullscreen_url'] = "civicrm/report/instance/{$instance->id}?reset=1§ion={$section}&snippet=5{$chart}&context=dashletFullscreen" . $limitResult;
+ $dashletParams['url'] = "civicrm/report/instance/{$instance->id}?reset=1§ion={$section}{$chart}&context=dashlet" . $limitResult;
+ $dashletParams['fullscreen_url'] = "civicrm/report/instance/{$instance->id}?reset=1§ion={$section}{$chart}&context=dashletFullscreen" . $limitResult;
$dashletParams['instanceURL'] = "civicrm/report/instance/{$instance->id}";
CRM_Core_BAO_Dashboard::addDashlet($dashletParams);
}
CRM_Core_DAO::executeQuery('DELETE c1 FROM civicrm_dashboard_contact c1, civicrm_dashboard_contact c2 WHERE c1.contact_id = c2.contact_id AND c1.dashboard_id = c2.dashboard_id AND c1.id > c2.id');
CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_dashboard_contact ADD UNIQUE INDEX index_dashboard_id_contact_id (dashboard_id, contact_id);');
}
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard_contact', 'content');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard_contact', 'is_minimized');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard_contact', 'is_fullscreen');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard_contact', 'created_date');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard', 'is_fullscreen');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard', 'is_minimized');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard', 'column_no');
+ CRM_Core_BAO_SchemaHandler::dropColumn('civicrm_dashboard', 'weight');
+
+ CRM_Core_DAO::executeQuery('UPDATE civicrm_dashboard SET url = REPLACE(url, "&snippet=5", ""), fullscreen_url = REPLACE(fullscreen_url, "&snippet=5", "")');
+ return TRUE;
}
/**
}
}
- /**
- * Execute external or internal URLs and return server response.
- *
- * @param string $url
- * Request URL.
- * @param bool $addCookie
- * Whether to provide a cookie. Should be true to access internal URLs.
- *
- * @return string
- * Response from URL.
- */
- public static function getServerResponse($url, $addCookie = TRUE) {
- CRM_Core_TemporaryErrorScope::ignoreException();
- require_once 'HTTP/Request.php';
- $request = new HTTP_Request($url);
-
- if ($addCookie) {
- foreach ($_COOKIE as $name => $value) {
- $request->addCookie($name, $value);
- }
- }
-
- if (isset($_SERVER['AUTH_TYPE'])) {
- $request->setBasicAuth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
- }
-
- $config = CRM_Core_Config::singleton();
- if ($config->userFramework == 'WordPress') {
- session_write_close();
- }
-
- $request->sendRequest();
- $response = $request->getResponseBody();
-
- return $response;
- }
-
/**
* Exit with provided exit code.
*
// These define the urls and data objects used for all of the ajax requests to the server.
ajaxCallbacks: {
- // jQuery.dashboard() POSTs the widget-to-column settings here. The server's
- // response is sent to console.log() (if it exists), but is not used. No checks
- // for errors have been implemented yet.
+ // jQuery.dashboard() POSTs the widget-to-column settings here.
// The 'columns' property of data is reserved for the widget-to-columns settings:
// An array (keyed by zero-indexed column ID), of arrays (keyed by widget ID)
// of ints; 1 if the widget is minimized. 0 if not.
'version' => 3,
'label' => 'New Dashlet element',
'name' => 'New Dashlet element',
- 'url' => 'civicrm/report/list&compid=99&reset=1&snippet=5',
- 'fullscreen_url' => 'civicrm/report/list&compid=99&reset=1&snippet=5&context=dashletFullscreen',
+ 'url' => 'civicrm/report/list&compid=99&reset=1',
+ 'fullscreen_url' => 'civicrm/report/list&compid=99&reset=1&context=dashletFullscreen',
);
$dashresult = $this->callAPISuccess('dashboard', 'create', $dashParams);
$contact = $this->callAPISuccess('contact', 'create', array(
$params = array(
'label' => 'New Dashlet element',
'name' => 'New Dashlet element',
- 'url' => 'civicrm/report/list&reset=1&compid=99&snippet=5',
- 'fullscreen_url' => 'civicrm/report/list&compid=99&reset=1&snippet=5&context=dashletFullscreen',
+ 'url' => 'civicrm/report/list&reset=1&compid=99',
+ 'fullscreen_url' => 'civicrm/report/list&compid=99&reset=1&context=dashletFullscreen',
);
$dashboard = $this->callAPISuccess('dashboard', 'create', $params);
$this->assertTrue(is_numeric($dashboard['id']), "In line " . __LINE__);
<comment>Is Minimized?</comment>
<default>0</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>is_fullscreen</name>
<comment>Is Fullscreen?</comment>
<default>1</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>is_active</name>
<type>longtext</type>
<comment>dashlet content</comment>
<add>3.3</add>
+ <drop>4.7</drop>
</field>
<field>
<name>created_date</name>
<title>Dashlet Created On</title>
<comment>When was content populated</comment>
<add>3.3</add>
+ <drop>4.7</drop>
</field>
</table>
<comment>column no for this dashlet</comment>
<default>0</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>is_minimized</name>
<comment>Is Minimized?</comment>
<default>0</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>fullscreen_url</name>
<comment>Is Fullscreen?</comment>
<default>1</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>is_active</name>
<comment>Ordering of the dashlets.</comment>
<default>0</default>
<add>3.1</add>
+ <drop>4.7</drop>
</field>
<field>
<name>created_date</name>
-- activity and case dashlets
INSERT INTO `civicrm_dashboard`
- ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `column_no`, `is_minimized`, `is_active`, `weight`, `fullscreen_url`, `is_fullscreen`, `is_reserved`)
+ ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `is_active`, `fullscreen_url`, `is_reserved`)
VALUES
- ( @domainID, 'blog', '{ts escape="sql"}CiviCRM News{/ts}', 'civicrm/dashlet/blog?reset=1&snippet=5', 'access CiviCRM', NULL, 0, 0, 1, 0, 'civicrm/dashlet/blog?reset=1&snippet=5&context=dashletFullscreen', 1, 1),
- ( @domainID, 'getting-started', '{ts escape="sql"}CiviCRM Resources{/ts}', 'civicrm/dashlet/getting-started?reset=1&snippet=5', 'access CiviCRM', NULL, 0, 0, 1, 0, 'civicrm/dashlet/getting-started?reset=1&snippet=5&context=dashletFullscreen', 1, 1),
+ ( @domainID, 'blog', '{ts escape="sql"}CiviCRM News{/ts}', 'civicrm/dashlet/blog?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/blog?reset=1&context=dashletFullscreen', 1),
+ ( @domainID, 'getting-started', '{ts escape="sql"}CiviCRM Resources{/ts}', 'civicrm/dashlet/getting-started?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/getting-started?reset=1&context=dashletFullscreen', 1),
- ( @domainID, 'activity', '{ts escape="sql"}Activities{/ts}', 'civicrm/dashlet/activity?reset=1&snippet=5', 'access CiviCRM', NULL, 0, 0, 1, 1, 'civicrm/dashlet/activity?reset=1&snippet=5&context=dashletFullscreen', 1, 1),
- ( @domainID, 'myCases', '{ts escape="sql"}My Cases{/ts}', 'civicrm/dashlet/myCases?reset=1&snippet=5', 'access my cases and activities', NULL , 0, 0, 1, 2, 'civicrm/dashlet/myCases?reset=1&snippet=5&context=dashletFullscreen', 1, 1),
- ( @domainID, 'allCases', '{ts escape="sql"}All Cases{/ts}', 'civicrm/dashlet/allCases?reset=1&snippet=5', 'access all cases and activities', NULL , 0, 0, 1, 3, 'civicrm/dashlet/allCases?reset=1&snippet=5&context=dashletFullscreen', 1, 1),
- ( @domainID, 'casedashboard', '{ts escape="sql"}Case Dashboard Dashlet{/ts}', 'civicrm/dashlet/casedashboard?reset=1&snippet=5', 'access my cases and activities,access all cases and activities', 'OR' , 0, 0, 1, 4, 'civicrm/dashlet/casedashboard?reset=1&snippet=5&context=dashletFullscreen', 1, 1);
+ ( @domainID, 'activity', '{ts escape="sql"}Activities{/ts}', 'civicrm/dashlet/activity?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/activity?reset=1&context=dashletFullscreen', 1),
+ ( @domainID, 'myCases', '{ts escape="sql"}My Cases{/ts}', 'civicrm/dashlet/myCases?reset=1', 'access my cases and activities', NULL, 1, 'civicrm/dashlet/myCases?reset=1&context=dashletFullscreen', 1),
+ ( @domainID, 'allCases', '{ts escape="sql"}All Cases{/ts}', 'civicrm/dashlet/allCases?reset=1', 'access all cases and activities', NULL, 1, 'civicrm/dashlet/allCases?reset=1&context=dashletFullscreen', 1),
+ ( @domainID, 'casedashboard', '{ts escape="sql"}Case Dashboard Dashlet{/ts}', 'civicrm/dashlet/casedashboard?reset=1', 'access my cases and activities,access all cases and activities', 'OR', 1, 'civicrm/dashlet/casedashboard?reset=1&context=dashletFullscreen', 1);
-- event badge
INSERT INTO civicrm_print_label (title, name, description, label_format_name, label_type_id, is_default, is_reserved, is_active, data)
-- Add sample dashlets
INSERT INTO `civicrm_dashboard`
- ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `column_no`, `is_minimized`, `is_active`, `weight`, `is_fullscreen`, `fullscreen_url`)
+ ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `is_active`, `fullscreen_url`)
VALUES
- ( @domain_id, 'report/7', '{ts escape="sql"}Donor Summary{/ts}' , 'civicrm/report/instance/7?reset=1§ion=1&snippet=5&charts=barChart', 'access CiviContribute', 'AND', 0, 0,'1', 4, '1', 'civicrm/report/instance/7?reset=1§ion=1&snippet=5&charts=barChart&context=dashletFullscreen'),
- ( @domain_id, 'report/14', '{ts escape="sql"}Top Donors{/ts}' , 'civicrm/report/instance/14?reset=1§ion=2&snippet=5', 'access CiviContribute', 'AND', 0, 0,'1', 5, '1', 'civicrm/report/instance/14?reset=1§ion=2&snippet=5&context=dashletFullscreen'),
- ( @domain_id, 'report/27', '{ts escape="sql"}Event Income Summary{/ts}', 'civicrm/report/instance/27?reset=1§ion=1&snippet=5&charts=pieChart', 'access CiviEvent' , 'AND', 0, 0,'1', 6, '1', 'civicrm/report/instance/27?reset=1§ion=1&snippet=5&charts=pieChart&context=dashletFullscreen'),
- ( @domain_id, 'report/22', '{ts escape="sql"}Membership Summary{/ts}' , 'civicrm/report/instance/22?reset=1§ion=2&snippet=5', 'access CiviMember' , 'AND', 0, 0,'1', 7, '1', 'civicrm/report/instance/22?reset=1§ion=2&snippet=5&context=dashletFullscreen');
+ ( @domain_id, 'report/7', '{ts escape="sql"}Donor Summary{/ts}', 'civicrm/report/instance/7?reset=1§ion=1&charts=barChart', 'access CiviContribute', 'AND', '1', 'civicrm/report/instance/7?reset=1§ion=1&charts=barChart&context=dashletFullscreen'),
+ ( @domain_id, 'report/14', '{ts escape="sql"}Top Donors{/ts}', 'civicrm/report/instance/14?reset=1§ion=2', 'access CiviContribute', 'AND', '1', 'civicrm/report/instance/14?reset=1§ion=2&context=dashletFullscreen'),
+ ( @domain_id, 'report/27', '{ts escape="sql"}Event Income Summary{/ts}', 'civicrm/report/instance/27?reset=1§ion=1&charts=pieChart', 'access CiviEvent' , 'AND', '1', 'civicrm/report/instance/27?reset=1§ion=1&charts=pieChart&context=dashletFullscreen'),
+ ( @domain_id, 'report/22', '{ts escape="sql"}Membership Summary{/ts}', 'civicrm/report/instance/22?reset=1§ion=2', 'access CiviMember' , 'AND', '1', 'civicrm/report/instance/22?reset=1§ion=2&context=dashletFullscreen');
-- INSERT sample data for membership