abstract class CDashboardGeneral extends CApiService {
protected const WIDGET_FIELD_TYPE_COLUMNS_FK = [
ZBX_WIDGET_FIELD_TYPE_GROUP => 'value_groupid',
ZBX_WIDGET_FIELD_TYPE_HOST => 'value_hostid',
ZBX_WIDGET_FIELD_TYPE_ITEM => 'value_itemid',
ZBX_WIDGET_FIELD_TYPE_ITEM_PROTOTYPE => 'value_itemid',
ZBX_WIDGET_FIELD_TYPE_GRAPH => 'value_graphid',
ZBX_WIDGET_FIELD_TYPE_GRAPH_PROTOTYPE => 'value_graphid',
ZBX_WIDGET_FIELD_TYPE_MAP => 'value_sysmapid',
ZBX_WIDGET_FIELD_TYPE_SERVICE => 'value_serviceid',
ZBX_WIDGET_FIELD_TYPE_SLA => 'value_slaid',
ZBX_WIDGET_FIELD_TYPE_USER => 'value_userid',
ZBX_WIDGET_FIELD_TYPE_ACTION => 'value_actionid',
ZBX_WIDGET_FIELD_TYPE_MEDIA_TYPE => 'value_mediatypeid'
protected const WIDGET_FIELD_TYPE_COLUMNS = [
ZBX_WIDGET_FIELD_TYPE_INT32 => 'value_int',
ZBX_WIDGET_FIELD_TYPE_STR => 'value_str'
] + self::WIDGET_FIELD_TYPE_COLUMNS_FK;
protected $tableName = 'dashboard';
protected $tableAlias = 'd';
protected $sortColumns = ['dashboardid', 'name'];
abstract public function get(array $options = []);
public function delete(array $dashboardids): array {
$api_input_rules = ['type' => API_IDS, 'flags' => API_NOT_EMPTY, 'uniq' => true];
if (!CApiInputValidator::validate($api_input_rules, $dashboardids, '/', $error)) {
self::exception(ZBX_API_ERROR_PARAMETERS, $error);
$db_dashboards = $this->get([
'output' => ['dashboardid', 'name'],
'dashboardids' => $dashboardids,
if (count($db_dashboards) != count($dashboardids)) {
self::exception(ZBX_API_ERROR_PERMISSIONS, _('No permissions to referred object or it does not exist!'));
if ($this instanceof CDashboard) {
$db_reports = DB::select('report', [
'output' => ['name', 'dashboardid'],
'filter' => ['dashboardid' => $dashboardids],
self::exception(ZBX_API_ERROR_PARAMETERS, _s('Dashboard "%1$s" is used in report "%2$s".',
$db_dashboards[$db_reports[0]['dashboardid']]['name'], $db_reports[0]['name']