This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Can't see anything on FTP Accounts function
#1
[Not Solved] Can't see anything on FTP Accounts function
Hello, I get an big problem with Sentora. That is can't using FTP Account function in Sentora panel.
It's show a message only:
Code:
Using this module you can create FTP accounts which will enable you and any other accounts you create to have the ability to upload and manage files on your hosting space.

Don't have any thing else!
Please help me diagnose what's problem happening.
--
Thanks for all![Image: sentora-ftp-error-nothing.png]
Reply
Thanks given by:
#2
[Not Solved] RE: Can't see anything on FTP Accounts function
(11-12-2018, 11:52 AM)caochitam Wrote: Hello, I get an big problem with Sentora. That is can't using FTP Account function in Sentora panel.
It's show a message only:
Code:
Using this module you can create FTP accounts which will enable you and any other accounts you create to have the ability to upload and manage files on your hosting space.

Don't have any thing else!
Please help me diagnose what's problem happening.
--
Thanks for all![Image: sentora-ftp-error-nothing.png]

Several things:

1. Do you definitely have ProFTPd installed correctly? Depending on which version of Sentora you installed, and when you installed it, there have been issues with ProFTPd not installing correctly.

2. Are you having this "blank" module issue with any other modules or just the FTP one?

3. Which browser are you using to view the page?

4. Please copy and paste the contents of these files into your reply (there were/are some issues that I had to fix for the FTP module to work correctly on my servers):


Code:
/etc/sentora/panel/modules/ftp_management/module.zpm


and


Code:
/etc/sentora/panel/modules/ftp_management/code/controller.ext.php


Keith.
Reply
Thanks given by: caochitam
#3
[Not Solved] RE: Can't see anything on FTP Accounts function
Thank you, Fearwork.

1. ProFTPd service is running. I don't sure it's work correctly But it is running 
   Status check Is OK. ==> Captured in Attachment below
2. Only FTP module is "BLANK", all of monule is work fine.
3. My browser is Google Chrome 70. I don't think have problem with web browser
4. The file you have just require:
    File ftp_management/module.zpm Uploaded to Google Drive
    File ftp_management/code/controller.ext.php Uploaded to Google Drive
--------
Sorry, I still don't know what's happening. Please help me, Fearwork.
Thank a lot for your help!


Attached Files Thumbnail(s)
   

.txt   module.zpm.txt (Size: 11.41 KB / Downloads: 3)
.txt   controller.ext.php.txt (Size: 19.94 KB / Downloads: 2)
Reply
Thanks given by:
#4
[Not Solved] RE: Can't see anything on FTP Accounts function
(11-12-2018, 07:12 PM)caochitam Wrote: Thank you, Fearwork.

1. ProFTPd service is running. I don't sure it's work correctly But it is running 
   Status check Is OK. ==> Captured in Attachment below
2. Only FTP module is "BLANK", all of monule is work fine.
3. My browser is Google Chrome 70. I don't think have problem with web browser
4. The file you have just require:
    File ftp_management/module.zpm Uploaded to Google Drive
    File ftp_management/code/controller.ext.php Uploaded to Google Drive
--------
Sorry, I still don't know what's happening. Please help me, Fearwork.
Thank a lot for your help!

Ok, in the controller.ext.php file, there are 3 lines that need changing slightly. I'm not sure when these errors crept into the code, and I haven't traced it back through the code to see what is causing it (probably a few rogue function calls), but the fix is to add "= null" in three places. This is the fixed code for that file, so copy and replace the entire contents with this:


Code:
<?php

/**
* @copyright 2014-2015 Sentora Project (http://www.sentora.org/)
* Sentora is a GPL fork of the ZPanel Project whose original header follows:
*
* ZPanel - A Cross-Platform Open-Source Web Hosting Control panel.
*
* @package ZPanel
* @version $Id$
* @author Bobby Allen - ballen@bobbyallen.me
* @copyright (c) 2008-2014 ZPanel Group - http://www.zpanelcp.com/
* @license http://opensource.org/licenses/gpl-3.0.html GNU Public License v3
*
* This program (ZPanel) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*/
class module_controller extends ctrl_module
{

