function update_slideshow($slideshowid, $name, $delay, $slides) { // validate slides if (empty($slides)) { error(_('Slide show must contain slides.')); return false; } // validate screens $screenids = zbx_objectValues($slides, 'screenid'); $screens = API::Screen()->get(array('screenids' => $screenids, 'output' => array('screenid'))); $screens = ZBX_toHash($screens, 'screenid'); foreach ($screenids as $screenid) { if (!isset($screens[$screenid])) { error(_('Incorrect screen provided for slide show.')); return false; } } // validate slide name $db_slideshow = DBfetch(DBselect('SELECT s.slideshowid' . ' FROM slideshows s' . ' WHERE s.name=' . zbx_dbstr($name) . ' AND s.slideshowid<>' . zbx_dbstr($slideshowid) . ' ' . andDbNode('s.slideshowid'))); if (!empty($db_slideshow)) { error(_s('Slide show "%s" already exists.', $name)); return false; } $db_slideshow = DBfetchArray(DBselect('SELECT * FROM slideshows WHERE slideshowid=' . zbx_dbstr($slideshowid))); $db_slideshow = $db_slideshow[0]; $changed = false; $slideshow = array('name' => $name, 'delay' => $delay); foreach ($slideshow as $key => $val) { if ($db_slideshow[$key] != $val) { $changed = true; break; } } if ($changed) { if (!($result = DBexecute('UPDATE slideshows SET name=' . zbx_dbstr($name) . ',delay=' . zbx_dbstr($delay) . ' WHERE slideshowid=' . zbx_dbstr($slideshowid)))) { return false; } } // get slides $db_slides = DBfetchArrayAssoc(DBselect('SELECT s.* FROM slides s WHERE s.slideshowid=' . zbx_dbstr($slideshowid)), 'slideid'); $slidesToDel = zbx_objectValues($db_slides, 'slideid'); $slidesToDel = zbx_toHash($slidesToDel); $step = 0; foreach ($slides as $slide) { $slide['delay'] = $slide['delay'] ? $slide['delay'] : 0; if (isset($db_slides[$slide['slideid']])) { // update slide if ($db_slides[$slide['slideid']]['delay'] != $slide['delay'] || $db_slides[$slide['slideid']]['step'] != $step) { $result = DBexecute('UPDATE slides SET step=' . zbx_dbstr($step) . ', delay=' . zbx_dbstr($slide['delay']) . ' WHERE slideid=' . zbx_dbstr($slide['slideid'])); } else { $result = true; } unset($slidesToDel[$slide['slideid']]); } else { $slideid = get_dbid('slides', 'slideid'); $result = DBexecute('INSERT INTO slides (slideid,slideshowid,screenid,step,delay)' . ' VALUES (' . zbx_dbstr($slideid) . ',' . zbx_dbstr($slideshowid) . ',' . zbx_dbstr($slide['screenid']) . ',' . zbx_dbstr($step) . ',' . zbx_dbstr($slide['delay']) . ')'); } $step++; if (!$result) { return false; } } // delete unnecessary slides if (!empty($slidesToDel)) { DBexecute('DELETE FROM slides WHERE slideid IN(' . implode(',', $slidesToDel) . ')'); } return true; }
function update_slideshow($slideshowid, $name, $delay, $slides) { if (empty($slides)) { error(S_SLIDESHOW_MUST_CONTAIN_SLIDES); return false; } $screenids = zbx_objectValues($slides, 'screenid'); $screens = CScreen::get(array('screenids' => $screenids, 'output' => API_OUTPUT_SHORTEN)); $screens = ZBX_toHash($screens, 'screenid'); foreach ($screenids as $screenid) { if (!isset($screens[$screenid])) { return false; } } foreach ($slides as $slide) { if (!isset($slide['delay'])) { $slide['delay'] = 0; } } if (!($result = DBexecute('UPDATE slideshows SET name=' . zbx_dbstr($name) . ',delay=' . $delay . ' WHERE slideshowid=' . $slideshowid))) { return false; } DBexecute('DELETE FROM slides where slideshowid=' . $slideshowid); $i = 0; foreach ($slides as $slide) { $slideid = get_dbid('slides', 'slideid'); if (!isset($slide['delay'])) { $slide['delay'] = $delay; } $result = DBexecute('INSERT INTO slides (slideid,slideshowid,screenid,step,delay) ' . ' VALUES (' . $slideid . ',' . $slideshowid . ',' . $slide['screenid'] . ',' . $i++ . ',' . $slide['delay'] . ')'); if (!$result) { return false; } } return true; }