]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blobdiff - misc/channel-lookup-misc.php
Apply fix a8d2da775b3e8a9991b3979d604f3a0218d66085 again
[irc/unrealircd/unrealircd-webpanel.git] / misc / channel-lookup-misc.php
index 8c101b8ff9ecbef8b5b7b440883066075e9190b6..0ec18720adbbd1a47a8b63db1baa956622887079 100644 (file)
@@ -3,7 +3,7 @@ function generate_chanbans_table($channel)
 {
        global $rpc;
        $channel = $rpc->channel()->get($channel->name);
-       ?><p><table class="container-xxl table table-responsive caption-top table-striped">
+       ?><p><table class="container-xxl table table-sm table-responsive caption-top table-striped">
        <button class="btn btn-primary mr-1 btn-sm" data-toggle="modal" data-target="#ban">Add New</button>
        <form method="post">
        <button class="btn btn-info btn-sm" type="submit" name="delete_sel_ban">Delete</button>
@@ -40,7 +40,7 @@ function generate_chaninvites_table($channel)
 {
        global $rpc;
        $channel = $rpc->channel()->get($channel->name);
-       ?><p><table class="table table-responsive table-hover caption-top table-striped">
+       ?><p><table class="table table-sm table-responsive table-hover caption-top table-striped">
        <button class="btn btn-primary btn-sm mr-1" data-toggle="modal" data-target="#invite">Add New</button>
        <form method="post">
        <button class="btn btn-info btn-sm" type="submit" name="delete_sel_inv">Delete</button>
@@ -78,11 +78,11 @@ function generate_chaninvites_table($channel)
 function generate_chanexcepts_table($channel)
 {
        global $rpc;
-       echo "<form method=\"post\">";
+       
        $channel = $rpc->channel()->get($channel->name);
-       ?><p><table class="table table-responsive table-hover caption-top table-striped">
+       ?><p><table class="table table-sm table-responsive table-hover caption-top table-striped">
        <button class="btn btn-primary mr-1 btn-sm" data-toggle="modal" data-target="#except">Add New</button>
-       
+       <form method="post">
        <button class="btn btn-info btn-sm" type="submit" name="delete_sel_ex">Delete</button>
        </p>
        
@@ -181,7 +181,7 @@ function generate_chan_occupants_table($channel)
                        $disabled = (current_user_can(PERMISSION_EDIT_CHANNEL_USER)) ? "" : "disabled";
                        $disabledcolor = ($disabled) ? "btn-secondary" : "btn-primary";
                        echo "<td scope=\"row\"><input type=\"checkbox\" value='$member->id' name=\"checkboxes[]\"></td>";
-                       echo "<td><a href=\"".BASE_URL."users/details.php?nick=$member->id\">".htmlspecialchars($member->name)."</a></td>";
+                       echo "<td><a href=\"".get_config("base_url")."users/details.php?nick=$member->id\">".htmlspecialchars($member->name)."</a></td>";
                        echo "<td class='text-right'>$lvlstring</td>";
                        echo "<td><code>".((property_exists($member, 'hostname')) ? htmlspecialchars($member->hostname) : "")."</code></td>";
                        echo "</tr>";
@@ -199,9 +199,6 @@ function generate_html_chansettings($channel)
 {
        ?>
        
-       <p><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editchmodes" <?php echo (current_user_can(PERMISSION_EDIT_CHANNEL)) ? "" : "disabled"; ?>>
-                       Edit
-       </button></p>
     <table class="table-sm table-responsive caption-top table-hover">
         <tbody>
            <?php
@@ -214,15 +211,17 @@ function generate_html_chansettings($channel)
                                $tok = split($fmodes);
                                $modes = $tok[0];
                                $params = rparv($fmodes);
-                               
+                               $paramed_modes = sort_paramed_modes($modes, $params);
+
                 for ($i=0; ($mode = (isset($modes[$i])) ? $modes[$i] : NULL); $i++)
                 {
-                                       $modeinfo = IRCList::$cmodes[$mode];
+                                       $modeinfo = IRCList::lookup($mode);
                                        if (!$modeinfo)
                                                continue;
                                        ?>
                                                <tr>
                                                        <th><?php echo $modeinfo['name']; ?></th>
+                                                       <td><code><?php echo isset($paramed_modes[$mode]) ? $paramed_modes[$mode] : ""; ?></code></td>
                                                        <td>
                                                                <?php echo $modeinfo['description']; ?>
                                                        </td>
@@ -238,59 +237,104 @@ function generate_html_chansettings($channel)
     <?php
 }
 
+/** Return user-friendly mode group names as an array like:
+ * "Join restrictions"=>"kliRzOL", ...
+ * The group "Other" has a number of preset ones PLUS
+ * will be automatically filled with any remaining modes
+ * that are detected and that we forgot to put in Other.
+ */
+function group_modes()
+{
+       $modes = '';
+       foreach(IRCList::$uplink as $mode_groups)
+               $modes .= $mode_groups;
+               
+       $grouping = IRCList::$grouping;
+
+       foreach (str_split($modes) as $letter)
+       {
+               $found = false;
+               foreach($grouping as $groupname=>$value)
+               {
+                       if (str_contains($value, $letter))
+                       {
+                               $found = true;
+                               break;
+                       }
+               }
+               if (!$found)
+                       $grouping["Other"] .= $letter;
+               
+       }
+       return $grouping;
+}
+
 function generate_edit_chmodes($chan)
 {
        ?>
-       
-    <table class="table-sm table-responsive caption-top table-hover">
-        <tbody>
            <?php
-                               if (!isset($chan->modes))
-                               {
-                                       echo "No modes set";
-                                       return;
-                               }
-                               $fmodes = $chan->modes;
-                               $tok = split($fmodes);
-                               $modes = $tok[0];
-                               $params = rparv($fmodes);
-                               $paramed_modes = sort_paramed_modes($modes, $params);
-                               foreach (IRCList::$uplink as $m)
-                                       for ($i=0; ($mode = (isset($m[$i])) ? $m[$i] : NULL); $i++)
-                                       {
-                                               $group = get_chmode_group($mode);
-                                               if (!$group || $group == 1)
-                                                       continue;
-                                               $modeinfo = (isset(IRCList::$cmodes[$mode])) ? IRCList::$cmodes[$mode] : ['name' => "Unknown mode", 'description' => "Unknown mode +$mode"];
-                                               $checked = (strstr($modes,$mode)) ? "checked" : "";
-                                               $disabled = "";
-                                               switch($mode)
-                                               {
-                                                       case "Z":
-                                                       case "d":
-                                                               $disabled = "disabled";
-                                               }
-                                               ?>
-                                                       <tr><th scope="row"><input <?php echo $checked." ".$disabled; ?> type="checkbox" value='$mode' name="newmodes[]"></th>
-                                                               <th data-toggle="tooltip" data-placement="top" title="<?php echo htmlspecialchars($modeinfo['description']); ?>"><?php echo htmlspecialchars($modeinfo['name'])." (<code>+$mode</code>)";  ?></th>
-                                                               <td>
-                                                                       <?php
-                                                                               
-                                                                               if ($group == 2 || $group == 3)
-                                                                               {
-                                                                                       ?><input type="text" class="form-control" name="<?php echo $mode; ?>" id="<?php echo $mode; ?>" value="<?php echo ($checked) ? htmlspecialchars($paramed_modes[$mode]) : ""; ?>"><?php
-                                                                               }
-                                                                       ?>
-                                                               </td>
-                                                       </tr>
-                                               <?php
-                                       }
-                               
+               if (!isset($chan->modes))
+               {
+                       echo "No modes set";
+                       return;
+               }
+               $fmodes = $chan->modes;
+               $tok = split($fmodes);
+               $modes = $tok[0];
+               $params = rparv($fmodes);
+               $paramed_modes = sort_paramed_modes($modes, $params);
 
-           ?>
-        </tbody>
-    </table>
+               $all_modes = IRCList::$uplink;
+               $groups = group_modes();
 
+               foreach ($groups as $group_name=>$m)
+               {
+                       echo "<fieldset class=\"border p-1 col-sm-6\">\n";
+                       echo "<legend class=\"w-auto\" style=\"font-size: 16px\">$group_name</legend>\n";
+                       for ($i=0; ($mode = (isset($m[$i])) ? $m[$i] : NULL); $i++)
+                       {
+                               $group = get_chmode_group($mode);
+                               if (!$group || $group == 1)
+                                       continue;
+                               $modeinfo = IRCList::lookup($mode);
+                               $checked = (strstr($modes,$mode)) ? "checked " : " ";
+
+                               $disabled = "";
+                               if (isset($modeinfo) && $modeinfo['requires'] == "Server")
+                                               $disabled = "disabled";
+                               
+                               ?>
+                               <div class="form-group row">
+                                       <div class="col-sm-5">
+                                               <input <?php echo $checked.$disabled; ?> type="checkbox" value='<?php echo $mode; ?>' name="newmodes[]">
+                                               <span data-toggle="tooltip" data-placement="top" title="<?php echo htmlspecialchars($modeinfo['description']); ?>"><?php echo htmlspecialchars($modeinfo['name'])." (<code>+$mode</code>)";  ?>
+                                       </div>
+                                       <div class="col-sm-2">
+                                               <?php
+                                                       
+                                                       if ($group == 2 || $group == 3)
+                                                       { 
+                                                               ?><input type="text" class="input-group-sm" name="paramed_modes[<?php echo $mode; ?>]"
+                                                               id="<?php echo $mode; ?>" value="<?php echo ($checked)
+                                                               ?
+                                                                       htmlspecialchars(
+                                                                               isset($paramed_modes[$mode])
+                                                                               ?
+                                                                                       $paramed_modes[$mode]
+                                                                               :
+                                                                                       ""
+                                                                       )
+                                                               :
+                                                                ""; ?>"><?php
+                                                       }
+                                               ?>
+                                       </div>
+                               </div>
+                               <?php
+                       }
+                       echo "</fieldset>\n";
+               }
+           ?>
     <?php
 }