   static $error;
   static $alreadyexists;
   static $blank;
   static $badname;
   static $invalidPath;
   static $ok;
   static $delete;
   static $reset;
   static $create;

   /**
    * The 'worker' methods.
    */
   static function ListClients($uid)
   {
       global $zdbh;
       $sql = "SELECT * FROM x_ftpaccounts WHERE ft_acc_fk=:userid AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $uid);
       $numrows->execute();

       if ($numrows->fetchColumn() <> 0) {
           $sql = $zdbh->prepare($sql);
           $res = array();
           $sql->bindParam(':userid', $uid);
           $sql->execute();
           while ($rowclients = $sql->fetch()) {
               $res[] = array('id' => $rowclients['ft_id_pk'],
                   'directory' => runtime_xss::xssClean($rowclients['ft_directory_vc']),
                   'access' => runtime_xss::xssClean($rowclients['ft_access_vc']),
                   'password' => runtime_xss::xssClean($rowclients['ft_password_vc']),
                   'username' => runtime_xss::xssClean($rowclients['ft_user_vc']));
           }
           return $res;
       } else {
           return false;
       }
   }

   static function ListCurrentClient($uid)
   {
       global $zdbh;
       $sql = "SELECT * FROM x_ftpaccounts WHERE ft_id_pk=:userid AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $uid);
       $numrows->execute();

       if ($numrows->fetchColumn() <> 0) {
           $sql = $zdbh->prepare($sql);
           $sql->bindParam(':userid', $uid);
           $res = array();
           $sql->execute();
           while ($rowclients = $sql->fetch()) {
               $res[] = array('id' => $rowclients['ft_id_pk'],
                   'directory' => runtime_xss::xssClean($rowclients['ft_directory_vc']),
                   'access' => runtime_xss::xssClean($rowclients['ft_access_vc']),
                   'password' => runtime_xss::xssClean($rowclients['ft_password_vc']),
                   'username' => runtime_xss::xssClean($rowclients['ft_user_vc']));
           }
           return $res;
       } else {
           return false;
       }
   }

   static function ListMasterDirs($uid)
   {
       $currentuser = ctrl_users::GetUserDetail($uid);
       $res = array();
       $handle = @opendir(ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . "");
       $chkdir = ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . "/";
       if (!$handle) {
           // Log an error as the folder cannot be opened...
       } else {
           while ($file = @readdir($handle)) {
               if ($file != '.' && $file != '..' && $file != '_errorpages') {
                   if (is_dir($chkdir . $file)) {
                       $res[] = array('domains' => runtime_xss::xssClean($file));
                   }
               }
           }
           closedir($handle);
       }
       return $res;
   }

   static function ListDomainDirs($uid)
   {
       $currentuser = ctrl_users::GetUserDetail($uid);
       $res = array();
       $handle = @opendir(ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . "/public_html");
       $chkdir = ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . "/public_html/";
       if (!$handle) {
           // Log an error as the folder cannot be opened...
       } else {
           while ($file = @readdir($handle)) {
               if ($file != "." && $file != ".." && $file != "_errorpages") {
                   if (is_dir($chkdir . $file)) {
                       $res[] = array('domains' => runtime_xss::xssClean($file));
                   }
               }
           }
           closedir($handle);
       }
       return $res;
   }

   static function ExecuteResetPassword($ft_id_pk, $password)
   {
       global $zdbh;
       global $controller;

       // Verify if Current user can Edit FTP Account.
       $currentuser = ctrl_users::GetUserDetail($uid);

       $sql = "SELECT * FROM x_ftpaccounts WHERE ft_acc_fk=:userid AND ft_id_pk=:editedUsrID AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $currentuser['userid']);
       $numrows->bindParam(':editedUsrID', $ft_id_pk);
       $numrows->execute();

       if( $numrows->rowCount() == 0 ) {
           return;
       }

       // Change User Password
       runtime_hook::Execute('OnBeforeResetFTPPassword');
       $rowftpsql = "SELECT * FROM x_ftpaccounts WHERE ft_id_pk=:ftIdPk";
       $rowftpfind = $zdbh->prepare($rowftpsql);
       $rowftpfind->bindParam(':ftIdPk', $ft_id_pk);
       $rowftpfind->execute();
       $rowftp = $rowftpfind->fetch();

       $sql = $zdbh->prepare("UPDATE x_ftpaccounts SET ft_password_vc=:password WHERE ft_id_pk=:ftpid");
       $sql->bindParam(':password', $password);
       $sql->bindParam(':ftpid', $ft_id_pk);
       $sql->execute();

       self::$reset = true;
       // Include FTP server specific file here.
       $FtpModuleFile = 'modules/' . $controller->GetControllerRequest('URL', 'module') . '/code/' . ctrl_options::GetSystemOption('ftp_php');
       if (file_exists($FtpModuleFile)) {
           include($FtpModuleFile);
       }
       $retval = TRUE;
       runtime_hook::Execute('OnAfterResetFTPPassword');
       return $retval;
   }

   static function ExecuteCreateFTP($uid, $username, $password, $destination, $domainDestination, $access_type, $home)
   {
       global $zdbh;
       global $controller;
       $currentuser = ctrl_users::GetUserDetail($uid);
 $username = $currentuser['username'] . '_' . $username;
       runtime_hook::Execute('OnBeforeCreateFTPAccount');
       if (fs_director::CheckForEmptyValue(self::CheckForErrors($username, $password))) {
           // Check to see if its a new home directory or use a current one...
           if ($home == 1) {
               $homedirectory_to_use = '/' . str_replace('.', '_', $username);
               $full_path = ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . $homedirectory_to_use . '/';
               // Create the new home directory... (If it doesnt already exist.)
               if (!file_exists($full_path)) {
                   @mkdir($full_path, 777);
                   @chmod($full_path, 0777);
               }
           } else if ($home == 3) {
               $homedirectory_to_use = '/' . $domainDestination;
           } else {
               $homedirectory_to_use = '/' . $destination;
           }

           // Check if Path is inside user home directory.
           $full_homeDir  = ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'] . $homedirectory_to_use . '/';
           $baseDir       = ctrl_options::GetSystemOption('hosted_dir') . $currentuser['username'];
           $realPath      = realpath($full_homeDir);

           if( 0 !== strpos($realPath, $baseDir))
           {
               self::$invalidPath = true;
               return false;
           }

           $sql = $zdbh->prepare("INSERT INTO x_ftpaccounts (ft_acc_fk, ft_user_vc, ft_directory_vc, ft_access_vc, ft_password_vc, ft_created_ts) VALUES (:userid, :username, :homedir, :accesstype, :password, :time)");
           $sql->bindParam(':userid', $currentuser['userid']);
           $sql->bindParam(':username', $username);
           $sql->bindParam(':homedir', $homedirectory_to_use);
           $sql->bindParam(':accesstype', $access_type);
           $sql->bindParam(':password', $password);
           $sql->bindParam(':time', time());
           $sql->execute();
           self::$create = true;
           // Include FTP server specific file here.
           $FtpModuleFile = 'modules/' . $controller->GetControllerRequest('URL', 'module') . '/code/' . ctrl_options::GetSystemOption('ftp_php');
           if (file_exists($FtpModuleFile)) {
               include($FtpModuleFile);
           }
           runtime_hook::Execute('OnAfterCreateFTPAccount');
           return true;
       }
       return false;
   }

   static function CheckForErrors($username, $password)
   {
       global $zdbh;
       $retval = FALSE;
       // Check to make sure the username and password is not blank before we go any further...
       if ($username == '' || $password == '') {
           self::$blank = TRUE;
           $retval = TRUE;
       }
       // Check for invalid username
       if (!self::IsValidUserName($username)) {
           self::$badname = true;
           $retval = TRUE;
       }
       // Check to make sure the cron is not a duplicate...
       $sql = "SELECT COUNT(*) FROM x_ftpaccounts WHERE ft_user_vc=:userid AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $username);

       if ($numrows->execute()) {
           if ($numrows->fetchColumn() <> 0) {
               self::$alreadyexists = TRUE;
               $retval = TRUE;
           }
       }
       return $retval;
   }

   static function IsValidUserName($username)
   {
       return preg_match('/^[a-z\d_][a-z\d_-]{0,62}$/i', $username) || preg_match('/-$/', $username) == 1;
   }

   static function ExecuteDeleteFTP($ft_id_pk, $uid = null)
   {
       global $zdbh;
       global $controller;

       // Verify if Current user can Edit FTP Account.
       $currentuser = ctrl_users::GetUserDetail($uid);

       $sql = "SELECT * FROM x_ftpaccounts WHERE ft_acc_fk=:userid AND ft_id_pk=:editedUsrID AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $currentuser['userid']);
       $numrows->bindParam(':editedUsrID', $ft_id_pk);
       $numrows->execute();

       if( $numrows->rowCount() == 0 ) {
           return;
       }

       // Delete User
       runtime_hook::Execute('OnBeforeDeleteFTPAccount');
       $rowftpsql = "SELECT * FROM x_ftpaccounts WHERE ft_id_pk=:ftIdPk";
       $rowftpfind = $zdbh->prepare($rowftpsql);
       $rowftpfind->bindParam(':ftIdPk', $ft_id_pk);
       $rowftpfind->execute();
       $rowftp = $rowftpfind->fetch();

       $sql = $zdbh->prepare("UPDATE x_ftpaccounts SET ft_deleted_ts=:time WHERE ft_id_pk=:ftpid");
       $sql->bindParam(':ftpid', $ft_id_pk);
       $sql->bindParam(':time', $ft_id_pk);
       $sql->execute();
       self::$delete = true;
       // Include FTP server specific file here.
       $FtpModuleFile = 'modules/' . $controller->GetControllerRequest('URL', 'module') . '/code/' . ctrl_options::GetSystemOption('ftp_php');
       if (file_exists($FtpModuleFile)) {
           include($FtpModuleFile);
       }
       $retval = TRUE;
       runtime_hook::Execute('OnAfterDeleteFTPAccount');
       return $retval;
   }

   /**
    * End 'worker' methods.
    */

   /**
    * Webinterface sudo methods.
    */
   static function doCreateFTP()
   {
       global $controller;
       runtime_csfr::Protect();
       $currentuser = ctrl_users::GetUserDetail();
       $formvars = $controller->GetAllControllerRequests('FORM');
       if (self::ExecuteCreateFTP($currentuser['userid'], $formvars['inFTPUsername'], $formvars['inPassword'], $formvars['inDestination'], $formvars['inDomainDestination'], $formvars['inAccess'], $formvars['inAutoHome'])) {
           self::$ok = true;
           return true;
       } else {
           return false;
       }
   }

   static function doDeleteFTP()
   {
       global $controller;
       runtime_csfr::Protect();
       $formvars = $controller->GetAllControllerRequests('FORM');
       if (self::ExecuteDeleteFTP($formvars['inDelete']))
           self::$ok = true;
       return true;
   }

   static function doResetPassword()
   {
       global $controller;
       runtime_csfr::Protect();
       $formvars = $controller->GetAllControllerRequests('FORM');
       if (self::ExecuteResetPassword($formvars['inReset'], $formvars['inPassword']))
           self::$ok = true;
       return true;
   }

   static function getClientList()
   {
       $currentuser = ctrl_users::GetUserDetail();
       $clientlist = self::ListClients($currentuser['userid']);
       return (!fs_director::CheckForEmptyValue($clientlist)) ? $clientlist : false;
   }

   static function getDomainDirsList()
   {
       $currentuser = ctrl_users::GetUserDetail();
       $domaindirectories = self::ListDomainDirs($currentuser['userid']);
       return (!fs_director::CheckForEmptyValue($domaindirectories)) ? $domaindirectories : false;
   }

   static function getMasterDirsList()
   {
       $currentuser = ctrl_users::GetUserDetail();
       $domaindirectories = self::ListMasterDirs($currentuser['userid']);
       return (!fs_director::CheckForEmptyValue($domaindirectories)) ? $domaindirectories : false;
   }

   static function doEditFTP()
   {
       global $controller;
       runtime_csfr::Protect();
       $currentuser = ctrl_users::GetUserDetail();
       $formvars = $controller->GetAllControllerRequests('FORM');
       foreach (self::ListClients($currentuser['userid']) as $row) {
           if (isset($formvars['inDelete_' . $row['id'] . ''])) {
               header("location: ./?module=" . $controller->GetCurrentModule() . "&show=Delete&other=" . $row['id']);
               exit;
           }
           if (isset($formvars['inReset_' . $row['id'] . ''])) {
               header("location: ./?module=" . $controller->GetCurrentModule() . "&show=Edit&other=" . $row['id']);
               exit;
           }
       }
       return;
   }

   static function getisCreateFTP()
   {
       global $controller;
       $urlvars = $controller->GetAllControllerRequests('URL');
       return !isset($urlvars['show']);
   }

   static function getisDeleteFTP($uid = null)
   {
       global $controller;
       global $zdbh;

       $urlvars = $controller->GetAllControllerRequests('URL');

       // Verify if Current user can Edit FTP Account.
       // This shall avoid exposing ftp username based on ID lookups.
       $currentuser = ctrl_users::GetUserDetail($uid);

       $sql = " SELECT * FROM x_ftpaccounts WHERE ft_acc_fk=:userid AND ft_id_pk=:editedUsrID AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $currentuser['userid']);
       $numrows->bindParam(':editedUsrID', $urlvars['other']);
       $numrows->execute();

       if( $numrows->rowCount() == 0 ) {
           return;
       }

       // Show User Info
       return (isset($urlvars['show'])) && ($urlvars['show'] == "Delete");
   }

   static function getisEditFTP($uid = null)
   {
       global $controller;
       global $zdbh;

       $urlvars     = $controller->GetAllControllerRequests('URL');

       // Verify if Current user can Edit FTP Account.
       // This shall avoid exposing ftp username based on ID lookups.
       $currentuser = ctrl_users::GetUserDetail($uid);

       $sql = " SELECT * FROM x_ftpaccounts WHERE ft_acc_fk=:userid AND ft_id_pk=:editedUsrID AND ft_deleted_ts IS NULL";
       $numrows = $zdbh->prepare($sql);
       $numrows->bindParam(':userid', $currentuser['userid']);
       $numrows->bindParam(':editedUsrID', $urlvars['other']);
       $numrows->execute();

       if( $numrows->rowCount() == 0 ) {
           return;
       }

       // Show User Info
       return (isset($urlvars['show'])) && ($urlvars['show'] == "Edit");
   }

   static function getEditCurrentName()
   {
       global $controller;
       if ($controller->GetControllerRequest('URL', 'other')) {
           $current = self::ListCurrentClient($controller->GetControllerRequest('URL', 'other'));
           return $current[0]['username'];
       } else {
           return "";
       }
   }

   static function getEditCurrentID()
   {
       global $controller;
       if ($controller->GetControllerRequest('URL', 'other')) {
           $current = self::ListCurrentClient($controller->GetControllerRequest('URL', 'other'));
           return $current[0]['id'];
       } else {
           return "";
       }
   }

   static function getQuotaLimit()
   {
       $currentuser = ctrl_users::GetUserDetail();
       return ($currentuser['ftpaccountsquota'] < 0 ) or //-1 = unlimited
               ($currentuser['ftpaccountsquota'] > ctrl_users::GetQuotaUsages('ftpaccounts', $currentuser['userid']));
   }

   static function getFTPUsagepChart()
   {
   global $controller;
   $currentuser = ctrl_users::GetUserDetail();
   $maximum = $currentuser['ftpaccountsquota'];
   if ($maximum < 0) { //-1 = unlimited
           if (file_exists(ui_tpl_assetfolderpath::Template() . 'img/misc/unlimited.png')) {
       return '<img src="' . ui_tpl_assetfolderpath::Template() . 'img/misc/unlimited.png" alt="' . ui_language::translate('Unlimited') . '"/>';
     } else {
       return '<img src="modules/' . $controller->GetControllerRequest('URL', 'module') . '/assets/unlimited.png" alt="' . ui_language::translate('Unlimited') . '"/>';
     }
       } else {
           $used = ctrl_users::GetQuotaUsages('ftpaccounts', $currentuser['userid']);
           $free = max($maximum - $used, 0);
           return '<img src="etc/lib/pChart2/sentora/z3DPie.php?score=' . $free . '::' . $used
                   . '&labels=Free: ' . $free . '::Used: ' . $used
                   . '&legendfont=verdana&legendfontsize=8&imagesize=240::190&chartsize=120::90&radius=100&legendsize=150::160"'
                   . ' alt="' . ui_language::translate('Pie chart') . '"/>';
       }
   }

   static function getResult()
   {
       if (!fs_director::CheckForEmptyValue(self::$blank)) {
           return ui_sysmessage::shout(ui_language::translate("You must enter a valid username and password to create your FTP account."), "zannounceerror");
       }
       if (!fs_director::CheckForEmptyValue(self::$alreadyexists)) {
           return ui_sysmessage::shout(ui_language::translate("An FTP account with that name already exists."), "zannounceerror");
       }
       if (!fs_director::CheckForEmptyValue(self::$error)) {
           return ui_sysmessage::shout(ui_language::translate("There was an error updating your FTP accounts."), "zannounceerror");
       }
       if (!fs_director::CheckForEmptyValue(self::$badname)) {
           return ui_sysmessage::shout(ui_language::translate("Your ftp account name is not valid. Please enter a valid ftp account name."), "zannounceerror");
       }
       if (!fs_director::CheckForEmptyValue(self::$invalidPath)) {
           return ui_sysmessage::shout(ui_language::translate("Invalid Folder."), "zannounceok");
       }
       if (!fs_director::CheckForEmptyValue(self::$ok)) {
           return ui_sysmessage::shout(ui_language::translate("FTP accounts updated successfully."), "zannounceok");
       }
       return;
   }

   /**
    * Webinterface sudo methods.
    */
}

You should now find the module works, but there is also another issue with the FTP management page. The javascript and html code is a bit mixed up, so the "show/hide" passwords button doesn't work properly. This is the code I use for module.zpm, so you might want to replace the contents of that file with this code:


Code:
<div class="zmodule_content panel" id="zmodule_header_<@ ModuleName @>">
   <div class="panel-heading">
       <img src="<@ ModuleIcon @>" width="35" height="35" border="0" alt="<@ ModuleName @>">

       <div class="zmodule_title">
           <@ ModuleName @>
       </div>

       <div class="zmodule_desc" id="zmodule_desc_<@ ModuleName @>"><@ ModuleDesc @></div>

   </div>

   <@ Result @>

   <% if isDeleteFTP %>
   <div class="zform_wrapper alert alert-danger">
       <h2><: Delete FTP account :>: <@ EditCurrentName @> ?</h2>
       <p><: Please confirm that you want to delete this FTP account. :></p>
       <form action="./?module=ftp_management&action=DeleteFTP" method="post">
           <table class="none" cellpadding="0" cellspacing="0">
               <tr>
                   <td colspan="2" align="right">
                       <input type="hidden" name="inDelete" value="<@ EditCurrentID @>">
                       <button class="button-loader delete btn btn-danger" type="submit" ><: Delete :></button>
                       <button class="button-loader btn btn-default" type="button" onclick="window.location.href='./?module=ftp_management';return false;"><: Cancel :></button>
                   </td>
               </tr>
           </table>
           <@ CSFR_Tag @>
       </form>
   </div>
   <% endif %>

   <% if isEditFTP %>
   <div class="zform_wrapper">
       <h2><: Reset FTP Password for user :>: <@ EditCurrentName @></h2>
       <form action="./?module=ftp_management&action=ResetPassword" method="post">
           <table class="table table-striped">
               <tr>
                   <th><: Username :>:</th>
                   <td><@ EditCurrentName @></td>
                   <td></td>
               </tr>
               <tr>
                   <th><: New password :>:</th>
                   <td><input name="inPassword" type="text" id="input-password" size="30" maxlength="50" /></td>
                   <td><button class="button-loader btn btn-default" type="submit" name="inReset" id="button" value="<@ EditCurrentID @>"><: Reset Password :>
                       </button>
                       <button class="button-loader btn btn-default" type="button" onclick="window.location.href='./?module=ftp_management';return false;"><: Cancel :></button></td>
               </tr>
               <tr>
                   <th></th>
                   <td><a href="#" class="link-password" id="generate"><: Generate Password :></a></td>
                   <td></td>
               </tr>
           </table>
           <@ CSFR_Tag @>
       </form>
   </div>
   <% endif %>

   <div class="zgrid_wrapper">
       <h2><: Current FTP accounts :></h2>
       <% if ClientList %>
       <form action="./?module=ftp_management&action=EditFTP" method="post">
           <table class="table table-striped">
<colgroup>
<col>
<col>
<col>
<col>
<col>
</colgroup>
               <tr>
                   <th><: Account name :></th>
                   <th><: Home directory :></th>
                   <th><: Permission :></th>
                   <th><: Password :></th>
                   <th><button class="button btn btn-default" id="btn_sh">Show Passwords</button></th>
               </tr>
               <% loop ClientList %>
               <tr>
                   <td><& username &></td>
                   <td><& directory &></td>
                   <td><& access &></td>
                   <td><span class="passRow" style="visibility: collapse"><& password &></span></td>
                   <td>
                       <button class="button-loader btn btn-default" type="submit" name="inReset_<& id &>" id="button" value="inReset_<& id &>"><: Reset Password :></button>
                       <button class="button-loader delete btn btn-danger" type="submit" name="inDelete_<& id &>" id="button" value="inDelete_<& id &>"><: Delete :></button>
                   </td>
               </tr>
               <% endloop %>
           </table>
           <@ CSFR_Tag @>
       </form>
       <% else %>
       <: You do not have any FTP Accounts setup. Create an FTP account using the form below. :>
       <% endif %>
   </div>

   <% if isCreateFTP %>
   <div class="zform_wrapper">
       <table class="none" width="100%" cellborder="0" cellspacing="0"><tr valign="top">
           <tr valign="top">
               <td>
                   <h2><: Create a new FTP Account :></h2>
                   <% if QuotaLimit %>
                   <form action="./?module=ftp_management&action=CreateFTP" method="post">
                       <table class="table table-striped">
                           <tr>
                               <th nowrap="nowrap"><: Username :>:</th>
                               <td><# ui_tpl_username #>_<input name="inFTPUsername" type="text" id="inFTPUsername" size="30" value="" maxlength="50"/></td>
                           </tr>
                           <tr>
                               <th><: Password :>:</th>
                               <td><input name="inPassword" type="password" id="inPassword" size="30" maxlength="50" /></td>
                           </tr>
                           <tr>
                               <th nowrap="nowrap"><: Access type :>:</th>
                               <td><select name="inAccess" size="1">
                                       <option value="RO" selected="selected"><: Read-only :></option>
                                       <option value="WO"><: Write-only :></option>
                                       <option value="RW"><: Full access :></option>
                                   </select></td>
                           </tr>
                           <tr>
                               <th nowrap="nowrap"><: Home directory :>:</th>
                               <td><input name="inAutoHome" type="radio" id="inAutoHome" value="1" onclick="hide_div('showmasterselect')&hide_div('showdomainselect');" CHECKED />&nbsp;<: Create a new home directory :></td>
                           </tr>
                           <tr>
                               <th>&nbsp;</th>
                               <td><input name="inAutoHome" type="radio" id="inAutoHome" value="2" onclick="show_div('showmasterselect')&hide_div('showdomainselect');" />&nbsp;<: Set Master home directory :></td>
                           </tr>
                           <tr>
                               <th>&nbsp;</th>
                               <td>
                                   <div id="showmasterselect" style="display:none;">
                                       <select name="inDestination" id="inDestination">
                                           <option value="">/ (root)</option>
                                           <% loop MasterDirsList %>
                                           <option value="<& domains &>">/<& domains &></option>
                                           <% endloop %>
                                       </select>
                                   </div>
                               </td>
                           </tr>
                           <tr>
                               <th>&nbsp;</th>
                               <td><input name="inAutoHome" type="radio" id="inAutoHome" value="3" onclick="show_div('showdomainselect')&hide_div('showmasterselect');" />&nbsp;<: Use Domain directory :></td>
                           </tr>
                           <tr>
                               <th>&nbsp;</th>
                               <td>
                                   <div id="showdomainselect" style="display:none;">
                                       <select name="inDomainDestination" id="inDomainDestination">
                                           <option value="">/ (root)</option>
                                           <% loop DomainDirsList %>
                                           <option value="public_html/<& domains &>">/<& domains &></option>
                                           <% endloop %>
                                       </select>
                                   </div>
                               </td>
                           </tr>
                           <tr>
                               <th colspan="2" align="right">
                                   <button class="button-loader btn btn-primary" type="submit" name="inSubmit" id="inSubmit" value=""><: Create :></button></th>
                           </tr>
                       </table>
                       <@ CSFR_Tag @>
                   </form>
                   <% else %>
                   <: You have reached your FTP account limit! :>
                   <% endif %>
               </td>
               <td align="right"><@ FTPUsagepChart @></td>
           </tr>
       </table>
   </div>
   <% endif %>

