Пример #1
0
            $role->setValue('rol_name', $roleName);
            $role->setValue('rol_max_members', $date->getValue('dat_max_members'));
            $role->save();
        }
    }
    // check if flag is set that current user wants to participate as leader to the date
    if (isset($_POST['date_current_user_assigned']) && $_POST['date_current_user_assigned'] == 1 && $gCurrentUser->isLeaderOfRole($date->getValue('dat_rol_id')) == false) {
        // user wants to participate -> add him to date
        $member = new TableMembers($gDb);
        $member->startMembership($role->getValue('rol_id'), $gCurrentUser->getValue('usr_id'), 1);
    } elseif (isset($_POST['date_current_user_assigned']) == false && $gCurrentUser->isMemberOfRole($date->getValue('dat_rol_id')) == true) {
        // user does't want to participate as leader -> remove his participation as leader from the event,
        // dont remove the participation itself!
        $member = new TableMembers($gDb);
        $member->readDataByColumns(array('mem_rol_id' => $role->getValue('rol_id'), 'mem_usr_id' => $gCurrentUser->getValue('usr_id')));
        $member->setValue('mem_leader', 0);
        $member->save();
    }
    unset($_SESSION['dates_request']);
    $gNavigation->deleteLastUrl();
    header('Location: ' . $gNavigation->getUrl());
    exit;
} elseif ($getMode == 2) {
    // Termin loeschen, wenn dieser zur aktuellen Orga gehoert
    if ($date->getValue('cat_org_id') == $gCurrentOrganization->getValue('org_id')) {
        // member bzw. Teilnahme/Rolle löschen
        $date->delete();
        // Loeschen erfolgreich -> Rueckgabe fuer XMLHttpRequest
        echo 'done';
    }
} elseif ($getMode == 3) {
Пример #2
0
 /**
  * Create a new membership to a role for the current user. If the date range contains
  * a future or past membership of the same role then the two memberships will be merged.
  * In opposite to setRoleMembership this method can't be used to end a membership earlier!
  * @param int         $roleId    Id of the role for which the membership should be set.
  * @param string      $startDate Start date of the membership. Default will be @b DATE_NOW.
  * @param string      $endDate   End date of the membership. Default will be @b 31.12.9999
  * @param bool|string $leader    If set to @b 1 then the member will be leader of the role and
  *                               might get more rights for this role.
  * @return bool Return @b true if the membership was successfully added.
  */
 public function setRoleMembership($roleId, $startDate = DATE_NOW, $endDate = '9999-12-31', $leader = '')
 {
     $minStartDate = $startDate;
     $maxEndDate = $endDate;
     $member = new TableMembers($this->db);
     if ($startDate === '' || $endDate === '') {
         return false;
     }
     $this->db->startTransaction();
     // subtract 1 day from start date so that we find memberships that ends yesterday
     // these memberships can be continued with new date
     $oneDayDateInterval = new DateInterval('P1D');
     $startDate = DateTime::createFromFormat('Y-m-d', $startDate)->sub($oneDayDateInterval)->format('Y-m-d');
     // add 1 to max date because we subtract one day if a membership ends
     if ($endDate !== '9999-12-31') {
         $endDate = DateTime::createFromFormat('Y-m-d', $endDate)->add($oneDayDateInterval)->format('Y-m-d');
     }
     // search for membership with same role and user and overlapping dates
     $sql = 'SELECT *
               FROM ' . TBL_MEMBERS . '
              WHERE mem_rol_id = ' . $roleId . '
                AND mem_usr_id = ' . $this->getValue('usr_id') . '
                AND mem_begin <= \'' . $endDate . '\'
                AND mem_end   >= \'' . $startDate . '\'
           ORDER BY mem_begin ASC';
     $membershipStatement = $this->db->query($sql);
     if ($membershipStatement->rowCount() === 1) {
         // one record found than update this record
         $row = $membershipStatement->fetch();
         $member->setArray($row);
         // save new start date if an earlier date exists
         if (strcmp($minStartDate, $member->getValue('mem_begin', 'Y-m-d')) > 0) {
             $minStartDate = $member->getValue('mem_begin', 'Y-m-d');
         }
         // save new end date if an later date exists
         // but only if end date is greater than the begin date otherwise the membership should be deleted
         if (strcmp($member->getValue('mem_end', 'Y-m-d'), $maxEndDate) > 0 && strcmp($member->getValue('mem_begin', 'Y-m-d'), $maxEndDate) < 0) {
             $maxEndDate = $member->getValue('mem_end', 'Y-m-d');
         }
     } elseif ($membershipStatement->rowCount() > 1) {
         // several records found then read min and max date and delete all records
         while ($row = $membershipStatement->fetch()) {
             $member->clear();
             $member->setArray($row);
             // save new start date if an earlier date exists
             if (strcmp($minStartDate, $member->getValue('mem_begin', 'Y-m-d')) > 0) {
                 $minStartDate = $member->getValue('mem_begin', 'Y-m-d');
             }
             // save new end date if an later date exists
             if (strcmp($member->getValue('mem_end', 'Y-m-d'), $maxEndDate) > 0) {
                 $maxEndDate = $member->getValue('mem_end', 'Y-m-d');
             }
             // delete existing entry because a new overlapping entry will be created
             $member->delete();
         }
         $member->clear();
     }
     if (strcmp($minStartDate, $maxEndDate) > 0) {
         // if start date is greater than end date than delete membership
         if ($member->getValue('mem_id') > 0) {
             $member->delete();
         }
         $returnStatus = true;
     } else {
         // save membership to database
         $member->setValue('mem_rol_id', $roleId);
         $member->setValue('mem_usr_id', $this->getValue('usr_id'));
         $member->setValue('mem_begin', $minStartDate);
         $member->setValue('mem_end', $maxEndDate);
         if ($leader !== '') {
             $member->setValue('mem_leader', $leader);
         }
         $returnStatus = $member->save();
     }
     $this->db->endTransaction();
     $this->renewRoleData();
     return $returnStatus;
 }