Example #1
0
 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);
 }