Public Member Functions | Data Fields

ilFileDataExercise Class Reference
[Modules/Exercise]

This class handles all operations on files for the exercise object. More...

Inheritance diagram for ilFileDataExercise:
Collaboration diagram for ilFileDataExercise:

Public Member Functions

 ilFileDataExercise ($a_obj_id=0)
 Constructor call base constructors checks if directory is writable and sets the optional obj_id.
 getObjId ()
 getExercisePath ()
 get exercise path public
 getFiles ()
 ilClone ($a_new_obj_id)
 delete ()
 storeUploadedFile ($a_http_post_file, $secure_filename=false)
 store uploaded file in filesystem
 deliverFile ($a_http_post_file, $user_id)
 store delivered file in filesystem
 downloadAllDeliveredFiles ($members)
 Download all submitted files of all members.
 unlinkFiles ($a_filenames)
 unlink files: expects an array of filenames e.g.
 unlinkFile ($a_filename)
 unlink one uploaded file expects a filename e.g 'foo'
 getAbsolutePath ($a_path)
 get absolute path of filename
 checkFilesExist ($a_files)
 check if files exist
 __checkPath ()
 __checkReadWrite ()
 check if directory is writable overwritten method from base class private
 __initDirectory ()
 init directory overwritten method public
 __rotateFiles ($a_path)
 rotate files with same name recursive method

Data Fields

 $obj_id
 $exercise_path

Detailed Description

This class handles all operations on files for the exercise object.

Author:
Stefan Meyer <smeyer@databay.de>
Version:
Id:
class.ilFileDataExercise.php 12222 2006-10-15 20:38:40Z hschottm

Definition at line 34 of file class.ilFileDataExercise.php.


Member Function Documentation

ilFileDataExercise::__checkPath (  ) 

Definition at line 342 of file class.ilFileDataExercise.php.

References __checkReadWrite(), and getExercisePath().

