%s'; # $selectedFormats = array(' selected="selected"'); # $selectFormats = array( # ' ', # '' # ); $lucatLinkFormats = array( '[LUCAT]', '[LUCAT]', ); # $commentFormat = array('
%s'); # $listItemFormat = '
  • %s %s   %s%s
  • '; # $listItemFormat2 = '
  • %s
  • '; # $exportItemFormat = "%s\t%s\t%s\n"; { // Spara kategorierna if ($_POST['save'] && $organisations[$luNumber] && !$_SESSION['iam']['readOnly']) { foreach ((array) $_POST['roles'] as $uid => $value) { $role = $_POST['ok'][$uid] ? intval($value) : 'NULL'; $ab = (bool) $_POST['ab'][$uid]; $values[] = sprintf('("%s", "%s", %s, %d)', $uid, $luNumber, $role, $ab); $logValues[] = sprintf('%s: %s%s', $uid, $role, $ab ? ' (AB)': ''); } $result = db_query(sprintf('INSERT roles (uid, luNumber, roleid, ab) VALUES %s ON DUPLICATE KEY UPDATE roleid = VALUES(roleid), ab = VALUES(ab)', implode(', ', $values))); file_put_contents('log.txt', sprintf("%s\t%s\t%s\t%s\n", date('Y-m-d H:i:s'), $casInloggad, $luNumber, implode('; ', $logValues)), FILE_APPEND); } $result = db_query(sprintf(' SELECT IF( o2.luNumber IS NULL, IF(o.name != "", o.name, d.name), IF(o2.name != "", o2.name, d2.name) ) name FROM departments d INNER JOIN organise o USING (luNumber) LEFT JOIN organise o2 ON o.new = o2.luNumber AND o2.action IN ("stay", "move", "new") LEFT JOIN departments d2 ON o2.luNumber = d2.luNumber WHERE d.luNumber = "%s" AND (o.action IN ("stay", "move") OR o2.luNumber IS NOT NULL) ', $luNumber)); list($newOrganisation) = mysql_fetch_row($result); $result = db_query('SELECT roleid, role, section FROM rolelist ORDER BY section, role'); while ($row = mysql_fetch_assoc($result)) { $roleIds[$row['role']] = $row['roleid']; $options[$row['section']] .= sprintf('', $row['roleid'], $row['role']); } foreach ($options as $section => $optionGroup) { $optionGroups .= sprintf('%s', $section ? ' ' : '', $optionGroup); } $selectAll = sprintf('', $optionGroups); // DISABLED // Hämta från LDAP alla personer på organisationen $persons = ldapPersons($ldap, sprintf('(&(objectClass=luEduRoleIndividual)(departmentNumber=%s)(|(luEduRoleName=huvudanställning)(luEduRoleName=sidoanställning)))', $luNumber), 'lueduroleuid'); // $persons = ldapPersons($ldap, sprintf('(&(eduPersonPrimaryOrgUnitDN=departmentNumber=%s,*)(inetUserStatus=active))', $luNumber), 'uid') + ldapPersons($ldap, sprintf('(&(objectClass=luEduRoleIndividual)(departmentNumber=%s)(luEduRoleName=sidoanställning))', $luNumber), 'lueduroleuid'); $activePersons = ldapPersons($ldap, sprintf('(&(eduPersonOrgUnitDN=departmentNumber=%s,*)(inetUserStatus=active))', $luNumber), 'uid'); $persons = array_intersect_key($persons, $activePersons); if ($uids = array_keys($persons)) { // Hämta förslagen på verksamhetsroller foreach (array_filter(explode("\n", file_get_contents('suggestions.txt'))) as $row) { list(, $title, , $role) = explode("\t", $row); if ($roleIds[$role]) { #$suggestions[$title] = $roleIds[$role]; $suggestions[mb_strtolower($title)] = $roleIds[$role]; } } // Hämta verksamhetsrollerna för personerna $result = db_query(sprintf(' SELECT uid, category, roleid IS NOT NULL ok, roleid, ab, r.locked FROM categories LEFT JOIN roles r USING (uid, luNumber) WHERE uid RLIKE "^(%1$s)$" AND luNumber = "%2$s" UNION SELECT p.uid, 100, r.roleid IS NOT NULL ok, r.roleid, ab, locked FROM primula p LEFT JOIN roles r ON p.uid = r.uid AND luNumber = "%2$s" WHERE p.uid RLIKE "^(%1$s)$" ORDER BY category ', implode('|', $uids), $luNumber)); while ($row = mysql_fetch_assoc($result)) { $persons[$row['uid']]['category'] = $row['category']; $persons[$row['uid']]['ok'] = $row['ok']; $persons[$row['uid']]['roleid'] = $row['roleid']; $persons[$row['uid']]['ab'] = $row['ab']; $persons[$row['uid']]['locked'] = !!$row['locked']; } } if ($persons) { $tableHeading = 'Namn och funktionstitelOKVerksamhetsrollTelefonMobilRumAb.KategoriID'; // Gå igenom personerna och skapa listor foreach ($persons as $uid => $person) { $listTypes = array( 'Verksamhetsroller ej ännu valda – behandla dessa!', 'Verksamhetsroller valda – klart!', 'Inga verksamhetsroller – klart!', 'Inga verksamhetsroller pga. saknad verksamhetsorganisation.', 'Inga verksamhetsroller pga. kategoriseringen.', 'Redan överförda till nya Lucat', ); if (!in_array(intval($person['category']), array(0, 1, 4, 5, 10, 20, 30))) { if ($newOrganisation) { # $listType = $person['ok'] ? $person['roleid'] ? 1 : 2 : 0; $listType = $person['ok'] ? $person['roleid'] ? $person['locked'] ? 5 : 1 : 2 : 0; # $checkboxOK = sprintf('', $uid, $person['ok'] ? 'checked' : ''); $checkboxOK = sprintf('', $uid, $person['ok'] ? 'checked' : '', $person['locked'] ? 'disabled' : ''); // DISABLED # $select = preg_replace('/<(select)>/', sprintf('<$1 name="roles[%s]">', $uid), $selectAll); $select = preg_replace('/<(select)>/', sprintf($person['locked'] ? '<$1 disabled>' : '<$1 name="roles[%s]">', $uid), $selectAll); // DISABLED if ($person['ok'] || $suggestions[mb_strtolower($person['title'])]) { $select = preg_replace('/<(option value="' . ($person['ok'] ? $person['roleid'] : $suggestions[mb_strtolower($person['title'])]) . '")>/', '<$1 selected>', str_replace('', '', $select)); } # $checkboxAB = sprintf('', $uid, $person['ab'] ? 'checked' : ''); $checkboxAB = sprintf('', $uid, $person['ab'] ? 'checked' : '', $person['locked'] ? 'disabled' : ''); // DISABLED } else { $listType = 3; } } else { $listType = 4; unset($checkboxOK, $select, $checkboxAB); } $phone = cleanNumber($person['phone']); $mobile = cleanNumber($person['mobile']); if (in_array($listType, array(0, 1, 2, 5))) { if ($person['phone'] && !$phone) { $phone = sprintf('%s', $person['phone']); } if ($person['mobile'] && !$mobile) { $mobile = sprintf('%s', $person['mobile']); } } $tableRows[$listType][$person['name']] .= sprintf('%s (%s)%s%s%s%s%s%s%s%s%s', $person['name'], $person['title'], $checkboxOK, $select, $phone, $mobile, $person['room'], $checkboxAB, str_replace(array('---', 'Stipendiat: ', 'Grundläggande/avancerad', 'Universitetsanknuten: ', 'Övrigt: ', ' = ej överföring', ' = ej konto'), array('Okategoriserad', 'Stip. ', 'Grund./avanc.'), $categories[intval($person['category'])][1]), $uid, sprintf($lucatLinkFormats[$person['sidoanstallning']], $uid, $luNumber, urlencode(utf8_decode($organisations[$luNumber]))) ); if (in_array($listType, array(1, 5))) { $splitOrg[$uid] = $person['name']; } } } else { $form .= '

    Det finns inga personer.

    '; } ksort($tableRows); foreach ($tableRows as $listType => $tableRows2) { ksort($tableRows2); $tableRows3 .= sprintf('%s%s%s', $listTypes[$listType], $tableHeading, implode($tableRows2)); // ÄNDRA TILL $table ... (bara en tabell, så att det blir samma kolumnbredder } $form .= sprintf('%s
    ', $tableRows3); // Hämta organisationsinformation för splittrade organisationer foreach (array_filter(explode("\n", file_get_contents('persorg.txt'))) as $row) { list($luNumberOrg, $uid, $luNumberNew) = explode("\t", $row); if ($luNumberOrg == $luNumber) { $newLUnumbers[$uid] = $luNumberNew; } } // Information om verksamhetsorganisationen $orgInfoFormat = array('

    %s

    '); $newOrganisationTexts = array( 'I nya Lucat finns ännu inte någon utpekad verksamhetsorganisation för verksamhetsrollerna.
    Kontakta din fakultets kontaktperson!', 'I nya Lucat kommer verksamhetsrollerna att kopplas till verksamhetsorganisationen %s%s' ); $newOrganisationText = sprintf( $orgInfoFormat[!array_intersect(array_keys($tableRows), array(0, 1, 2, 3))], sprintf($newOrganisationTexts[(bool) $newOrganisation], $newOrganisation, $newLUnumbers ? ' m.fl. Se exakt vilka verksamhetsorganisationer för olika personer längst ned på sidan!' : '.' ) ); // Om splittrade organisationer if ($newLUnumbers) { // Hämta namn på splittrade organisationer $result = db_query(sprintf(' SELECT luNumber, IF(o.name != "", o.name, d.name) name FROM organise o LEFT JOIN departments d USING (luNumber) WHERE FIND_IN_SET(o.luNumber, "%s") ', implode(',', array_unique($newLUnumbers)) )); while ($row = mysql_fetch_assoc($result)) { $splitOrgName[$row['luNumber']] = $row['name']; } // Gå igenom personerna på splittrade organisationer foreach (array_keys($splitOrg) as $uid) { $orgName = $splitOrgName[$newLUnumbers[$uid]] ? $splitOrgName[$newLUnumbers[$uid]] : $newOrganisation; $splitOrgPersons[$orgName][$persons[$uid]['name'] . $uid] = $persons[$uid]['straightName']; } ksort($splitOrgPersons); foreach ($splitOrgPersons as $orgName => $personNames) { ksort($personNames); $splitOrgTexts .= sprintf('

    %s
    %s

    ', $orgName, implode(', ', $personNames)); } $form .= sprintf('

    I nya Lucat kommer verksamhetsrollerna att kopplas till följande verksamhetsorganisationer:

    %s
    ', $splitOrgTexts); } } // Skapa formulärknappar $buttons .= count($organisations) > 1 ? sprintf('   ') : ''; $buttons .= sprintf('   '); $buttons .= sprintf('   ', $luNumber); # $buttons .= sprintf('   '); $buttons .= sprintf('   '); $buttons .= $lists ? sprintf('   %s', $luNumber, $_POST['save'] ? '   Kategoriseringen sparad!' : '') : ''; $buttons .= !$_SESSION['iam']['readOnly'] ? sprintf('     OBS! Ändringarna behöver sparas.', $luNumber) : ''; // DISABLED x 2 // 2015-09-05 stänger av all redigering // $descriptionAllTexts .= '

    För närvarande är dessa applikationer stängda under tiden migreringen sker till nya Lucat. Personkategorisering och
    verksamhetsrollstilldelningen kommer återigen att öppna i mitten av september för att kunna ta hand om nyinlagda personer i Lucat.

    '; // $descriptionAllTexts .= '

    Det går enbart att tilldela verksamhetsroller till personer som inte redan har förts över till nya Lucat. Senaste överföring skedde den 29 september.
    Applikationerna för personkategorisering och verksamhetsrollstilldelning kommer att stänga kl. 15.00 den 13 oktober för gott.

    '; $descriptionAllTexts .= '

    Applikationerna för personkategorisering och verksamhetsrollstilldelning stängde kl. 15.00 den 13 oktober för gott.

    '; // Skriv ut formulär $content .= sprintf('

    Utskrift: %s

    %s

    %s%s

    %s

    %s%s
    ', date('Y-m-d \k\l. H.i'), $buttons, $instructionText, $descriptionAllTexts, $organisations[$luNumber], $newOrganisationText, $form, $luNumber); } elseif ($organisations) { // Skapa en lista över organisationerna foreach ($organisations as $number => $name) { $lists[$number > 0 ? 'Organisationer' : 'Översikt'] .= sprintf('
  • %s
  • ', $number, $name); } foreach ($lists as $header => $list) { $content .= sprintf('

    %s

    ', $header, $list); } } else { $content .= sprintf('

    Det finns inga organisationer.

    '); } // Koppla ifrån LDAP close_ldap($ldap); // Koppla ifrån databasen db_close(); // Exportera till Excel if (isset($_GET['export'])) { header('Content-Disposition: attachment; filename="lucat-kategorier.xls"'); header('Content-Type: text/tsv'); // header('Content-Type: application/excel'); echo utf8_decode(sprintf("%s\n\n%s\tEfternamn\tFörnamn\tIdentitet\tSidoanställning\tKommentar\n\n%s", $organisations[$luNumber], $luNumber > 0 ? 'Kategori' : 'Organisation', $export)); exit; } // HTML-sida $formatSida = ' %1$s

    %1$s

    %3$s

    Logga ut

    '; // jQuery-kod $jqueryOLD = ' $("input:text").css("margin-left", $(".selectSpan").width() + 4); $(".categoryDescriptionToggle").click(function() { $(this).parent().nextAll(".categoryDescription").first().toggle(); $(this).parent().nextAll(".instructionText").first().hide(); }); $(".instructionTextToggle").click(function() { $(this).parent().nextAll(".instructionText").first().toggle(); $(this).parent().nextAll(".categoryDescription").first().hide(); }); $(".boxText").click(function() { $(this).hide(); }); $(".boxText a").click(function(e) { e.stopPropagation(); }); '; $jquery = ' $(".instructionTextToggle").click(function() { $(this).parent().nextAll(".instructionText").first().toggle(); }); $(".boxText").click(function() { $(this).hide(); }); $("#simulate select").each(function() { $(this) .width(Math.max($(this).width(), $(this).parent().width() - $(this).prev().width() - 50)) .select2({ placeholder: "Skriv eller skrolla ..." }); }); '; // Skriv ut allt echo sprintf($formatSida, 'IAM – verksamhetsroller', $jquery, $content . $simulateForms); ?>