upload file to server

Questions related to customising nuBuilder Forte with Javascript or PHP.

Re: upload file to server

Postby kev1n » Thu Nov 21, 2019 11:21 pm

Ok - and what should happen if you upload a new file in a row for which you have already uploaded one? Should the previously uploaded file be deleted?
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

Re: upload file to server

Postby kev1n » Thu Nov 21, 2019 11:59 pm

johan wrote:Just when I delete a subrow containing a file.
Than the row is deleted in de sql table.


You can add this code in PHP AS (After Save) event:

Code: Select all
$uploaddir = $_SERVER['DOCUMENT_ROOT']."/libs/upload/documents/";

deleteFiles('sample_files',$uploaddir);  // Replace sample_files with your subform id

function deleteFiles($form, $uploaddir) {
  $o = nuSubformObject($form);
 
  for($i = 0 ; $i < count($o->rows) ; $i++){
     
      $fileid = $o->rows[$i][1];
      $filename = $o->rows[$i][2];
      $delete = $o->rows[$i][3];
      if ($delete == "1") {
         deleteFile($uploaddir . $fileid. "_". $filename);
      }
   }

}


function deleteFile($file)
{
    if (file_exists($file))
    {
        if (! unlink($file))
      {
         nuDebug("Cannot delete the file ".$file);
      }
    } else
   {
      nuDebug("File does not exist ".$file);
   }
}



Modify this part (numbers 1 ... 3). These are the column numbers

Code: Select all
   $fileid = $o->rows[$i][1];
      $filename = $o->rows[$i][2];
      $delete = $o->rows[$i][3];


You can also find them out if you run this PHP code in the AS first. (Replace sample_files with your subform id)
Code: Select all
nuDebug(nuSubformObject('sample_files'));


The you'll find in the debug a log entry like this:


Code: Select all
[0] : stdClass Object
(
    [id] => sample_files
    [foreign_key] => files_main_id
    [primary_key] => files_id
    [object_id] => 5dd0435d0785413
    [table] => files
    [action] => save
    [rows] => Array
        (
            [0] => Array
                (
                    [0] => -1  // this is the first column with the primary key
                    [1] => 1574345421_5dd69acd4e526_5dd69ab2b4db682
                    [2] => Test.pdf
                    [3] => 0 // last column: if delete then 1 else 0
                )
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

Re: upload file to server

Postby johan » Fri Nov 22, 2019 4:58 am

Kev1n

NuDebug returns
$
[0] => -1
[1] => Werken_aan_een_betere_aanpak_van_schulden_SAMvzw_15_april_2019_1_0.pdf
[2] => 1574364113_5dd6e3d1b3004_5da701edb0fb627
[3] => 0


So I've adjusted
$fileid = $o->rows[$i][2];
$filename = $o->rows[$i][1];
$delete = $o->rows[$i][3];


But when I save my form, the file is not deleted.

I've added nudebug(($uploaddir . $fileid. "_". $filename));
This returns
[0] : /var/www/html/documents/_[0] : /var/www/htmllibs/upload/documents/_


Johan
johan
 
Posts: 306
Joined: Sun Feb 27, 2011 7:46 pm
Location: Belgium

Re: upload file to server

Postby kev1n » Fri Nov 22, 2019 11:33 am

johan wrote:NuDebug returns
$
[0] => -1
[1] => Werken_aan_een_betere_aanpak_van_schulden_SAMvzw_15_april_2019_1_0.pdf
[2] => 1574364113_5dd6e3d1b3004_5da701edb0fb627
[3] => 0




Could you show the full output of nudebug? And also the PHP code if you have changed anything.
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

Re: upload file to server

Postby johan » Fri Nov 22, 2019 4:54 pm

Kev1n

Here's the full debug
[0] : stdClass Object
(
[id] => blagen
[foreign_key] => bl_reg_id
[primary_key] => bl_id
[object_id] => 5dd16c9f90f9981
[table] => zzzsys_bijlage
[action] => save
[rows] => Array
(
[0] => Array
(
[0] => 5dd789fd50cf86d
[1] => Werken_aan_een_betere_aanpak_van_schulden_SAMvzw_15_april_2019_1_0.pdf
[2] => 1574406649_5dd789f949bf1_5da701edb0fb627
[3] => 1
)

[1] => Array
(
[0] => -1
[1] =>
[2] =>
[3] => 1
)

)

[columns] =>
[chartData] =>
[chartDataPivot] =>
[edited] => Array
(
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
)

[1] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
)

)

[deleted] => Array
(
[0] => 1
[1] => 1
)

[fields] => Array
(
[0] => ID
[1] => bl_file_name
[2] => bl_file_id
[3] => nuDelete
)

)