Referenced by ilFileDataExercise().

        {
                if(!@file_exists($this->getExercisePath()))
                {
                        return false;
                }
                $this->__checkReadWrite();

                return true;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilFileDataExercise::__checkReadWrite (  ) 

check if directory is writable overwritten method from base class private

Returns:
bool

Definition at line 358 of file class.ilFileDataExercise.php.

Referenced by __checkPath().

        {
                if(is_writable($this->exercise_path) && is_readable($this->exercise_path))
                {
                        return true;
                }
                else
                {
                        $this->ilias->raiseError("Exercise directory is not readable/writable by webserver",$this->ilias->error_obj->FATAL);
                }
        }

Here is the caller graph for this function:

ilFileDataExercise::__initDirectory (  ) 

init directory overwritten method public

Returns:
string path

Definition at line 375 of file class.ilFileDataExercise.php.

References ilFileData::getPath(), and ilUtil::makeDir().

Referenced by ilFileDataExercise().

        {
                if(is_writable($this->getPath()))
                {
                        return ilUtil::makeDir($this->excercise_path = $this->getPath().'/'.EXERCISE_PATH);
                }
                return false;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilFileDataExercise::__rotateFiles ( a_path  ) 

rotate files with same name recursive method

Parameters:
string filename private
Returns:
bool

Definition at line 390 of file class.ilFileDataExercise.php.

Referenced by storeUploadedFile().

        {
                if(file_exists($a_path))
                {
                        $this->__rotateFiles($a_path.".old");
                        return rename($a_path,$a_path.'.old');
                }
                return true;
        }

Here is the caller graph for this function:

ilFileDataExercise::checkFilesExist ( a_files  ) 

check if files exist

Parameters:
array filenames to check public
Returns:
bool

Definition at line 325 of file class.ilFileDataExercise.php.

References $file.

        {
                if($a_files)
                {
                        foreach($a_files as $file)
                        {
                                if(!file_exists($this->exercise_path.'/'.$this->obj_id.'_'.$file))
                                {
                                        return false;
                                }
                        }
                        return true;
                }
                return true;
        }

ilFileDataExercise::delete (  ) 

Definition at line 122 of file class.ilFileDataExercise.php.

References $file, ilUtil::delDir(), getExercisePath(), getFiles(), and unlinkFile().

        {
                foreach($this->getFiles() as $file)
                {
                        $this->unlinkFile($file["name"]);
                }
                
                $delivered_file_path = $this->getExercisePath() . "/" . $this->obj_id . "/";
                if (is_dir($delivered_file_path))
                {
                        include_once "./classes/class.ilUtil.php";
                        ilUtil::delDir($delivered_file_path);
                }
                
                return true;
        }

Here is the call graph for this function:

ilFileDataExercise::deliverFile ( a_http_post_file,
user_id 
)

store delivered file in filesystem

Parameters:
array HTTP_POST_FILES
numeric database id of the user who delivered the file public
Returns:
mixed Returns a result array with filename and mime type of the saved file, otherwise false

Definition at line 178 of file class.ilFileDataExercise.php.

References $result, getExercisePath(), ilObjMediaObject::getMimeType(), ilUtil::makeDir(), and ilUtil::moveUploadedFile().

Referenced by downloadAllDeliveredFiles().

        {
                // TODO: 
                // CHECK UPLOAD LIMIT
                // 
                $result = false;
                if(isset($a_http_post_file) && $a_http_post_file['size'])
                {
                        $filename = $a_http_post_file['name'];
                        // replace whitespaces with underscores
                        $filename = preg_replace("/\s/", "_", $filename);
                        // remove all special characters
                        $filename = preg_replace("/[^_a-zA-Z0-9\.]/", "", $filename);

                        if(!is_dir($savepath = $this->getExercisePath()."/".$this->obj_id))
                        {
                                ilUtil::makeDir($savepath);
                        }
                        $savepath .= '/' .$user_id;
                        if(!is_dir($savepath))
                        {
                                ilUtil::makeDir($savepath);
                        }                               

                        // CHECK IF FILE PATH EXISTS
                        if (!is_dir($savepath))
                        {
                                require_once "./classes/class.ilUtil.php";
                                #ilUtil::makeDirParents($savepath);
                                ilUtil::makeDir($savepath);
                        }
                        $now = getdate();
                        $prefix = sprintf("%04d%02d%02d%02d%02d%02d", $now["year"], $now["mon"], $now["mday"], $now["hours"], 
                                                          $now["minutes"], $now["seconds"]);
                        //move_uploaded_file($a_http_post_file["tmp_name"], $savepath . $prefix . "_" . $filename);
                        ilUtil::moveUploadedFile($a_http_post_file["tmp_name"], $a_http_post_file["name"],
                                $savepath . "/" . $prefix . "_" . $filename);
                        require_once "./content/classes/Media/class.ilObjMediaObject.php";
                        $result = array(
                                "filename" => $prefix . "_" . $filename,
                                "fullname" => $savepath . "/" . $prefix . "_" . $filename,
                                "mimetype" =>   ilObjMediaObject::getMimeType($savepath . "/" . $prefix . "_" . $filename)
                        );
                }
                return $result;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilFileDataExercise::downloadAllDeliveredFiles ( members  ) 

Download all submitted files of all members.

Parameters:
$members array of member objects (ilObjUser), key is user id

Definition at line 230 of file class.ilFileDataExercise.php.

References $id, $lng, deliverFile(), ilUtil::escapeShellArg(), getExercisePath(), and ilUtil::ilTempnam().

        {
                require_once "./classes/class.ilUtil.php";
                global $lng;
                
                ksort($members);
                $tmpfile = ilUtil::ilTempnam();
                $fh = fopen($tmpfile, "w");

                if ($fh)
                {
                        foreach ($members as $id => $member)
                        {
                                fwrite($fh, "$id\t$member\n");
                        }
                        fclose($fh);
                }

                $savepath = $this->getExercisePath() . "/" . $this->obj_id . "/";
                copy($tmpfile, $savepath . "users.txt");
                $cdir = getcwd();

                // important check: if the directory does not exist
                // ILIAS stays in the current directory (echoing only a warning)
                // and the zip command below archives the whole ILIAS directory
                // (including the data directory) and sends a mega file to the user :-o
                if (!is_dir($savepath))
                {
                        return;
                }
                // Safe mode fix
                chdir($this->getExercisePath());
                $zip = PATH_TO_ZIP;
                $tmpfile = ilUtil::ilTempnam();
                $tmpzipfile = $tmpfile . ".zip";
                // Safe mode fix
                $zipcmd = $zip." -r ".ilUtil::escapeShellArg($tmpzipfile)." ".$this->obj_id;
                exec($zipcmd);
                ilUtil::deliverFile($tmpzipfile, strtolower($lng->txt("excs")) . ".zip");
                chdir($cdir);
                unlink($savepath . "users.txt");
                unlink($tmpfile);
                unlink($tmpzipfile);
        }

Here is the call graph for this function:

ilFileDataExercise::getAbsolutePath ( a_path  ) 

get absolute path of filename

Parameters:
string relative path public
Returns:
string absolute path

Definition at line 314 of file class.ilFileDataExercise.php.

        {
                return $this->exercise_path.'/'.$this->obj_id.'_'.$a_path;
        }

ilFileDataExercise::getExercisePath (  ) 

get exercise path public

Returns:
string path

Definition at line 81 of file class.ilFileDataExercise.php.

Referenced by __checkPath(), delete(), deliverFile(), downloadAllDeliveredFiles(), ilClone(), and storeUploadedFile().

        {
                return $this->exercise_path;
        }

Here is the caller graph for this function:

ilFileDataExercise::getFiles (  ) 

Definition at line 86 of file class.ilFileDataExercise.php.

References $file, $files, $obj_id, and ilFormat::formatDate().

Referenced by delete(), and ilClone().

        {
                $files = array();
                $dp = opendir($this->exercise_path);

                while($file = readdir($dp))
                {
                        if(is_dir($file))
                        {
                                continue;
                        }
                        list($obj_id,$rest) = split('_',$file,2);
                        if($obj_id == $this->obj_id)
                        {
                                if(!is_dir($this->exercise_path.'/'.$file))
                                {
                                        $files[] = array(
                                                'name'     => $rest,
                                                'size'     => filesize($this->exercise_path.'/'.$file),
                                                'ctime'    => ilFormat::formatDate(date('Y-m-d H:i:s',filectime($this->exercise_path.'/'.$file))));
                                }
                        }
                }
                closedir($dp);
                return $files;
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilFileDataExercise::getObjId (  ) 

Definition at line 71 of file class.ilFileDataExercise.php.

        {
                return $this->obj_id;
        }

ilFileDataExercise::ilClone ( a_new_obj_id  ) 

Definition at line 113 of file class.ilFileDataExercise.php.

References $file, getExercisePath(), and getFiles().

        {
                foreach($this->getFiles() as $file)
                {
                        @copy($this->getExercisePath()."/".$this->obj_id.'_'.$file["name"],
                                  $this->getExercisePath()."/".$a_new_obj_id.'_'.$file["name"]);
                }
                return true;
        }

Here is the call graph for this function:

ilFileDataExercise::ilFileDataExercise ( a_obj_id = 0  ) 

Constructor call base constructors checks if directory is writable and sets the optional obj_id.

Parameters:
integereger obj_id public

Definition at line 57 of file class.ilFileDataExercise.php.

References __checkPath(), __initDirectory(), ilFileData::getPath(), and ilFileData::ilFileData().

        {
                define('EXERCISE_PATH','exercise');
                parent::ilFileData();
                $this->exercise_path = parent::getPath()."/".EXERCISE_PATH;
                
                // IF DIRECTORY ISN'T CREATED CREATE IT
                if(!$this->__checkPath())
                {
                        $this->__initDirectory();
                }
                $this->obj_id = $a_obj_id;
        }

Here is the call graph for this function:

ilFileDataExercise::storeUploadedFile ( a_http_post_file,
secure_filename = false 
)

store uploaded file in filesystem

Parameters:
array HTTP_POST_FILES public
Returns:
bool

Definition at line 145 of file class.ilFileDataExercise.php.

References __rotateFiles(), getExercisePath(), and ilUtil::moveUploadedFile().

        {
                // TODO: 
                // CHECK UPLOAD LIMIT
                // 
                $filename = $a_http_post_file['name'];
                if ($secure_filename)
                {
                        // replace whitespaces with underscores
                        $filename = preg_replace("/\s/", "_", $filename);
                        // remove all special characters
                        $filename = preg_replace("/[^_a-zA-Z0-9\.]/", "", $filename);
                }
                if(isset($a_http_post_file) && $a_http_post_file['size'])
                {
                        // CHECK IF FILE WITH SAME NAME EXISTS
                        $this->__rotateFiles($this->getExercisePath().'/'.$this->obj_id.'_'.$filename);
                        //move_uploaded_file($a_http_post_file['tmp_name'],$this->getExercisePath().'/'.$this->obj_id.'_'.
                        //                                 $filename);
                        ilUtil::moveUploadedFile($a_http_post_file['tmp_name'], $a_http_post_file['name'],
                                $this->getExercisePath().'/'.$this->obj_id.'_'.$filename);

                }
                return true;
        }

Here is the call graph for this function:

ilFileDataExercise::unlinkFile ( a_filename  ) 

unlink one uploaded file expects a filename e.g 'foo'

Parameters:
string filename to delete public
Returns:
bool

Definition at line 301 of file class.ilFileDataExercise.php.

Referenced by delete(), and unlinkFiles().

        {
                if(file_exists($this->exercise_path.'/'.$this->obj_id.'_'.$a_filename))
                {
                        return unlink($this->exercise_path.'/'.$this->obj_id.'_'.$a_filename);
                }
        }

Here is the caller graph for this function:

ilFileDataExercise::unlinkFiles ( a_filenames  ) 

unlink files: expects an array of filenames e.g.

array('foo','bar')

Parameters:
array filenames to delete public
Returns:
string error message with filename that couldn't be deleted

Definition at line 281 of file class.ilFileDataExercise.php.

References $file, and unlinkFile().

        {
                if(is_array($a_filenames))
                {
                        foreach($a_filenames as $file)
                        {
                                if(!$this->unlinkFile($file))
                                {
                                        return $file;
                                }
                        }
                }
                return '';
        }

Here is the call graph for this function:


Field Documentation

ilFileDataExercise::$exercise_path

Definition at line 48 of file class.ilFileDataExercise.php.

ilFileDataExercise::$obj_id

Definition at line 41 of file class.ilFileDataExercise.php.

Referenced by getFiles().


The documentation for this class was generated from the following file: