Changeset 8

Show
Ignore:
Timestamp:
11/15/07 17:30:27 (5 years ago)
Author:
teiko
Message:

Расширенный режим efio/admin. Можно выбрать несколько элементов из базы и применить к ним общее действие

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • efio/admin/admin.js

    r1 r8  
    66    } 
    77    function updateLists() { 
    8         var v = $("sfield").value; 
    9         if (v!="") { 
    10             var fsnames = snames.filter(function(n) { return n.name.contains(v); }); 
    11             var fnames = names.filter(function(n) { return n.name.contains(v); }); 
    12             var fpnames = pnames.filter(function(n) { return n.name.contains(v); }); 
     8        var v = $("sfield").value; 
     9        if (v!="") { 
     10            var fsnames = snames.filter(function(n) { return n.name.contains(v); }); 
     11            var fnames = names.filter(function(n) { return n.name.contains(v); }); 
     12            var fpnames = pnames.filter(function(n) { return n.name.contains(v); }); 
     13            generateList($("fam"), fsnames); 
     14            generateList($("nam"), fnames); 
     15            generateList($("pat"), fpnames); 
     16        } else { 
     17            generateList($("fam"), snames); 
     18            generateList($("nam"), names); 
     19            generateList($("pat"), pnames); 
     20        } 
     21        $("sfield").focus(); 
     22    } 
     23    function updateExtendedLists() { 
     24        var v = $("sfield").value; 
     25        if (v!="") { 
     26            var fsnames = snames.filter(function(n) { return n.name.contains(v); }); 
     27            var fnames = names.filter(function(n) { return n.name.contains(v); }); 
     28            var fpnames = pnames.filter(function(n) { return n.name.contains(v); }); 
     29            generateExtendedList($("fam"), fsnames); 
     30            generateExtendedList($("nam"), fnames); 
     31            generateExtendedList($("pat"), fpnames); 
     32        } else { 
     33            generateExtendedList($("fam"), snames); 
     34            generateExtendedList($("nam"), names); 
     35            generateExtendedList($("pat"), pnames); 
     36        } 
     37        $("sfield").focus(); 
     38    } 
     39    window.addEvent('domready', function() { 
     40        $("sfield").addEvent("keydown", function(event) { 
     41            event = new Event(event); 
     42            if (event.code==13) $("search").focus(); 
     43        }); 
     44        var buttons = (new Element("div")).addClass("buttons").setProperty("id", "buttons"); 
     45        $$("body").adopt(buttons); 
     46        buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/add.gif")); 
     47        buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/block.gif")); 
     48        buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/remove.gif")); 
     49        loadNew(); 
     50    }); 
     51    function loadNew() { 
     52        JsHttpRequest.query("admin.php", { task:"list" }, 
     53            function(result, errors) { 
     54                        if (result) { 
     55                            snames = result.snames; 
     56                            names = result.names; 
     57                            pnames = result.pnames; 
     58                        $("extendedPanel").setStyle("display", "none");                      
     59                            $("post1").removeEvents().addEvent('click', post); 
     60                            $("post2").removeEvents().addEvent('click', post); 
     61                    $("search").removeEvents().addEvent('click', updateLists); 
     62                        $("label").setText("Вновь добавленные"); 
     63                    $("changeView").setText("Полный список имен").removeEvents().addEvent("click", fullView); 
     64                            updateLists(); 
     65                        } 
     66                }, 
     67                true 
     68        ); 
     69    } 
     70    function fullView() { 
     71        JsHttpRequest.query("admin.php", { task:"listAll" }, 
     72            function(result, errors) { 
     73                        if (result) { 
     74                            snames = result.snames; 
     75                            names = result.names; 
     76                            pnames = result.pnames; 
     77                            $("extendedPanel").setStyle("display", "block"); 
     78                            $("post1").removeEvents().addEvent('click', postExtended); 
     79                            $("post2").removeEvents().addEvent('click', postExtended); 
     80                    $("search").removeEvents().addEvent('click', updateExtendedLists);                       
     81                            $("label").setText("Полный список имен"); 
     82                            $("changeView").setText("Перейти к вновь добавленным").removeEvents().addEvent("click", loadNew); 
     83                            updateExtendedLists(); 
     84                        } 
     85            }, 
     86            true 
     87        ); 
     88    } 
     89     
     90    function generateExtendedList(el, names) { 
     91        el.empty(); 
     92        var letter_old; 
     93        var letter; 
     94        var letterEl = null; 
     95        $("buttons").setStyle("display", "none"); 
     96        names.each(function(n) { 
     97            letter = n.name.charAt(0); 
     98            if (letter!=letter_old) { 
     99                        letter_old = letter; 
     100                        letterEl = (new Element("div")).addClass("letter"); 
     101                        letterEl.adopt((new Element("div")).addClass("dropcap").setText(letter)); 
     102                        if (letterEl) el.adopt(letterEl); 
     103            } 
     104            var nameLine = (new Element("div")).addClass("nameLine").setText(n.name); 
     105            if (letterEl) { 
     106                (new Element("input")).setProperty("type", "checkbox").addClass("checkbox").injectTop(nameLine); 
     107                letterEl.adopt(nameLine); 
     108            } 
     109            applyStyle(nameLine); 
     110        }); 
     111        if (letterEl) el.adopt(letterEl); 
     112    } 
    13113 
    14             generateList($("fam"), fsnames); 
    15             generateList($("nam"), fnames); 
    16             generateList($("pat"), fpnames); 
    17         } else { 
    18             generateList($("fam"), snames); 
    19             generateList($("nam"), names); 
    20             generateList($("pat"), pnames); 
    21         } 
    22         $("sfield").focus(); 
    23     } 
    24     window.addEvent('domready', function() { 
    25         $("search").addEvent('click', updateLists); 
    26         $("sfield").addEvent("keydown", function(event) { 
    27             event = new Event(event); 
    28             if (event.code==13) $("search").focus(); 
    29         }); 
    30         var buttons = (new Element("div")).addClass("buttons").setProperty("id", "buttons"); 
    31         $$("body").adopt(buttons); 
    32         buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/add.gif")); 
    33         buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/block.gif")); 
    34         buttons.adopt((new Element("img")).addClass("button").setProperty("src", "images/remove.gif")); 
    35          
    36         JsHttpRequest.query("admin.php", { task:"list" }, 
    37             function(result, errors) { 
    38                 if (result) { 
    39                     snames = result.snames; 
    40                     names = result.names; 
    41                     pnames = result.pnames; 
    42                     updateLists(); 
    43                 } 
    44             }, 
    45             false 
    46         ); 
    47     }); 
    48114    function generateList(el, names) { 
    49       el.empty(); 
    50       var letter_old; 
    51       var letter; 
    52       var letterEl = null; 
    53       $("buttons").setStyle("display", "none"); 
    54       names.each(function(n) { 
    55           letter = n.name.charAt(0); 
    56           if (letter!=letter_old) { 
    57               letter_old = letter; 
    58               letterEl = (new Element("div")).addClass("letter"); 
    59               letterEl.adopt((new Element("div")).addClass("dropcap").setText(letter)); 
    60               if (letterEl) el.adopt(letterEl); 
    61           } 
    62           var nameLine = (new Element("div")).addClass("nameLine").setText(n.name); 
    63           if (letterEl) letterEl.adopt(nameLine); 
    64           applyStyle(nameLine); 
    65  
    66           nameLine.addEvent('mouseenter', function(event) { 
    67               event = new Event(event); 
    68               var el = event.target; 
    69               $("buttons").setStyles({ 
    70                   display: "block", 
    71                   top: el.getTop() + "px", 
    72                   left: el.getLeft() + "px" 
    73               }); 
    74               $("buttons").getChildren()[0].removeEvents().addEvent('click', function(event) { 
    75                   el.removeClass("blocked"); 
    76                   el.removeClass("removed"); 
    77                   el.toggleClass("accepted"); 
    78                   updateArray(el); 
    79               }); 
    80               $("buttons").getChildren()[1].removeEvents().addEvent('click', function(event) { 
    81                   el.removeClass("accepted"); 
    82                   el.removeClass("removed"); 
    83                   el.toggleClass("blocked"); 
    84                   updateArray(el); 
    85               }); 
    86               $("buttons").getChildren()[2].removeEvents().addEvent('click', function(event) { 
    87                   el.removeClass("accepted"); 
    88                   el.removeClass("blocked"); 
    89                   el.toggleClass("removed"); 
    90                   updateArray(el); 
    91               }); 
    92           }); 
    93       }); 
    94       if (letterEl) el.adopt(letterEl); 
     115      el.empty(); 
     116      var letter_old; 
     117      var letter; 
     118      var letterEl = null; 
     119      $("buttons").setStyle("display", "none"); 
     120      names.each(function(n) { 
     121          letter = n.name.charAt(0); 
     122          if (letter!=letter_old) { 
     123                      letter_old = letter; 
     124                      letterEl = (new Element("div")).addClass("letter"); 
     125                      letterEl.adopt((new Element("div")).addClass("dropcap").setText(letter)); 
     126                      if (letterEl) el.adopt(letterEl); 
     127          } 
     128          var nameLine = (new Element("div")).addClass("nameLine").setText(n.name); 
     129          if (letterEl) letterEl.adopt(nameLine); 
     130          applyStyle(nameLine); 
     131     
     132          nameLine.addEvent('mouseenter', function(event) { 
     133                      event = new Event(event); 
     134                      var el = event.target; 
     135                      $("buttons").setStyles({ 
     136                          display: "block", 
     137                          top: el.getTop() + "px", 
     138                          left: el.getLeft() + "px" 
     139                      }); 
     140                      $("buttons").getChildren()[0].removeEvents().addEvent('click', function(event) { 
     141                          el.removeClass("blocked"); 
     142                          el.removeClass("removed"); 
     143                          el.toggleClass("accepted"); 
     144                          updateArray(el); 
     145                      }); 
     146                      $("buttons").getChildren()[1].removeEvents().addEvent('click', function(event) { 
     147                          el.removeClass("accepted"); 
     148                          el.removeClass("removed"); 
     149                          el.toggleClass("blocked"); 
     150                          updateArray(el); 
     151                      }); 
     152                      $("buttons").getChildren()[2].removeEvents().addEvent('click', function(event) { 
     153                          el.removeClass("accepted"); 
     154                          el.removeClass("blocked"); 
     155                          el.toggleClass("removed"); 
     156                          updateArray(el); 
     157                      }); 
     158          }); 
     159      }); 
     160      if (letterEl) el.adopt(letterEl); 
    95161    } 
    96162    function applyStyle(el) { 
     
    166232                } 
    167233            }, 
    168             false 
    169         ); 
    170     } 
     234            true 
     235        ); 
     236    } 
     237     
     238    function getListChecked() { 
     239        var fsnames = []; 
     240        var fnames = []; 
     241        var fpnames = []; 
     242 
     243        $$("input").each(function(el) { 
     244            if (el.hasClass("checkbox") && el.checked) { 
     245                var t = el.getParent().getParent().getParent().className; 
     246                switch(t) { 
     247                    case "names": fnames.push(el.getParent().getText()); break; 
     248                    case "families": fsnames.push(el.getParent().getText()); break; 
     249                    case "patronyms": fpnames.push(el.getParent().getText()); break; 
     250                } 
     251            } 
     252        }); 
     253        return { snames: fsnames, names: fnames, pnames: fpnames };          
     254    } 
     255    function postExtended() { 
     256        var nn = getListChecked(); 
     257        if (nn.length==0) return; 
     258        req = {task:"modifyExt"}; 
     259        if ($("s_accept").checked) { 
     260            req["aname"] = nn.names; 
     261            req["asname"] = nn.snames; 
     262            req["apname"] = nn.pnames; 
     263        } else if ($("s_uncheck").checked) { 
     264            req["uname"] = nn.names; 
     265            req["usname"] = nn.snames; 
     266            req["upname"] = nn.pnames; 
     267        } else if ($("s_block").checked) { 
     268            req["bname"] = nn.names; 
     269            req["bsname"] = nn.snames; 
     270            req["bpname"] = nn.pnames; 
     271        } else if ($("s_remove").checked) { 
     272            req["rname"] = nn.names; 
     273            req["rsname"] = nn.snames; 
     274            req["rpname"] = nn.pnames; 
     275        } 
     276        JsHttpRequest.query("admin.php", req, 
     277            function(result, errors) { 
     278                        if (result) { 
     279                            snames = result.snames; 
     280                            names = result.names; 
     281                            pnames = result.pnames; 
     282                            updateExtendedLists(); 
     283                        } 
     284            }, 
     285            true 
     286        ); 
     287    }     
  • efio/admin/admin.php

    r1 r8  
    3737$rpname = mosGetParam($_REQUEST,'rpname',''); 
    3838 
    39 if (!is_array($aname)) $name = array($aname); 
    40 if (!is_array($asname)) $sname = array($asname); 
    41 if (!is_array($apname)) $pname = array($apname); 
    42 if (!is_array($bname)) $name = array($bname); 
    43 if (!is_array($bsname)) $sname = array($bsname); 
    44 if (!is_array($bpname)) $pname = array($bpname); 
    45 if (!is_array($rname)) $name = array($rname); 
    46 if (!is_array($rsname)) $sname = array($rsname); 
    47 if (!is_array($rpname)) $pname = array($rpname); 
     39// претенденты на пометку "непроверенные" 
     40$uname = mosGetParam($_REQUEST,'uname',''); 
     41$usname = mosGetParam($_REQUEST,'usname',''); 
     42$upname = mosGetParam($_REQUEST,'upname',''); 
     43 
     44if (!is_array($aname)) $aname = array($aname); 
     45if (!is_array($asname)) $asname = array($asname); 
     46if (!is_array($apname)) $apname = array($apname); 
     47if (!is_array($bname)) $bname = array($bname); 
     48if (!is_array($bsname)) $bsname = array($bsname); 
     49if (!is_array($bpname)) $bpname = array($bpname); 
     50if (!is_array($rname)) $rname = array($rname); 
     51if (!is_array($rsname)) $rsname = array($rsname); 
     52if (!is_array($rpname)) $rpname = array($rpname); 
     53if (!is_array($uname)) $uname = array($uname); 
     54if (!is_array($usname)) $usname = array($usname); 
     55if (!is_array($upname)) $upname = array($upname); 
    4856 
    4957switch($task) { 
     
    6068        $tbSNames->remove($rsname); 
    6169        $tbPNames->remove($rpname); 
    62          
     70 
     71        $tbNNames->uncheck($uname); 
     72        $tbSNames->uncheck($usname); 
     73        $tbPNames->uncheck($upname); 
    6374    case 'list': 
    6475        $_RESULT = array( 
     
    6778            "pnames" => $tbPNames->listUnchecked() 
    6879        ); 
     80        break; 
     81            case 'modifyExt': 
     82        $tbNNames->accept($aname); 
     83        $tbSNames->accept($asname); 
     84        $tbPNames->accept($apname); 
     85 
     86        $tbNNames->block($bname); 
     87        $tbSNames->block($bsname); 
     88        $tbPNames->block($bpname); 
     89 
     90        $tbNNames->remove($rname); 
     91        $tbSNames->remove($rsname); 
     92        $tbPNames->remove($rpname); 
     93 
     94        $tbNNames->uncheck($uname); 
     95        $tbSNames->uncheck($usname); 
     96        $tbPNames->uncheck($upname); 
     97        case 'listAll': 
     98        $_RESULT = array( 
     99            "names" => $tbNNames->listAll(), 
     100            "snames" => $tbSNames->listAll(), 
     101            "pnames" => $tbPNames->listAll() 
     102        ); 
    69103    break; 
    70104} 
  • efio/admin/index.html

    r1 r8  
    1111<body> 
    1212    <div class="header"> 
    13        <div class="label">Вновь добавленные</div> 
    14       <div class="search"> 
    15           <input id="sfield"/> 
    16            <input type="button" value="искать" id="search" /> 
    17       </div> 
     13       <div class="label" id="label">Загрузка...</div> 
     14      <div class="search"> 
     15          <input id="sfield"/> 
     16           <input type="button" value="фильтр" id="search" /> 
     17      </div> 
    1818    </div> 
     19    <a href="#" id="changeView"></a> 
     20    <div id="extendedPanel"> 
     21        <form > 
     22            <div>С отмеченными:</div> 
     23            <input name="status" id="s_accept" type="radio" />принять<br> 
     24            <input name="status" id="s_uncheck" type="radio" />пометить как непроверенное<br> 
     25            <input name="status" id="s_block" type="radio" />заблокировать<br> 
     26            <input name="status" id="s_remove" type="radio" />удалить<br> 
     27        </form> 
     28    </div>  
    1929    <div class="post"> 
    20         <input type="button" id="post1" value="Отправить" onclick="post()"/> 
     30        <input type="button" id="post1" value="Отправить" /> 
    2131    </div> 
    2232    <div class="table"> 
     
    3141    </div> 
    3242    <div class="post"> 
    33         <input type="button" id="post2" value="Отправить" onclick="post()"/> 
     43        <input type="button" id="post2" value="Отправить" /> 
    3444    </div> 
    3545    <div id="debug"></div> 
  • efio/admin/styles.css

    r1 r8  
    9494    padding: 10px 
    9595} 
     96.checkbox { 
     97    position: relative; 
     98    left: -30pt; 
     99    margin-right: -15pt 
     100} 
     101#extendedPanel { 
     102    margin-top: 10pt; 
     103    margin-left: 10pt; 
     104    display: none 
     105} 
  • efio/autoname.class.php

    r7 r8  
    8686 
    8787    function listUnchecked() { 
    88         $where_q = "WHERE correct=0"; // show all except blocked 
    89         $order_q = "ORDER BY $this->_tbl_key"; 
    90          
    91         $query = "SELECT * FROM $this->_tbl $where_q $order_q"; 
    92         $this->_db->setQuery($query); 
    93         $rows = $this->_db->loadRowList(); 
    94         $res = array(); 
    95         foreach($rows as $row) { 
    96             array_push($res, 
    97                 array("name" =>  mb_convert_case($row["name"], MB_CASE_TITLE, 'UTF-8'), 
    98                       "correct" => $row["correct"])); 
    99         } 
    100         if (!$this->_db->query()) { 
    101             echo $this->_db->stderr(); 
    102             return array(); 
    103         } 
    104         return $res;             
     88        $where_q = "WHERE correct=0"; // show all except blocked 
     89        $order_q = "ORDER BY $this->_tbl_key"; 
     90         
     91        $query = "SELECT * FROM $this->_tbl $where_q $order_q"; 
     92        $this->_db->setQuery($query); 
     93        $rows = $this->_db->loadRowList(); 
     94        $res = array(); 
     95        foreach($rows as $row) { 
     96            array_push($res, 
     97                array("name" =>  mb_convert_case($row["name"], MB_CASE_TITLE, 'UTF-8'), 
     98                      "correct" => $row["correct"])); 
     99        } 
     100        if (!$this->_db->query()) { 
     101            echo $this->_db->stderr(); 
     102            return array(); 
     103        } 
     104        return $res;             
     105    } 
     106 
     107    function listAll() { 
     108        $order_q = "ORDER BY $this->_tbl_key"; 
     109         
     110        $query = "SELECT * FROM $this->_tbl $order_q"; 
     111        $this->_db->setQuery($query); 
     112        $rows = $this->_db->loadRowList(); 
     113        $res = array(); 
     114        foreach($rows as $row) { 
     115            array_push($res, 
     116                array("name" =>  mb_convert_case($row["name"], MB_CASE_TITLE, 'UTF-8'), 
     117                      "correct" => $row["correct"])); 
     118        } 
     119        if (!$this->_db->query()) { 
     120            echo $this->_db->stderr(); 
     121            return array(); 
     122        } 
     123        return $res;             
    105124    } 
    106125     
     
    108127        if (empty($names)) return; 
    109128        foreach($names as $n) { 
    110             $n = str_replace("'", "''", $n); 
     129        $n = str_replace("'", "''", $n); 
    111130            $req = "UPDATE $this->_tbl SET correct=1 WHERE $this->_tbl_key=UPPER('$n') LIMIT 1;"; 
    112131            $this->_db->setQuery($req); 
     
    120139        if (empty($names)) return; 
    121140        foreach($names as $n) { 
     141            $n = str_replace("'", "''", $n); 
    122142            $req = "UPDATE $this->_tbl SET correct=2 WHERE $this->_tbl_key=UPPER('$n') LIMIT 1;"; 
    123143            $this->_db->setQuery($req); 
    124144            if (!$this->_db->query()) { 
    125                 echo $this->_db->stderr(); 
     145                    echo $this->_db->stderr(); 
    126146            } 
    127147        } 
     148    } 
     149 
     150    function uncheck($names) { 
     151        if (empty($names)) return; 
     152        foreach($names as $n) { 
     153            $n = str_replace("'", "''", $n); 
     154            $req = "UPDATE $this->_tbl SET correct=null WHERE $this->_tbl_key = UPPER('$n') LIMIT 1;"; 
     155                    $this->_db->setQuery($req); 
     156            if (!$this->_db->query()) { 
     157                  echo $this->_db->stderr(); 
     158            } 
     159        } 
    128160    } 
    129161