and the php
Code: Select all
nuDebug(nuSubformObject('blagen'));

    $uploaddir = $_SERVER['DOCUMENT_ROOT']."libs/upload/documents/";

    deleteFiles('blagen',$uploaddir);  // Replace sample_files with your subform id

    function deleteFiles($form, $uploaddir) {
      $o = nuSubformObject($form);
     
      for($i = 0 ; $i < count($o->rows) ; $i++){
         
          $fileid = $o->rows[$i][2];
          $filename = $o->rows[$i][1];
          $delete = $o->rows[$i][3];
          if ($delete == "1") {
           
              nudebug(($uploaddir . $fileid. "_". $filename));
             deleteFile($uploaddir . $fileid. "_". $filename);
          }
       }

    }


    function deleteFile($file)
    {
        if (file_exists($file))
        {
            if (! unlink($file))
          {
             nuDebug("Cannot delete the file ".$file);
          }
        } else
       {
          nuDebug("File does not exist ".$file);
       }
    }
   
johan
 
Posts: 306
Joined: Sun Feb 27, 2011 7:46 pm
Location: Belgium

Re: upload file to server

Postby kev1n » Fri Nov 22, 2019 6:59 pm

This code will output each variable to the debug lug. Could you use it and then post the debug output here again?

Code: Select all
// nuDebug(nuSubformObject('sample_files'));

$uploaddir = $_SERVER['DOCUMENT_ROOT']."/libs/upload/documents/";

deleteFiles('sample_files',$uploaddir);

function deleteFiles($form, $uploaddir) {
  $o = nuSubformObject($form);

  for($i = 0 ; $i < count($o->rows) ; $i++){
   
     $fileid = $o->rows[$i][2];
     $filename = $o->rows[$i][1];
     $delete = $o->rows[$i][3];
    
     if ($delete == "1" && $fileid != '') {
    
     $debug  = "
       rows id: $id
      
       fileid: $fileid
      
       filename: $filename
      
       delete: $delete
      
       uploaddir: $uploaddir
      
       ";
       nuDebug($debug);
       
       deleteFile($uploaddir . $fileid. "_". $filename);
     }
   }
}

function deleteFile($file)
{
 
    if (file_exists($file))
    {
        if (! unlink($file))
      {
         nuDebug("Cannot delete the file ".$file);
      }
    } else
   {
      nuDebug("File does not exist ".$file);
   }
}
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

Re: upload file to server

Postby johan » Fri Nov 22, 2019 9:48 pm

Kev1n
This is the output of debug

[0] :
rows id:

fileid: 1574424664_5dd7d05856d12_5da701edb0fb627

filename: tekst wonen beleidsplan.pdf

delete: 1

uploaddir: /var/www/html/libs/upload/documents/
johan
 
Posts: 306
Joined: Sun Feb 27, 2011 7:46 pm
Location: Belgium

Re: upload file to server

Postby kev1n » Fri Nov 22, 2019 10:09 pm

It's a little weird, everything looks fine to me. Does the deleteFile() function also output an entry "Cannot delete the file" or "File does not exist" to the debug ?
If yes, can you show me the output?
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

Re: upload file to server

Postby johan » Fri Nov 22, 2019 10:28 pm

Kev1n
[0] : File does not exist /var/www/html/libs/upload/documents/1574424664_5dd7d05856d12_5da701edb0fb627_tekst wonen beleidsplan.pdf


Johan
johan
 
Posts: 306
Joined: Sun Feb 27, 2011 7:46 pm
Location: Belgium

Re: upload file to server

Postby kev1n » Fri Nov 22, 2019 10:50 pm

Can I presume that the file 1574424664_5dd7d05856d12_5da701edb0fb627_tekst wonen beleidsplan.pdf actually exists in that documents folder ?

If it exists, you need to figure out why file_exists() returns false.

Maybe this is helpful (from stackoverflow.com)

Why file_exists cannot find file?

Warning: This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir.


http://php.net/manual/en/function.file- ... turnvalues

Or this
https://stackoverflow.com/questions/921 ... n-my-linux

Or google for "/var/www/html/" file_exists PHP to find more results.
kev1n
 
Posts: 728
Joined: Mon Oct 15, 2018 2:13 am

PreviousNext

Return to Custom Code