Просмотр исходного кода

Merge pull request #802 from jaapmarcus/feature-user-phpcli

#766 Feature Selectable user CLI
Kristan Kenney 5 лет назад
Родитель
Сommit
1d558b1b79
4 измененных файлов с 207 добавлено и 1 удалено
  1. 76 0
      bin/v-change-user-php-cli
  2. 88 0
      bin/v-list-sys-php
  3. 17 0
      web/edit/user/index.php
  4. 26 1
      web/templates/admin/edit_user.html

+ 76 - 0
bin/v-change-user-php-cli

@@ -0,0 +1,76 @@
+#!/bin/bash
+# info: add php version to .bash_aliases
+# options: USER VERSION
+
+#  add line to .bash_aliases to set default php incase of multiPHP
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument definition
+user=$1
+version=$2
+
+
+# Includes
+source $HESTIA/func/main.sh
+source $HESTIA/conf/hestia.conf
+
+
+#----------------------------------------------------------#
+#                    Verifications                         #
+#----------------------------------------------------------#
+
+# Reading user values
+source $USER_DATA/user.conf
+
+FILE=$HOMEDIR/$user/.bash_aliases
+
+is_format_valid 'user'
+is_object_valid 'user' 'USER' "$user"
+is_object_unsuspended 'user' 'USER' "$user"
+
+# Verify php version format
+if [[ ! $version =~ ^[0-9]\.[0-9]+ ]]; then
+    echo "The php version format is invalid, it should look like [0-9].[0-9]..."
+    exit
+fi
+
+# Check if php version is supported
+if [ ! -f "$HESTIA_INSTALL_DIR/multiphp/$WEB_SYSTEM/PHP-${version//.}.sh" ]; then
+    echo "Version is currently not supported or does not exist..."
+    exit
+fi
+
+if grep -q "alias php='env php$version'" "$FILE"; then
+  echo "PHP CLI Already defined"
+  exit;
+fi
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+#create .bash_aliases is not exsists
+if [ ! -f "$FILE" ]; then
+    touch "$FILE"
+fi
+
+sed -i "/alias php='env/d" "$FILE"
+
+echo "alias php='env php$version'" >> $FILE
+
+# Change language
+if [ -z "$(grep PHPCLI $USER_DATA/user.conf)" ]; then
+    sed -i "s/^TIME/PHPCLI='$version'\nTIME/g" $USER_DATA/user.conf
+else
+    update_user_value "$user" '$PHPCLI' "$version"
+fi
+
+#----------------------------------------------------------#
+#                       Hestia                             #
+#----------------------------------------------------------#
+
+exit

+ 88 - 0
bin/v-list-sys-php

@@ -0,0 +1,88 @@
+#!/bin/bash
+# info: listing availble PHP versions installed
+# options: [FORMAT]
+#
+# List /etc/php/* version check if folder fpm is avalible
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument definition
+format=${1-shell}
+
+# Includes
+source $HESTIA/func/main.sh
+source $HESTIA/conf/hestia.conf
+
+# JSON list function
+json_list() {
+    i=1
+    objects=$(echo "$versions" |wc -w)
+    echo '['
+    for version in $versions; do
+        if [ "$i" -lt "$objects" ]; then
+            echo -e  "\t\"$version\","
+        else
+            echo -e  "\t\"$version\""
+        fi
+        (( ++i))
+    done
+    echo "]"
+}
+
+# SHELL list function
+shell_list() {
+    echo "VERSION"
+    echo "--------"
+    for version in $versions; do
+        echo "$version"
+    done
+}
+
+# PLAIN list function
+plain_list() {
+    for version in $versions; do
+        echo "$version"
+    done
+}
+
+# CSV list function
+csv_list() {
+    echo "VERSION"
+    for version in $versions; do
+        echo "$version"
+    done
+}
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# List trough /etc/php
+versions_list=$(ls -d /etc/php/*)
+versions=()
+for version in $versions_list; do
+    if [ -d "$version/fpm" ] 
+    then
+    version=$(echo $version | cut -d'/' -f4);
+    versions+=" $version"
+    fi
+done
+
+# Listing data
+case $format in
+    json)   json_list ;;
+    plain)  plain_list ;;
+    csv)    csv_list ;;
+    shell)  shell_list ;;
+esac
+
+
+#----------------------------------------------------------#
+#                       Hestia                             #
+#----------------------------------------------------------#
+
+exit

+ 17 - 0
web/edit/user/index.php

@@ -38,6 +38,7 @@ $v_lname = $data[$v_username]['LNAME'];
 $v_shell = $data[$v_username]['SHELL'];
 $v_twofa = $data[$v_username]['TWOFA'];
 $v_qrcode = $data[$v_username]['QRCODE'];
+$v_phpcli = $data[$v_username]['PHPCLI'];
 $v_ns = $data[$v_username]['NS'];
 $nameservers = explode(",", $v_ns);
 $v_ns1 = $nameservers[0];
@@ -73,6 +74,14 @@ exec (HESTIA_CMD."v-list-sys-shells json", $output, $return_var);
 $shells = json_decode(implode('', $output), true);
 unset($output);
 
+//List PHP Versions
+// List supported php versions
+exec (HESTIA_CMD."v-list-sys-php json", $output, $return_var);
+$php_versions = json_decode(implode('', $output), true);
+unset($output);
+
+
+
 // Are you admin?
 
 // Check POST request
@@ -131,6 +140,14 @@ if (!empty($_POST['save'])) {
         unset($output);
     }
 
+    // Change phpcli (admin only)
+    if (($v_phpcli != $_POST['v_phpcli']) && ($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) {
+        $v_phpcli = escapeshellarg($_POST['v_phpcli']);
+        exec (HESTIA_CMD."v-change-user-php-cli ".escapeshellarg($v_username)." ".$v_phpcli, $output, $return_var);
+        check_return_code($return_var,$output);
+        unset($output);
+    }
+
     // Change language
     if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) {
         $v_language = escapeshellarg($_POST['v_language']);

+ 26 - 1
web/templates/admin/edit_user.html

@@ -182,6 +182,31 @@
                                     </select>
                                 </td>
                             </tr>
+                            <tr>
+                                 <td class="vst-text input-label">
+                                     <?php print __('PHP_CLI');?>
+                                 </td>
+                             </tr>
+                             <tr>
+                                 <td>
+                                     <select class="vst-list" name="v_phpcli">
+                                         <?php
+                                             foreach ($php_versions as $key => $value) {
+                                                 $php = explode('-',$value);
+                                                 echo "\t\t\t\t<option value=\"".$value."\"";
+                                                 $svalue = "'".$value."'";
+                                                 if ((!empty($v_phpcli)) && ( $value == $v_phpcli ) || ($svalue == $v_phpcli)){
+                                                     echo ' selected' ;
+                                                 }
+                                                 if ((empty($v_phpcli)) && ($value == DEFAULT_PHP_VERSION)){
+                                                     echo ' selected' ;
+                                                 }
+                                                 echo ">".htmlentities($value)."</option>\n";
+                                             }
+                                         ?>
+                                     </select>
+                                 </td>
+                             </tr>                            
                         <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {?>
                             <tr>
                                 <td class="vst-text input-label">
@@ -262,4 +287,4 @@
                 </tr>
             </table>
         </form>
-    </div>
+    </div>