public static function updateResop(stdClass &$resop, $formContent) { global $DB; //$DB->set_debug(true); //add resources which are used in this instance, need to keep the keys $resourcesUsed = $DB->get_records_sql('SELECT DISTINCT rr.id, rr.name, rr.actid FROM {resop_resource_user} rru JOIN {resop_resource} rr ' . 'ON rru.resid=rr.id WHERE rru.actid=? ', array($resop->id)); //array of objects $resourcesKnown = $DB->get_records_sql_menu('SELECT DISTINCT id,name FROM {resop_resource} ' . ' WHERE actid=? ', array($resop->id)); //array with id as key and name as value $resneu = explode("\n", $formContent->resop_resources); array_walk($resneu, function (&$val) { $val = trim($val); }); $resneu = array_filter($resneu); //leere weg //construct list of resources which should be not deleted if existent $noDelete = implode("','", $resneu); $noDelete = "'" . $noDelete . "'"; //list of elements in ' ' $sql = array(); foreach ($resourcesUsed as $key => $value) { $noDelete .= ",'{$value->name}'"; //maybe double name - doesn't matter } $sql = "DELETE FROM {resop_resource} WHERE name NOT IN ({$noDelete}) AND actid={$resop->id} "; $DB->execute($sql); //construct array of new resources //need all entries of $resneu which are not in $resourcesKnown $resneu = array_diff($resneu, $resourcesKnown); ResopDB::insertResourcesFromArr($resneu, $resop); //handle edit of users //get the already used user-ids, we don't delete them $usedUids = array_keys($DB->get_records_sql_menu('SELECT DISTINCT uid, actid FROM {resop_resource_user} ' . ' WHERE actid=? ', array($resop->id))); $newUids = array_map(function ($v) { return (int) $v; }, $formContent->resop_users); $noDelete = array_merge($usedUids, $newUids); $noDelete = implode(',', $noDelete); //resop_resop_user: which users can be used in this instance (beziehungstabelle / relation table) $sql = "DELETE FROM {resop_resop_user} WHERE uid NOT IN ({$noDelete}) AND actid={$resop->id} "; $DB->execute($sql); $knownUids = array_keys(ResopDB::getUser($resop->id)); //var_dump($knownUids);echo "<br>"; $newUids = array_diff($newUids, $knownUids); ResopDB::insertUserFromArr($newUids, $resop); }