</div>

<script type="text/javascript">
   <!--
   function show_div(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'none')
           e.style.display = 'block';
   }
   //-->
</script>
<script type="text/javascript">
   <!--
   function hide_div(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'block')
           e.style.display = 'none';
   }
   //-->
</script>
<script type="text/JavaScript">
   $.extend({
       password: function (length, special) {
           var iteration = 0;
           var password = "";
           var randomNumber;
           if(special == undefined){
               var special = false;
           }
           while(iteration < length){
               randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33;
               if(!special){
                   if ((randomNumber >=33) && (randomNumber <=47)) { continue; }
                   if ((randomNumber >=58) && (randomNumber <=64)) { continue; }
                   if ((randomNumber >=91) && (randomNumber <=96)) { continue; }
                   if ((randomNumber >=123) && (randomNumber <=126)) { continue; }
               }
               iteration++;
               password += String.fromCharCode(randomNumber);
           }
           return password;
       }
   });
   $(document).ready(function() {
var ShowPass = false;
       $('.link-password').click(function(e){
           linkId = $(this).attr('id');
           if (linkId == 'generate'){
               password = $.password(9,false);
               $('#input-password').val(password);
           }
           e.preventDefault();
       });
$('#btn_sh').click(function(e){
 if (!ShowPass)
 {
 $('.passRow').css({'visibility': 'visible'});
 $('#btn_sh').html('Hide passwords');
 ShowPass = true;
 }
 else
 {
 $('.passRow').css({'visibility': 'collapse'});
 $('#btn_sh').html('Show passwords');
 ShowPass = false;
 }
 e.preventDefault();
});

 
   });
</script>

If you're a bit unsure, make backups of your existing files first (which you already have done by posting the code for them in this thread).

Let me know how you get on and if this fixes the FTP module.

Keith.
Reply
Thanks given by: edermcastro , speedypete202
#5
[Not Solved] RE: Can't see anything on FTP Accounts function
Keith,

I appreciate it's a dated post now but this solution worked a treat for me!

Thanks
Reply
Thanks given by:
#6
[Not Solved] RE: Can't see anything on FTP Accounts function
(02-12-2019, 12:32 PM)speedypete202 Wrote: Keith,

I appreciate it's a dated post now but this solution worked a treat for me!

Thanks

It was only 3 months ago so not too dated... Wink

Glad it was of some help.

Keith.
Reply
Thanks given by:


Possibly Related Threads...
Thread Author Replies Views Last Post
Accounts being created in /var instead of /home Bikerman 1 1,044 07-04-2018, 02:26 AM
Last Post: TGates
FTP accounts Permission problem thehosterx 5 2,260 12-28-2017, 02:51 AM
Last Post: thehosterx
FTP Accounts To One Specific Folder sathish2009 4 3,623 11-22-2016, 05:09 AM
Last Post: TGates

Forum Jump:


Users browsing this thread: 1 Guest(s)