174 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
						||
<html>
 | 
						||
<head>
 | 
						||
  <title>Module HowTo - File upload</title>
 | 
						||
  <link rel="stylesheet" type="text/css" href="style/layout.css">
 | 
						||
	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico">
 | 
						||
</head>
 | 
						||
<body>
 | 
						||
<div style="text-align: center;">
 | 
						||
<h1>Module HowTo - File upload<br>
 | 
						||
</h1>
 | 
						||
<br>
 | 
						||
<br>
 | 
						||
<div style="text-align: left;"><br>
 | 
						||
<h2>1. Defining upload columns<br>
 | 
						||
</h2>
 | 
						||
If you want to support account creation via file upload you have to
 | 
						||
define columns in the CSV file.<br>
 | 
						||
Each column has an non-translated identifier, a description, help entry
 | 
						||
and several other values.<br>
 | 
						||
<br>
 | 
						||
The upload columns are specified with <span style="font-weight: bold;">get_uploadColumns()</span>
 | 
						||
or <span style="font-weight: bold;">meta['upload_columns']</span>.<br>
 | 
						||
<br>
 | 
						||
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br
 | 
						||
 style="font-weight: bold; text-decoration: underline;">
 | 
						||
<br>
 | 
						||
The <span style="font-style: italic;">ieee802Device</span>
 | 
						||
module has only one attribute and therefore one column: the MAC address.<br>
 | 
						||
<br>
 | 
						||
<table style="width: 100%; text-align: left;" class="mod-code"
 | 
						||
 border="0" cellpadding="2" cellspacing="2">
 | 
						||
  <tbody>
 | 
						||
    <tr>
 | 
						||
      <td style="vertical-align: top;">    /**<br>
 | 
						||
    * Returns meta data that is interpreted by parent
 | 
						||
class<br>
 | 
						||
    *<br>
 | 
						||
    * @return array array with meta data<br>
 | 
						||
    */<br>
 | 
						||
    <span style="font-weight: bold;">function</span>
 | 
						||
get_metaData() {<br>
 | 
						||
        $return = array();<br>
 | 
						||
        // manages host accounts<br>
 | 
						||
   
 | 
						||
    $return["account_types"] = array("host");<br>
 | 
						||
        // upload fields<br>
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
    $return['upload_columns'] = array(</span><br
 | 
						||
 style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
        array(</span><br
 | 
						||
 style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
            'name' =>
 | 
						||
'ieee802Device_mac',</span><br style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
            'description'
 | 
						||
=> _('MAC address'),</span><br style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
            'help' =>
 | 
						||
'mac',</span><br style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
            'example'
 | 
						||
=> '00:01:02:DE:EF:18'</span><br style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">   
 | 
						||
        )</span><br
 | 
						||
 style="color: rgb(255, 0, 0);">
 | 
						||
      <span style="color: rgb(255, 0, 0);">    
 | 
						||
   );</span><br>
 | 
						||
        return $return;<br>
 | 
						||
    }<br>
 | 
						||
      </td>
 | 
						||
    </tr>
 | 
						||
  </tbody>
 | 
						||
</table>
 | 
						||
<br>
 | 
						||
<br>
 | 
						||
<h2>2. Building the accounts<br>
 | 
						||
</h2>
 | 
						||
When the user has uploaded the CSV file the modules have to transform
 | 
						||
the input data to LDAP accounts.<br>
 | 
						||
<br>
 | 
						||
This is done with <span style="font-weight: bold;">build_uploadAccounts()</span>.
 | 
						||
The function gets the input data and a list of LDAP accounts as
 | 
						||
parameter.<br>
 | 
						||
<br>
 | 
						||
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br
 | 
						||
 style="font-weight: bold; text-decoration: underline;">
 | 
						||
<br>
 | 
						||
The <span style="font-style: italic;">ieee802Device</span>
 | 
						||
module has only one LDAP attribute - <span style="font-style: italic;">'macAddress'</span>
 | 
						||
- and the <span style="font-style: italic;">'ieee802Device'</span>
 | 
						||
objectClass which is added to all accounts.<br>
 | 
						||
<br>
 | 
						||
<table style="width: 100%; text-align: left;" class="mod-code"
 | 
						||
 border="0" cellpadding="2" cellspacing="2">
 | 
						||
  <tbody>
 | 
						||
    <tr>
 | 
						||
      <td style="vertical-align: top;">    /**<br>
 | 
						||
    * In this function the LDAP account is built up.<br>
 | 
						||
    *<br>
 | 
						||
    * @param array $rawAccounts list of hash arrays
 | 
						||
(name => value) from user input<br>
 | 
						||
    * @param array $partialAccounts list of hash arrays
 | 
						||
(name => value) which are later added to LDAP<br>
 | 
						||
    * @param array $ids list of IDs for column position
 | 
						||
(e.g. "posixAccount_uid" => 5)<br> 
 | 
						||
			  * @param array $selectedModules list of selected account modules<br>
 | 
						||
    * @return array list of error messages if any<br>
 | 
						||
    */<br>
 | 
						||
    <span style="font-weight: bold;">function</span> <span
 | 
						||
 style="color: rgb(255, 0, 0);">build_uploadAccounts</span>($rawAccounts,
 | 
						||
$ids, &$partialAccounts, $selectedModules) {<br>
 | 
						||
        $messages = array();<br>
 | 
						||
        for ($i = 0; $i <
 | 
						||
sizeof($rawAccounts); $i++) {<br>
 | 
						||
            // add object
 | 
						||
class<br>
 | 
						||
            if
 | 
						||
(!in_array("ieee802Device", $partialAccounts[$i]['objectClass']))
 | 
						||
$partialAccounts[$i]['objectClass'][] = "ieee802Device";<br>
 | 
						||
            // add MACs<br>
 | 
						||
            if
 | 
						||
($rawAccounts[$i][$ids['ieee802Device_mac']] != "") {<br>
 | 
						||
           
 | 
						||
    $macs = explode(',',
 | 
						||
$rawAccounts[$i][$ids['ieee802Device_mac']]);<br>
 | 
						||
           
 | 
						||
    // check format<br>
 | 
						||
           
 | 
						||
    for ($m = 0; $m < sizeof($macs); $m++) {<br>
 | 
						||
           
 | 
						||
        if (get_preg($macs[$m],
 | 
						||
'macAddress')) {<br>
 | 
						||
           
 | 
						||
           
 | 
						||
$partialAccounts[$i]['macAddress'][] = $macs[$m];<br>
 | 
						||
           
 | 
						||
        }<br>
 | 
						||
           
 | 
						||
        else {<br>
 | 
						||
           
 | 
						||
            $errMsg =
 | 
						||
$this->messages['mac'][1];<br>
 | 
						||
           
 | 
						||
           
 | 
						||
array_push($errMsg, array($i));<br>
 | 
						||
           
 | 
						||
            $messages[] =
 | 
						||
$errMsg;<br>
 | 
						||
           
 | 
						||
        }<br>
 | 
						||
           
 | 
						||
    }<br>
 | 
						||
            }<br>
 | 
						||
        }<br>
 | 
						||
        return $messages;<br>
 | 
						||
    }<br>
 | 
						||
      </td>
 | 
						||
    </tr>
 | 
						||
  </tbody>
 | 
						||
</table>
 | 
						||
<br>
 | 
						||
<br>
 | 
						||
<br>
 | 
						||
<br>
 | 
						||
<span style="font-weight: bold;"></span>
 | 
						||
<h2><span style="font-weight: bold;"></span></h2>
 | 
						||
</div>
 | 
						||
</div>
 | 
						||
</body>
 | 
						||
</html>
 |