2013-03-07 100 views
2

即時通訊使用Joomla 3,我希望能夠通過sql或csv批量導入約500個用戶。我一直在尋找一個擴展來做到這一點,但我只能找到版本2.5的解決方案,它不會安裝到版本3中。Joomla 3批量用戶導入

基本上我正在尋找的是描述或某種架構查看用戶如何添加到joomla 3數據庫。

感謝,

邁克爾

回答

-1

Joomla是一個偉大的計劃。儘管如此,我仍然推薦2.5,因爲它有更多的模塊,並且支持得更好。 3仍然有錯誤。但祝你好運,我希望你找到你的答案,贏家!

你太棒了!

+0

Joomla是一個偉大的計劃。儘管如此,我仍然推薦2.5,因爲它有更多的模塊,並且支持得更好。 3仍然有錯誤。但祝你好運,我希望你找到你的答案,贏家! 你太棒了! – machiavelli 2013-03-07 01:56:02

0

我也找不到它,所以我更新了爲Joomla 1.5編寫的PHP腳本,以處理新的數據庫模式。

<?php 

// Handle form upload 
if(isset($_POST['import'])) 
    { 

    $mysql_host    = trim($_POST['mysql_host']); 
    $mysql_user    = trim($_POST['mysql_username']); 
    $mysql_password   = trim($_POST['mysql_password']); 
    $mysql_schema   = trim($_POST['mysql_schema']); 
    $table_prefix   = trim($_POST['table_prefix']); 

    // Validate MySQL details  
    if(!mysql_connect($mysql_host, $mysql_user, $mysql_password) || !mysql_select_db($mysql_schema)) { 
     echo 'Supplied MySQL details were incorrect - aborting'; 
     return; 
     } 

     // set tablenames 
     $tb_users = $table_prefix . 'users'; 
     $tb_usergroups = $table_prefix . 'usergroups'; 
     $tb_user_usergroup_map = $table_prefix . 'user_usergroup_map'; 

     // Validate File Name 
     if($_FILES["csv"]["error"] != 0) { 
      printf('Invalid file name: "%s" - Error code "%s" <br />', $_FILES['csv']['tmp_name'], $_FILES["csv"]["error"]); 
      die('<strong>Upload aborted...</strong><br />'); 
     } else { 
      printf('Importing the following csv file<br /> 
        File: "%s"<br /> 
        Size: "%s" bytes<br />', $_FILES['csv']['name'], $_FILES['csv']['size']); 
     } 

     // open cvs file 
     $fp = fopen($_FILES['csv']['tmp_name'], 'r'); 

     // validate data 
     $valid_data = true; 
     while($user = fgetcsv($fp)) { 

      // Verify name 
      if(!isset($user[0])) { 
       display_user('<br /><strong>ERROR!!! Invalid Name </strong><br />', $user); 
       $valid_data = false; 
      } elseif($user[0] == '') { 
       display_user('<br /><strong>ERROR!!! Invalid Name </strong><br />', $user); 
       $valid_data = false; 
       } 

      // Verify username 
      if(!isset($user[1])) { 
       display_user('<br /><strong>ERROR!!! Invalid username </strong><br />', $user); 
       $valid_data = false; 
      } elseif($user[1] == '') { 
       display_user('<br /><strong>ERROR!!! Invalid username </strong><br />', $user); 
       $valid_data = false; 
      } 

      // Verify email 
      if(!isset($user[2])) { 
       display_user('<br /><strong>ERROR!!! Invalid email </strong><br />', $user); 
       $valid_data = false; 
      } elseif($user[2] == '') { 
       display_user('<br /><strong>ERROR!!! Invalid email </strong><br />', $user); 
       $valid_data = false; 
      } 

      // Verify Password 
      if(!isset($user[3])) { 
       display_user('<br /><strong>ERROR!!! Invalid password </strong><br />', $user); 
       $valid_data = false; 
      } elseif($user[3] == '') { 
       display_user('<br /><strong>ERROR!!! Invalid password </strong><br />', $user); 
       $valid_data = false; 
      } 

      // Verify usergroup 
      if(!isset($user[4])) { 
       display_user('<br /><strong>ERROR!!! Invalid usergroup </strong><br />', $user); 
       $valid_data = false; 
      } elseif($user[4] == '') { 
       display_user('<br /><strong>ERROR!!! Invalid usergroup </strong><br />', $user); 
       $valid_data = false; 
      } 

      // Check duplicate username 
      $sql = ' 
        SELECT COUNT(*) AS duplicate_username 
        FROM '.$tb_users.' 
        WHERE username = "'.$user[1].'"'; 

      $result = mysql_query($sql); 
      if (!$result) { 
       die('Invalid query: ' . mysql_error()); 
      } 

      while ($row = mysql_fetch_assoc($result)) { 
       $duplicate_users = $row['duplicate_username']; 
      } 

      if ($duplicate_users > 0) { 
       display_user('<br /><strong>ERROR!!! Duplicate username </strong><br />', $user); 
        $valid_data = false; 
      } 

      // Check duplicate email 
      $sql = ' 
        SELECT COUNT(*) AS duplicate_email 
        FROM '.$tb_users.' 
        WHERE email = "'.$user[2].'"'; 

      $result = mysql_query($sql); 
      if (!$result) { 
       die('Invalid query: ' . mysql_error()); 
      } 

      while ($row = mysql_fetch_assoc($result)) { 
       $duplicate_users = $row['duplicate_email']; 
      } 

      if ($duplicate_users > 0) { 
       display_user('<br /><strong>ERROR!!! Duplicate email </strong><br />', $user); 
        $valid_data = false; 
      } 

    } 


    if(!$valid_data) { 
     die('<strong>CSV file contains errors. Upload Aborted!</strong>'); 
    } else { 
     printf('<strong>Data is valid. Uploading users...</strong><br />'); 
    } 


    // Count initial users 
    $sql = ' 
      SELECT COUNT(*) AS initial_users 
      FROM '.$tb_users.' 
      ' 
     ; 

    $result = mysql_query($sql); 
    if (!$result) { 
     die('Invalid query: ' . mysql_error()); 
    } 

    while ($row = mysql_fetch_assoc($result)) { 
     $initial_users = $row['initial_users']; 
    } 



    // Load users 
    // open cvs file 
    $fp = fopen($_FILES['csv']['tmp_name'], 'r'); 

    $counter = 0; 
    while($user = fgetcsv($fp)) { 


     // Check duplicate username 
     $valid_username = true; 
     $sql = ' 
       SELECT COUNT(*) AS duplicate_username 
       FROM '.$tb_users.' 
       WHERE username = "'.$user[1].'"'; 

     $result = mysql_query($sql); 
     if (!$result) { 
      die('Invalid query: ' . mysql_error()); 
     } 

      while ($row = mysql_fetch_assoc($result)) { 
      $duplicate_username = $row['duplicate_username']; 
     } 

     if ($duplicate_users > 0) { 
      display_user('<br /><strong>ERROR!!! Duplicate username found in database</strong><br />', $user); 
       $valid_username = false; 
     } 

     // Check duplicate email 
     $valid_mail = true; 
     $sql = ' 
       SELECT COUNT(*) AS duplicate_email 
       FROM '.$tb_users.' 
       WHERE email = "'.$user[2].'"'; 

     $result = mysql_query($sql); 
     if (!$result) { 
      die('Invalid query: ' . mysql_error()); 
     } 

     while ($row = mysql_fetch_assoc($result)) { 
      $duplicate_users = $row['duplicate_email']; 
     } 

     if ($duplicate_users > 0) { 
      display_user('<br /><strong>ERROR!!! Duplicate email found in database</strong><br />', $user); 
       $valid_mail = false; 
     } 

     if(!$valid_username or !$valid_mail) { 
      printf('<strong>WARNING!!! User not uploaded</strong><br /><br />'); 
     } else { 

      // Upload user 
      display_user('<br />', $user); 


      // Encypt password if required  
      $user_password = isset($_POST['md5_passwords']) ? md5($user[3]) : sql_prep($user[3]); 

      // Insert record into users 
      $sql = " 
       INSERT INTO ".$tb_users." 
       SET 
        name   = '".sql_prep($user[0])."', 
        username  = '".sql_prep($user[1])."', 
        email   = '".sql_prep($user[2])."', 
        password  = '".$user_password."', 
        registerDate = NOW(), 
        activation  = '', 
        params   = '{\"admin_style\":\"\",\"admin_language\":\"\",\"language\":\"\",\"editor\":\"\",\"helpsite\":\"\",\"timezone\":\"\"}', 
        otpKey   = '', 
        otep   = ''     
      "; 

      $result = mysql_query($sql); 
      if (!$result) { 
       die('Invalid query: ' . mysql_error()); 
       } 

      // Retrieve last uploaded user's ID 
      list($user_id) = mysql_fetch_row(mysql_query('SELECT LAST_INSERT_ID()')); 

      printf('Assigned user ID: '.$user_id.'<br />'); 


      // Insert record user_group_map 
      $sql = ' 
        INSERT INTO '.$tb_user_usergroup_map.' 
       SET 
        user_id = '.$user_id.', 
        group_id = '.$user[4].' 
       '; 

      $result = mysql_query($sql); 
      if (!$result) { 
       die('Invalid query: ' . mysql_error()); 
       } 

     echo 'done.<br />'; 
     flush(); 

     } 

     // Update counter 
     $counter++; 

    } 

    // Count final users 
    $sql = ' 
      SELECT COUNT(*) AS final_users 
      FROM '.$tb_users.' 
      ' 
     ; 

    $result = mysql_query($sql); 
    if (!$result) { 
     die('Invalid query: ' . mysql_error()); 
    } 

    while ($row = mysql_fetch_assoc($result)) { 
     $final_users = $row['final_users']; 
    } 


    if(($final_users - $initial_users) == $counter) { 
     echo '<br /><br /><strong>Done. <br /> 
       Uploaded '.$counter.' users </strong>'; 
    } else { 
     echo '<br /><br /><strong>ERROR!!! <br /> 
       Uploaded only some users</strong><br /> 
       Users submitted: '.$counter.'<br /> 
       Users uploaded : '.($final_users - $initial_users); 
    } 


} else { 


    // show upload form 
    ?> 
    <html><head><title>Bulk import users into Joomla 3</title></head><body> 
    <h1>Import Users to Joomla</h1> 
    <p> 
     Use this script to do a bulk import of users into Joomla 1.5.<br /> 
    Upload a CSV file with the following format:<br /> 
    <code> 
     name, username, email, password, group_number 
    </code><br /> 
    Wrap details with commas in them in quotes. 
    </p> 
    <hr /> 
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data"> 
     <input type="hidden" name="import" value="1" /> 
     <table cellpadding="4px"> 
      <tr> 
       <td>CSV File: </td> 
       <td><input type="file" name="csv" /></td> 
      </tr> 
      <tr> 
       <td>MD5 Hash Passwords: </td> 
       <td><input type="checkbox" name="md5_passwords" /><br /><small>*Check this option if the passwords in your CSV are in plain text</small></td> 
      </tr> 
      <tr> 
       <td>Joomla Table Prefix: </td> 
       <td><input type="text" name="table_prefix" value="jos_" /></td> 
      </tr> 
      <tr> 
       <td>Joomla Database Name: </td> 
       <td><input type="text" name="mysql_schema" value="joomla" /></td> 
      </tr> 
      <tr> 
       <td>MySQL Host: </td> 
       <td><input type="text" name="mysql_host" value="localhost" /></td> 
      </tr> 
      <tr> 
       <td>MySQL Username: </td> 
       <td><input type="text" name="mysql_username" value="" /></td> 
      </tr> 
      <tr> 
       <td>MySQL Password: </td> 
       <td><input type="password" name="mysql_password" value="" /></td> 
      </tr> 
      <tr> 
       <td></td> 
       <td><input type="submit" name="submit" value=" Import Users! " /></td> 
      </tr> 
     </table> 
    </form> 
    </body></html> 

    <?php 

} 

function sql_prep($var) { 
    return mysql_real_escape_string($var); 
} 

function display_user($message, $user) { 

    printf($message); 
    printf('Name: "%s" ... ', sql_prep($user[0])); 
    printf(' Username: "%s" ... ', sql_prep($user[1])); 
    printf(' Password: "%s" ... ', sql_prep($user[3])); 
    printf(' Mail: "%s" ... ', sql_prep($user[2])); 
    printf(' Group: "%s" ', sql_prep($user[4])); 
    printf('<br />'); 

    return; 

} 

?>