Commit 9d2b544d authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

role/privilege : work in progress

parent 447e6b9b
Loading
Loading
Loading
Loading
Loading
+11 −8
Changes for module/Application/src/Application/Controller/RoleController.php: 11 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ class RoleController extends AbstractController
        $roles = $qb_depend->getQuery()->execute();
        $qb_categorie = $this->entityManager->getRepository(Privilege::class)->createQueryBuilder("p");
        $qb_categorie = $this->decorateWithCategorie($qb_categorie, $categorie);
        $qb_categorie->orderBy("p.categorie, p.ordre","ASC");
        $privileges = $qb_categorie->getQuery()->execute();
        return new ViewModel([
            'roles' => $roles,
@@ -40,25 +41,26 @@ class RoleController extends AbstractController
    {
        $privilege_id = $this->params()->fromRoute("privilege");
        $role_id = $this->params()->fromRoute("role");
//        var_dump($privilege_id);
//        var_dump($role_id);
        $privilege = $this->entityManager->getRepository(Privilege::class)->findOneBy(["id" => $privilege_id]);
        $role = $this->entityManager->getRepository(Role::class)->findOneBy(["id" => $role_id]);


        $value = null;
        if( array_search($role, $privilege->getRole()->toArray()) !== false) {
            $privilege->removeRole($role);
            $this->entityManager->flush($privilege);
            $value = 0;
        } else {
            $privilege->addRole($role);
            $this->entityManager->flush($privilege);
            $value = 1;
        }

//        var_dump($privilege);
        //$has = array_search($role_id, $privilege->getRoles());
        //var_dump($has);
        //die("Die die");
        $queryParams = $this->params()->fromQuery();
        $this->redirect()->toRoute("roles", [], ["query" => $queryParams], true);
        return new ViewModel([
            'value' => $value,
        ]);
        //$this->redirect()->toRoute("roles", [], ["query" => $queryParams], true);
    }

    private function decorateWithDepend(QueryBuilder $qb, $depend) {
@@ -91,8 +93,9 @@ class RoleController extends AbstractController

    private function decorateWithCategorie(QueryBuilder $qb, $categorie)
    {
        $qb->leftJoin(CategoriePrivilege::class, "cp", "WITH", "cp.id = p.categorie");
        if ($categorie !== null && $categorie !== "") {
            $qb = $qb->leftJoin(CategoriePrivilege::class, "cp", "WITH", "cp.id = p.categorie")
            $qb
                ->andWhere("cp.code = :type")
                ->setParameter("type", $categorie);
        }
+119 −77
Changes for module/Application/view/application/role/index.phtml: 119 added lines, 77 removed lines.
Original line number Diff line number Diff line
@@ -26,33 +26,37 @@

<?php

//$paramQuery = $this->params()->fromQuery();
//echo $paramQuery;
echo "<input type='submit' value='refresh' id='refresh'/>";
echo "<table id='mytable' class='droits-tbl table table-hover table-bordered table-condensed table-extra-condensed table-header-rotated'>";
echo "<table id='mytable' class='table-bordered'>";
echo "<tr><th></th>";

foreach($roles as $role) {
    echo "<th class='rotate-45'> {$role->getLibelle()} </th>";
    echo generateTableHeaderRole($role);
}
echo "</tr>";


$previous_categorie = null;
foreach($privileges as $privilege) {
    if ($previous_categorie !== $privilege->getCategorie()) {
        echo "<tr><th colspan='1000' class='categorie'>".$privilege->getCategorie()->getLibelle()."</th></tr>";
        $previous_categorie = $privilege->getCategorie();
    }
    echo "<tr>";
    echo "<th> {$privilege->getLibelle()} </th>";
    echo "<th class='privilege'> {$privilege->getLibelle()} </th>";
    foreach($roles as $role) {

        echo "<td>";
        $id = "{$privilege->getId()}_{$role->getId()}";
        echo "<td class='droit' id='$id' title='{$id}'>";

        echo "<a href='".$this->url("modifier-privilege", ['role' => $role->getId(), 'privilege'=> $privilege->getId()], ["query" => $params], true)."' />";
//        echo "[" . $role->getId() . "|" . $privilege->getId() . "|";
//        echo (array_search($role, $privilege->getRole()->toArray()) === false);
//        echo "]";
        if( array_search($role, $privilege->getRole()->toArray()) !== false) {
            echo "<span style='color: green'; class='glyphicon glyphicon-ok'></span>";
            echo "<span class='glyphicon glyphicon-ok text-success'></span>";
        } else {
            echo "<span style='color: red'; class='glyphicon glyphicon-remove'></span>";
            echo "<span class='glyphicon glyphicon-remove text-danger'></span>";
        }
        echo "</a>";
        echo "</td>";
@@ -65,96 +69,134 @@ echo "</table>";

<script>
    $(document).ready(function() {

        function RefreshTable() {
            //alert("clicked !");
            $("#mytable").innerHTML = "oups";
        $("td").click(function() {
            var id = $(this).attr("id");
            var splits = id.split("_");
            var role = splits[1];
            var privilege = splits[0];
            var url = "modifier-privilege/" + role + "/" + privilege;

            $.ajax({
                url : url,
                beforeSend:
                    function () {
                        document.getElementById(id).innerHTML = "<img style='height:40px;' src='css/loading.gif'/>";
                    },
                success:
                    function(retour){
                        var texte = "";
                        if (retour == 1) texte = "<span class='glyphicon glyphicon-ok text-success'></span>";
                        else var texte = "<span class='glyphicon glyphicon-remove text-danger'></span>";
                        document.getElementById(id).innerHTML = texte;
                    }

        $("#refresh").on("click", RefreshTable);

        // OR CAN THIS WAY
        //
        // $("#refresh-btn").on("click", function() {
        //    $( "#mytable" ).load( "your-current-page.html #mytable" );
        // });
            });


        });
    });
</script>


<style>
<?php

    .table-header-rotated th.row-header {
        width: auto;
    function generateOK() {
        return "OK";
    }

    function generateKO() {
        return "KO";
    }

    .table-header-rotated td {
        width: 40px;
        vertical-align: middle;
        text-align: center;
    /**
     * @param Role $role
     * @return string
     */
    function generateTableHeaderRole($role) {

        $premiere = $role->getLibelle();
        $seconde  = "missing";
        $de = "";
        switch(true) {
            case $role->isTheseDependant() :
                //$seconde = "ETAB";
                $de = "these";
                break;
            case $role->isEcoleDoctoraleDependant() :
                $seconde = $role->getStructure()->getSigle();
                $de = "ed";
                break;
            case $role->isEtablissementDependant() :
                //$seconde = $role->getStructure()->getCode();
                $de = "etab";
                break;
            case $role->isUniteRechercheDependant() :
                $seconde = $role->getStructure()->getSigle();
                $de = "ur";
                break;
        }

    .table-header-rotated th.rotate-45 {
        /*border: none;*/
        /*height: 200px;*/
        /*width: 40px;*/
        /*min-width: 40px;*/
        /*max-width: 40px;*/
        /*position: relative;*/
        /*vertical-align: bottom;*/
        /*padding: 0;*/
        /*line-height: 1;*/
        /*white-space: nowrap;*/

        /*position: relative;*/
        /*top: 0px;*/
        /*left: 83px;*/
        /*height: 100%;*/
        /*transform: skew(-40deg, 0deg);*/
        /*overflow: hidden;*/
        /*border-right: 1px solid #ddd;*/
    }

    .table-header-rotated th.rotate-45 > div {
        position: relative;
        top: 0px;
        left: 83px;
        height: 100%;
        transform: skew(-40deg, 0deg);
        overflow: hidden;
        border-right: 1px solid #ddd;
    }

    .table-header-rotated th.rotate-45 > div.first {
        border-left: 1px solid #ddd;
    }

    .table-header-rotated th.rotate-45 span {
        transform: skew(40deg, 0deg) rotate(310deg);
        position: absolute;
        bottom: 40px;
        left: -30px;
        display: inline-block;
        width: 100px;

        $texte  = "<th class='role'>";
        $texte .= $premiere;
        $texte .= "<br/>";
        $texte .= "<span class='depend ".$de."'>";
        $texte .= $seconde;
        $texte .= "</span>";
        $texte .= "</th>";
        return $texte;
    }
?>


<style>
    th.categorie {
        font-style: italic;
        font-size: 12pt;
        margin-left: 15px;
        background-color: lightgoldenrodyellow;
    }

    th.privilege {
        width:50px;
    }

    th.role {
        min-width:50px;
        writing-mode: vertical-lr;
        text-align: left;
    }
    .depend
    {
        text-orientation: upright;
    }

    .ed
    {
        color: #5B2268;
        text-orientation: upright;
    }

    .table-header-rotated .separator {
        border: none;
    .ur
    {
        color: #0a3783;
        text-orientation: upright;
    }

    .droits-tbl th.privilege {
        min-width: 200px;
        max-width: 200px;
        width: 200px;
    .etab
    {
        color: #870a0a;
        text-orientation: upright;
    }

    .droits-tbl td span.refuse {
        opacity: 0.5;
    .these
    {
        color: #004602;
        text-orientation: upright;
    }

    td.droit {
        vertical-align: center;
        text-align: center;
    }

</style>
 No newline at end of file
+1 −0
Changes for module/Application/view/application/role/modifier.phtml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
<?php echo $value; ?>
 No newline at end of file

public/css/loading.gif

0 → 100644
+27.5 KiB
Loading image diff...