'Em.', 3 => 'Fo.', 6 => 'Ti.', 5 => 'St.', 4 => 'UA'); $subCats = array(40 => 'Sga', 41 => 'Sdk', 42 => 'Spd', 50 => 'Uaf', 51 => 'Ubk', 52 => 'Uex', 53 => 'Ugf', 54 => 'Uhl', 55 => 'Uko', 56 => 'Ulf', 7 => 'Urs', 57 => 'Usp', 58 => 'Ust', 59 => 'Uuu', 60 => 'Uvä'); $otherCats = array(1 => 'Be.', 10 => 'TA', 30 => 'FK'); foreach ($cats as $key => $cat) { $categories[$key][0] = ucfirst(str_replace('Saknar underkategorier – ', '', $categories[$key][0])); $catsHead .= sprintf('%s', $categories[$key][0], $cat); $catsExplainations .= sprintf('
  • %s   –   %s
  • ', $cat, $categories[$key][0]); } foreach ($subCats as $key => $cat) { $subCatsHead .= sprintf('%s', $categories[$key][0], $cat); $subCatsExplainations .= sprintf('
  • %s   –   %s
  • ', $cat, $categories[$key][0]); } foreach ($otherCats as $key => $cat) { $otherCatsHead .= sprintf('%s', $categories[$key][0], $cat); $otherCatsExplainations .= sprintf('
  • %s   –   %s
  • ', $cat, $categories[$key][0]); } // Rubrikradsformat $tableHeadFormat = sprintf('%%sI Primula?KategoriseradeKategorierUnderkategorierÖvrigtOkategoriserade%%sjanejantalproc.%sokat.utred.under.proc.', count($cats), count($subCats), count($otherCats), $catsHead . $subCatsHead . $otherCatsHead); // Sök fram vald organisation, om ingen så skriv "Hela universitetet" if ($org) { $department = mysql_fetch_assoc(db_query(sprintf('SELECT luNumber, name, path FROM departments WHERE luNumber = "%s"', $org))); } else { $department['name'] = 'Hela universitetet'; } // Hämta statistik för vald organisation $departmentRow = examine($department['luNumber'], $department['name'], $cats + $subCats + $otherCats); // Skapa tillbaka-länk preg_match('/[0-9]+,([0-9]+)/', $department['path'], $match); $upLevel = $org ? sprintf('
    [upp en nivå]
    ', $match[1]) : ''; // Hämta alla underorganisationer till vald organisation $where = $_GET['org'] ? sprintf('FIND_IN_SET("%s", d1.path) = 2', $org) : 'd1.luNumber = d1.path'; $result = db_query(sprintf(' SELECT d1.luNumber, d1.name, d2.luNumber children FROM departments d1 LEFT JOIN departments d2 ON FIND_IN_SET(d1.luNumber, d2.path) = 2 WHERE %s AND NOT d1.isEmpty GROUP BY d1.luNumber ORDER BY name ', $where)); // Gå igenom underorganisationer och hämta statistik för dem while ($row = mysql_fetch_assoc($result)) { $subDepartmentRows .= examine($row['luNumber'], sprintf($row['children'] ? '%2$s' : '%2$s', $row['luNumber'], $row['name']), $cats + $subCats + $otherCats); } // Skapa förklaringar $explainations .= sprintf('

    Kategorier

    Underkategorier

    Övrigt

    Okategoriserade

    ', $catsExplainations, $subCatsExplainations, $otherCatsExplainations, '
  • okat. – Okategoriserade
  • utred. – Behöver utredas
  • under. – Saknar underkategorier
  • ' ); // Skapa tabellen $content .= sprintf('

    %s

    [Visa underkategorier]   [Nytt: Visa saknade personers namn]   [Visa verksamhetsroller]   [Logga ut]

    %s%s%s%s

    %s

    %s', $department['name'], $org, sprintf($tableHeadFormat, $upLevel, 'Organisation'), $departmentRow, sprintf($tableHeadFormat, $department['name'], 'Underorganisationer'), $subDepartmentRows, 'Antalet är inläggningar i LUCAT, så en person som finns på flera olika organisationer i LUCAT räknas alltså flera gånger och därför kan det bli en högre totalsumma i översikten än antalet anställda på LU. De första procenttalen avser LUCAT-inläggningar som har kategoriserats, medan de röda procenttalen i sista kolumnen är det kategoriseringsarbete som återstår att göra. Klicka på de blå organisationsnamnen för att komma nedåt i organisationshierarkin, dvs. för att se fakulteter, sektioner, institutioner, avdelningar osv. Informationen från Primula och LUCAT uppdateras varje natt i den här översikten.', $explainations ); // Observera att personer som är inlagda i LUCAT flera gånger (dvs. vid olika organisationer) räknas flera gånger. Det är därför antalet i sammanställningen blir större antalet personer. // Hämta statistik för en organisation function examine($org, $name, $cats) { // Hämta antalet i olika kategorierer för organisationen med allt under i hela hierarkin (om ingen vald så hämta allt) $where = $org ? sprintf('FIND_IN_SET("%s", path)', $org) : '1'; $result = db_query(sprintf(' SELECT category, COUNT(*) number FROM departments INNER JOIN categories USING (luNumber) WHERE %s AND onlyLucat AND category GROUP BY category ', $where)); while ($row = mysql_fetch_assoc($result)) { if ($row['category'] == 20) { $investigate = $row['number']; } elseif (in_array($row['category'], array(4, 5))) { $noSubCats += $row['number']; } else { $categories[$row['category']] = $row['number']; if ($row['category'] >= 40 && $row['category'] < 50) { $categories[5] += $row['number']; } elseif ($row['category'] == 7 || $row['category'] >= 50 && $row['category'] < 70) { $categories[4] += $row['number']; } } } // Gå igenom kategorierna och skapa en tabellcellerna foreach (array_keys($cats) as $cat) { $categoriesRow .= $categories[$cat] ? sprintf('%d st', $categories[$cat]) : ''; } // Hämta summan av alla i Primula och alla utanför Primula för organisationen med allt under i hela hierarkin (om ingen vald så hämta allt) $result = db_query(sprintf(' SELECT SUM(nbrPrimula) nbrPrimula, SUM(nbrLucat) nbrLucat FROM departments WHERE %s ', $where)); $row = mysql_fetch_assoc($result); // Antal kategoriserade: absolut antal $sum = intval(array_sum((array) $categories)) - $categories[4] - $categories[5]; // Uppdatera antalet utanför Primula om antalet kategoriserade och under utredning blir för stort $row['nbrLucat'] = max($row['nbrLucat'], $sum + $noSubCats + $investigate); // Antal kategoriserade: relativt utanför Primula $frac = $sum / $row['nbrLucat']; // Skapa en tabellrad return sprintf('%s%d st%d st%s%s%s%s%s%s%s', $name, $row['nbrPrimula'], $row['nbrLucat'], $row['nbrLucat'] > 0 ? $sum . ' st' : '', $row['nbrLucat'] > 0 ? round($frac * 100) . ' %' : '', $categoriesRow, ($uncat = $row['nbrLucat'] - $sum - $noSubCats - $investigate) ? $uncat . ' st' : '', $investigate ? $investigate . ' st' : '', $noSubCats ? $noSubCats . ' st' : '', $noSubCats || $investigate || $investigate || $uncat ? round(($row['nbrLucat'] - $sum) / $row['nbrLucat'] * 100) . ' %' : '', $frac == 1 ? 'green' : '' ); } // Koppla ifrån databasen db_close(); // HTML-sida $formatSida = ' %1$s

    %1$s

    %3$s '; // jQuery-kod $jquery = ' // $("[colspan], :nth-child(1), :nth-child(3), :nth-child(5), :nth-child(11), :nth-child(26), :nth-child(28), :nth-child(32)", "table.statistics tr").addClass("last"); $("[colspan], :nth-child(1), :nth-child(3), :nth-child(5), :nth-child(10), :nth-child(25), :nth-child(28), :nth-child(32)", "table.statistics tr").addClass("last"); toggleSubCategories(false); $("p.info").width($("table.statistics").width()); $("#toggleSubCategories").click(function() { toggle = !$("th[colspan]:nth-child(5)").is(":visible"); toggleSubCategories(toggle); $("#toggleVerb").html(toggle ? "Dölj" : "Visa"); }); function toggleSubCategories(toggle) { // $("th[colspan]:nth-child(4)", "table.statistics tr").attr("colspan", toggle ? 4 : 6); $("th[colspan]:nth-child(4)", "table.statistics tr").attr("colspan", toggle ? 3 : 5); // $(":nth-child(9)", "table.statistics tr").toggleClass("last", toggle); $(":nth-child(8)", "table.statistics tr").toggleClass("last", toggle); // $(":nth-child(10), :nth-child(11)", "table.statistics tr").toggle(!toggle); $(":nth-child(9), :nth-child(10)", "table.statistics tr").toggle(!toggle); // $("th[colspan]:nth-child(5), :nth-child(12), :nth-child(13), :nth-child(14), :nth-child(15), :nth-child(16), :nth-child(17), :nth-child(18), :nth-child(19), :nth-child(20), :nth-child(21), :nth-child(22), :nth-child(23), :nth-child(24), :nth-child(25), :nth-child(26)", "table.statistics tr").toggle(toggle); $("th[colspan]:nth-child(5), :nth-child(11), :nth-child(12), :nth-child(13), :nth-child(14), :nth-child(15), :nth-child(16), :nth-child(17), :nth-child(18), :nth-child(19), :nth-child(20), :nth-child(21), :nth-child(22), :nth-child(23), :nth-child(24), :nth-child(25)", "table.statistics tr").toggle(toggle); } '; // Skriv ut allt echo sprintf($formatSida, 'IAM – personkategorisering av LUCAT', $jquery, $content . $simulateForms); ?>