*/ declare(strict_types = 1); /** * Manages vocabulary groups. */ final class NodaGroup { private MDMysqli $_mysqli_noda; /** * Lists all active groups. * * @param integer $limit Limit. * @param integer $offset Offset. * * @return array */ public function list(int $limit = 50, int $offset = 0):array { $output = []; $result = $this->_mysqli_noda->query_by_stmt("SELECT `group_id`, `group_name` FROM `group` ORDER BY `group_id` DESC LIMIT ? OFFSET ?", "ii", $limit, $offset); while ($cur = $result->fetch_row()) { $output[] = [ 'id' => (int)$cur[0], 'name' => $cur[1], ]; } $result->close(); return $output; } /** * Adds a group. * * @param string $name Name of the group. * @param string $comment Comment / note on the group. * * @return integer */ public function insert(string $name, string $comment = ''):int { $insertStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `group` (`group_name`, `comment`) VALUES (?, ?)"); $insertStmt->bind_param("ss", $name, $comment); $insertStmt->execute(); $output = $insertStmt->get_insert_id(); $insertStmt->close(); return $output; } /** * Adds actors to a nodac group. * * @param integer $group_id Group ID. * @param array $input_ids List of entries to link to the group. * * @return void */ public function linkActors(int $group_id, array $input_ids):void { if (empty($input_ids = MD_STD_IN::sanitize_id_array($input_ids))) return; // Check which entries actually exist $idsToLink = []; $result = $this->_mysqli_noda->do_read_query("SELECT `persinst_id` FROM `persinst` WHERE `persinst_id` IN (" . $this->_mysqli_noda->escape_in($input_ids) . ")"); while ($cur = $result->fetch_row()) { $idsToLink[] = (int)$cur[0]; } $result->close(); $this->_mysqli_noda->autocommit(false); $linkStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `v_group_persinst` (`group_id`, `persinst_id`) VALUES (?, ?)"); foreach ($idsToLink as $id) { $linkStmt->bind_param("ii", $group_id, $id); $linkStmt->execute(); } $linkStmt->close(); $this->_mysqli_noda->commit(); $this->_mysqli_noda->autocommit(true); } /** * Adds places to a nodac group. * * @param integer $group_id Group ID. * @param array $input_ids List of entries to link to the group. * * @return void */ public function linkPlaces(int $group_id, array $input_ids):void { if (empty($input_ids = MD_STD_IN::sanitize_id_array($input_ids))) return; // Check which entries actually exist $idsToLink = []; $result = $this->_mysqli_noda->do_read_query("SELECT `ort_id` FROM `orte` WHERE `ort_id` IN (" . $this->_mysqli_noda->escape_in($input_ids) . ")"); while ($cur = $result->fetch_row()) { $idsToLink[] = (int)$cur[0]; } $result->close(); $this->_mysqli_noda->autocommit(false); $linkStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `v_group_orte` (`group_id`, `ort_id`) VALUES (?, ?)"); foreach ($idsToLink as $id) { $linkStmt->bind_param("ii", $group_id, $id); $linkStmt->execute(); } $linkStmt->close(); $this->_mysqli_noda->commit(); $this->_mysqli_noda->autocommit(true); } /** * Adds times to a nodac group. * * @param integer $group_id Group ID. * @param array $input_ids List of entries to link to the group. * * @return void */ public function linkTimes(int $group_id, array $input_ids):void { if (empty($input_ids = MD_STD_IN::sanitize_id_array($input_ids))) return; // Check which entries actually exist $idsToLink = []; $result = $this->_mysqli_noda->do_read_query("SELECT `zeit_id` FROM `zeiten` WHERE `zeit_id` IN (" . $this->_mysqli_noda->escape_in($input_ids) . ")"); while ($cur = $result->fetch_row()) { $idsToLink[] = (int)$cur[0]; } $result->close(); $this->_mysqli_noda->autocommit(false); $linkStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `v_group_zeiten` (`group_id`, `zeit_id`) VALUES (?, ?)"); foreach ($idsToLink as $id) { $linkStmt->bind_param("ii", $group_id, $id); $linkStmt->execute(); } $linkStmt->close(); $this->_mysqli_noda->commit(); $this->_mysqli_noda->autocommit(true); } /** * Adds tags to a nodac group. * * @param integer $group_id Group ID. * @param array $input_ids List of entries to link to the group. * * @return void */ public function linkTags(int $group_id, array $input_ids):void { if (empty($input_ids = MD_STD_IN::sanitize_id_array($input_ids))) return; // Check which entries actually exist $idsToLink = []; $result = $this->_mysqli_noda->do_read_query("SELECT `tag_id` FROM `tag` WHERE `tag_id` IN (" . $this->_mysqli_noda->escape_in($input_ids) . ")"); while ($cur = $result->fetch_row()) { $idsToLink[] = (int)$cur[0]; } $result->close(); $this->_mysqli_noda->autocommit(false); $linkStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `v_group_tag` (`group_id`, `tag_id`) VALUES (?, ?)"); foreach ($idsToLink as $id) { $linkStmt->bind_param("ii", $group_id, $id); $linkStmt->execute(); } $linkStmt->close(); $this->_mysqli_noda->commit(); $this->_mysqli_noda->autocommit(true); } /** * Constructor. * * @param MDMysqli $mysqli_noda DB connection. * * @return void */ public function __construct(MDMysqli $mysqli_noda) { $this->_mysqli_noda = $mysqli_noda; } }