/** * Overloaded check method to ensure data integrity. * * @return boolean True on success. */ public function checkData($isNew, $auto_added = false) { global $jlistConfig; jimport('joomla.filesystem.file '); jimport('joomla.filesystem.folder'); jimport('joomla.html.html'); $user = JFactory::getUser(); $db = JFactory::getDBO(); $app = JFactory::getApplication(); // we neeed the jform data $jinput = JFactory::getApplication()->input; $formdata = $jinput->get('jform', array(), 'array'); // we neeed also the jform files data $jFileInput = new JInput($_FILES); $files = $jFileInput->get('jform', array(), 'array'); $default_access_value_used = false; // doing the next part only when we have a new download creation or an editing in frontend if ($app->isSite() && !$auto_added) { $user_rules = JDHelper::getUserRules(); // we must check some from the required fields manually, which are not checked with javascript if ($this->cat_id == 0) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CATEGORY')); } if ($user_rules->form_changelog && $user_rules->form_changelog_x && $this->changelog == '') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CHANGELOG')); } if ($user_rules->form_short_desc && $user_rules->form_short_desc_x && $this->description == '') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_SHORT_DESC')); } if ($user_rules->form_long_desc && $user_rules->form_long_desc_x && $this->description_long == '') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_LONG_DESC')); } if ($user_rules->form_extra_large_input_1 && $user_rules->form_extra_large_input_1_x && $this->custom_field_13 == '') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_TEXT')); } if ($user_rules->form_extra_large_input_2 && $user_rules->form_extra_large_input_2_x && $this->custom_field_14 == '') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_TEXT')); } if ($user_rules->form_license && $user_rules->form_license_x && !$this->license) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_LICENSE')); } if ($user_rules->form_creation_date && $user_rules->form_creation_date_x && $this->date_added == '0000-00-00 00:00:00') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_DATE_ADDED')); } if ($user_rules->form_file_date && $user_rules->form_file_date_x && $this->file_date == '0000-00-00 00:00:00') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_DATE_FILE')); } if ($user_rules->form_file_language && $user_rules->form_file_language_x && !$this->file_language) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_LANGUAGE_FILE')); } if ($user_rules->form_file_system && $user_rules->form_file_system_x && !$this->system) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_SYSTEM_FILE')); } if ($user_rules->form_file_pic && $user_rules->form_file_pic_x && !$this->file_pic) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_PIC_FILE')); } // we need the total amount of selected image files $thumb_image_files = $jFileInput->get('file_upload_thumb', array(), 'array'); $amount_selected_thumbs_files = count($thumb_image_files['name']); foreach ($thumb_image_files['name'] as $name) { if (!$name) { $amount_selected_thumbs_files--; } } if ($user_rules->form_images && $user_rules->form_images_x && !$amount_selected_thumbs_files) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_IMAGES')); } if ($user_rules->form_extra_select_box_1 && $user_rules->form_extra_select_box_1_x && !$this->custom_field_1) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_SELECT')); } if ($user_rules->form_extra_select_box_2 && $user_rules->form_extra_select_box_2_x && !$this->custom_field_2) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_SELECT')); } if ($user_rules->form_extra_select_box_3 && $user_rules->form_extra_select_box_3_x && !$this->custom_field_3) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_SELECT')); } if ($user_rules->form_extra_select_box_4 && $user_rules->form_extra_select_box_4_x && !$this->custom_field_4) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_SELECT')); } if ($user_rules->form_extra_select_box_5 && $user_rules->form_extra_select_box_5_x && !$this->custom_field_5) { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_SELECT')); } if ($user_rules->form_extra_date_1 && $user_rules->form_extra_extra_date_1_x && $this->custom_field_11 == '0000-00-00 00:00:00') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_DATE')); } if ($user_rules->form_extra_date_2 && $user_rules->form_extra_extra_date_2_x && $this->custom_field_12 == '0000-00-00 00:00:00') { $this->setError(JText::_('COM_JDOWNLOADS_REQUIRED_CUSTOM_DATE')); } // break when we have before found a invalid data field if ($this->getErrors()) { return false; } // check the file extension when frontend upload if ($files['tmp_name']['file_upload'] != '' || $files['name']['file_upload'] != '') { $file_extension = JFile::getExt($files['name']['file_upload']); $user_file_types = explode(',', strtolower($user_rules->uploads_allowed_types)); if (!in_array(strtolower($file_extension), $user_file_types)) { // error - user have tried to upload a not allowed file type $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_FILE_TYPE')); return false; } // check allowed file size if ($files['size']['file_upload'] > $user_rules->uploads_maxfilesize_kb * 1024 || $files['name']['file_upload'] != '' && $files['size']['file_upload'] == 0) { // error - user have tried to upload a to big file $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_FILE_SIZE')); return false; } } // check the file extension when frontend preview file upload if ($files['tmp_name']['preview_file_upload'] != '' || $files['name']['preview_file_upload'] != '') { $file_prev_extension = JFile::getExt($files['name']['preview_file_upload']); $user_preview_file_types = explode(',', $user_rules->uploads_allowed_preview_types); if (!in_array($file_prev_extension, $user_preview_file_types)) { // error - user have tried to upload a not allowed file type $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_PREVIEW_FILE_TYPE')); return false; } // check allowed file size if ($files['size']['preview_file_upload'] > $user_rules->uploads_maxfilesize_kb * 1024 || $files['name']['preview_file_upload'] != '' && $files['size']['preview_file_upload'] == 0) { // error - user have tried to upload a to big file $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_FILE_SIZE')); return false; } } // check the access handling if ($user_rules->form_access == 0) { // the access select field was not viewed so we use the default value when exist if ($user_rules->uploads_default_access_level) { $this->access = (int) $user_rules->uploads_default_access_level; $default_access_value_used = true; } } else { // the access select field was viewed if ($this->access > 1) { // user has selected a special access level so we do not use the access value from parent category $default_access_value_used = true; } } } // this part is always used if ($this->cat_id > 1) { if ($isNew && !$default_access_value_used) { // set access level value from parent $query = "SELECT * FROM #__jdownloads_categories WHERE id = '{$this->cat_id}'"; $db->setQuery($query); $parent_cat = $db->loadObject(); $this->access = $parent_cat->access; } } // we need the rest only when the new item is not added by monitoring !!! if (!$auto_added) { // get the uploaded image files $imagefiles = $jFileInput->get('file_upload_thumb', array(), 'array'); $movedmsg = ''; $errormsg = ''; $cat_dir_org = ''; $filename_org = ''; $marked_cat_id = ''; $file_cat_changed = false; $invalid_filename = false; $thumb_created = false; $image_created = false; $image_thumb_name = ''; $filename_renamed = false; $filename_new_name = ''; $filename_old_name = ''; $use_xml_for_file_info = 0; $selected_updatefile = 0; // use xml install file to fill the file informations if (isset($formdata['use_xml'])) { $use_xml_for_file_info = (int) $formdata['use_xml']; } // marked cat id if (isset($formdata['cat_id'])) { $marked_cat_id = (int) $formdata['cat_id']; } else { // is download added about jdownloadsModeldownload::createDownload() ? if ($this->cat_id > 0) { $marked_cat_id = (int) $this->cat_id; } } // prior marked cat id $cat_dir_org = $jinput->get('cat_dir_org', 0, 'integer'); // original filename changed? $filename_org = $jinput->get('filename_org', '', 'string'); if (!$isNew && $filename_org != '' && $formdata['url_download'] != '' && $filename_org != $formdata['url_download']) { $filename_renamed = true; $filename_new_name = $formdata['url_download']; $filename_old_name = $filename_org; } // original preview filename changed? $preview_filename_org = $jinput->get('preview_filename_org', '', 'string'); if (!$isNew && $preview_filename_org != '' && $formdata['preview_filename'] != '' && $preview_filename_org != $formdata['preview_filename']) { $preview_filename_renamed = true; $preview_filename_new_name = $formdata['preview_filename']; $preview_filename_old_name = $preview_filename_org; } // get selected file from server for update download? if (isset($formdata['update_file'])) { $selected_updatefile = $formdata['update_file']; } // When download is new created in frontend, we must do some other things... if ($app->isSite() && !$auto_added) { if ($isNew) { $this->submitted_by = $user->id; if ($user_rules->uploads_auto_publish == 1) { $this->published = 1; } if ($jlistConfig['use.alphauserpoints'] && $this->published == 1) { // add the AUP points JDHelper::setAUPPointsUploads($this->submitted_by, $this->file_title); } } else { if ($jlistConfig['use.alphauserpoints'] && $this->published == 1) { // add the AUP points when an older download is published (maybe the first time) JDHelper::setAUPPointsUploads($this->submitted_by, $this->file_title); } } } else { $this->set_aup_points = $jinput->get('set_aup_points', 0, 'integer'); $this->submitted_by = $jinput->get('submitted_by', 0, 'integer'); } $this->extern_file = $formdata['extern_file']; $this->url_home = $formdata['url_home']; $this->url_author = $formdata['url_author']; $this->author = $formdata['author']; $this->mirror_1 = $formdata['mirror_1']; $this->mirror_2 = $formdata['mirror_2']; $this->extern_site = (int) $formdata['extern_site']; $this->extern_site_mirror_1 = (int) $formdata['extern_site_mirror_1']; $this->extern_site_mirror_2 = (int) $formdata['extern_site_mirror_2']; // check for valid name if (trim($this->file_title) == '') { $this->setError(JText::_('COM_JDOWNLOADS_TITLE_NOT_SET')); return false; } // check date, user id fields and cat_id if (!$isNew) { // old download changed // set user id in modified field $this->modified_id = $user->id; // fill out modified date field // get first the old date and compare it with the current value from the form // when user has self changed the date value - so we do not change it here // otherwise use we the current date and time $modified_date_old = $jinput->get('modified_date_old', '', 'string'); if ($modified_date_old == $this->modified_date) { $this->modified_date = JFactory::getDate()->toSql(); } if ($cat_dir_org != $marked_cat_id) { $file_cat_changed = true; $this->cat_id = $marked_cat_id; } } else { // fill out created date field $this->date_added = JFactory::getDate()->toSql(); // $this->date_added = JHtml::_('date', '','Y-m-d H:i:s'); if (!$this->created_id) { $this->created_id = $user->id; } } // get the selected categories folder name, when it is not uncategorised selected if ($marked_cat_id > 1) { $db->SetQuery("SELECT cat_dir, cat_dir_parent FROM #__jdownloads_categories WHERE id = {$marked_cat_id}"); $stored_catdir = $db->loadObject(); if (!$stored_catdir) { $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_CAT_DIR_NOT_EXIST')); return false; } else { // build the complete stored category path if ($stored_catdir->cat_dir_parent != '') { $mark_catdir = $stored_catdir->cat_dir_parent . DS . $stored_catdir->cat_dir; } else { $mark_catdir = $stored_catdir->cat_dir; } } } else { if ($marked_cat_id == 1) { // 'uncategorised' is selected $mark_catdir = $jlistConfig['uncategorised.files.folder.name']; } } // when we will use a file from a other download, we must delete first the old file when it exist // the same, when we will use a file from the server if ($this->other_file_id > 0 && $this->url_download != '' || $selected_updatefile > 0 && $this->url_download != '') { $path = $jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download; if (JFile::exists($path)) { JFile::delete($path); } $this->url_download = ''; } $this->description = rtrim(stripslashes($this->description)); $this->description_long = rtrim(stripslashes($this->description_long)); if ($this->file_id) { // get filesize and date if no value set if ($formdata['size'] != '' && $formdata['size'] != $this->size && $files['tmp_name']['file_upload'] == '' && !$file_cat_changed) { // user had changed the size manually $this->size = JFilterInput::getInstance(null, null, 1, 1)->clean($formdata['size'], 'STRING'); } if (!(int) $this->size > 0 && $files['tmp_name']['file_upload'] == '' && !$file_cat_changed) { if ($this->url_download) { $filepath = $jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download; if (JFile::exists($filepath)) { $this->size = jdownloadsHelper::fsize($filepath); } } elseif ($this->extern_file != '') { // get extern file size $this->size = jdownloadsHelper::urlfilesize($this->extern_file, 'b'); } elseif ($this->other_file_id > 0) { // use file from other download - get the size from it $this->size = jdownloadsHelper::getFieldDataFromDownload($this->other_file_id, 'size'); } } // is date empty get filedate - only for intern linked files if ($this->url_download) { if (empty($this->date_added) and $files['tmp_name']['file_upload'] == '' and !$file_cat_changed) { $this->date_added = date("Y-m-d H:i:s", filemtime($jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download)); } } elseif ($this->extern_file != '') { // is extern file - try to get the data if (empty($this->date_added) and $files['tmp_name']['file_upload'] == '' and !$file_cat_changed) { $this->date_added = jdownloadsHelper::urlfiledate($this->extern_file); $this->size = jdownloadsHelper::urlfilesize($this->extern_file, 'b'); } } elseif ($this->other_file_id > 0) { // use file from other download - get the date from it $this->file_date = jdownloadsHelper::getFieldDataFromDownload($this->other_file_id, 'file_date'); } } else { if (!(int) $this->size > 0 && $files['tmp_name']['file_upload'] == '' && !$file_cat_changed) { if ($this->url_download) { $filepath = $jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download; if (JFile::exists($filepath)) { $this->size = jdownloadsHelper::fsize($filepath); } } elseif ($this->extern_file != '') { // get extern file file $this->size = jdownloadsHelper::urlfilesize($this->extern_file, 'b'); } elseif ($this->other_file_id > 0) { // use file from other download - get the size from it $this->size = jdownloadsHelper::getFieldDataFromDownload($this->other_file_id, 'size'); } } } //handle now the basic file upload for this download if ($files['tmp_name']['file_upload'] != '') { // clear the other fields $this->other_file_id = ''; // delete first old assigned file if exist - so we can use for a update a file with the same filename! // we must delete it, otherwise found the auto monitoring it as new file and will add it as new founded file! if ($this->url_download) { if (JFile::exists($jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download)) { JFile::delete($jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/' . $this->url_download); $this->size = ''; } } $upload_dir = $jlistConfig['files.uploaddir'] . '/' . $mark_catdir . '/'; $only_name = JFile::stripExt($files['name']['file_upload']); $file_extension = JFile::getExt($files['name']['file_upload']); // check filename $filename_new = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; $only_name = JFile::stripExt($filename_new); $file_extension = JFile::getExt($filename_new); if ($only_name != '') { // filename is valid $num = 0; // rename new file when it exists in this folder while (JFile::exists($upload_dir . $filename_new)) { $filename_new = $only_name . $num++ . '.' . $file_extension; if ($num > 5000) { break; } } $files['name']['file_upload'] = $filename_new; $target_path = $upload_dir . $files['name']['file_upload']; // When file mime is an image type, make sure that we have not a fake pic $file_is_image = JDownloadsHelper::fileIsImage($files['type']['file_upload']); if ($file_is_image && !JDownloadsHelper::imageFileIsValid($files['tmp_name']['file_upload'])) { $files['tmp_name']['file_upload'] = ''; // error - user have tried to upload a not valid image file $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_IMAGE_FILE')); return false; } if (JFile::upload($files['tmp_name']['file_upload'], $target_path, false, true)) { $this->sha1_value = sha1_file($target_path); $this->md5_value = md5_file($target_path); $this->url_download = basename($target_path); $this->extern_file = ''; $this->extern_site = ''; // set file extension pic $filepfad = JPATH_SITE . '/images/jdownloads/fileimages/' . strtolower($file_extension) . '.png'; if (JFile::exists(JPATH_SITE . '/images/jdownloads/fileimages/' . strtolower($file_extension) . '.png')) { $this->file_pic = strtolower($file_extension) . '.png'; } else { $this->file_pic = $jlistConfig['file.pic.default.filename']; } // get filesize and date if no value set from user after upload $this->size = jdownloadsHelper::fsize($target_path); // is date empty get filedate if (empty($this->date_added)) { $this->date_added = JHtml::_('date', 'now', 'Y-m-d H:i:s'); } // is file creation date empty - set filedate to now if (empty($this->file_date)) { $this->file_date = JHtml::_('date', 'now', 'Y-m-d H:i:s'); } // create thumbs form pdf if ($jlistConfig['create.pdf.thumbs'] && strtolower($file_extension) == 'pdf') { $thumb_path = JPATH_SITE . '/images/jdownloads/screenshots/thumbnails/'; $screenshot_path = JPATH_SITE . '/images/jdownloads/screenshots/'; $pdf_thumb_name = jdownloadsHelper::create_new_pdf_thumb($target_path, $only_name, $thumb_path, $screenshot_path); if ($pdf_thumb_name) { $image_thumb_name = $pdf_thumb_name; $thumb_created = TRUE; } } // create auto thumb when extension is a pic if ($jlistConfig['create.auto.thumbs.from.pics'] && $file_is_image) { $thumb_created = jdownloadsHelper::create_new_thumb($target_path); if ($thumb_created) { $image_thumb_name = $filename_new; // create new big image for full view $image_created = jdownloadsHelper::create_new_image($target_path); } } // use xml to read file info (works with joomla install packages (also others?) if ($use_xml_for_file_info) { $xml_tags = jdownloadsHelper::getXMLdata($target_path, $this->url_download); if ($xml_tags[name] != '') { $row = $this; $row_file_title = jdownloadsHelper::fillFileDateFromXML($row, $xml_tags); if (!$row_file_title) { $this->setError(JText::_('COM_JDOWNLOADS_BE_EDIT_FILES_USE_XML_RESULT_NO_DATA')); return false; } $movedmsg .= JText::_('COM_JDOWNLOADS_BE_EDIT_FILES_USE_XML_RESULT_OK'); } else { // no xml data found $this->file_title = $this->url_download; $errormsg .= JText::_('COM_JDOWNLOADS_BE_EDIT_FILES_USE_XML_RESULT_NO_FILE'); } } } else { // error - can not write on server folder - wrong permissions set? $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_CHECK_PERMISSIONS')); return false; } } else { // filename is after clearing empty - invalid filename $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_FILENAME')); } } else { // no new file seletcted for upload // check now whether assigned category has changed - if so, then move the file if ($file_cat_changed && $this->url_download != '') { // move file // get the folder name from the old category folder - so we can build the path if ($cat_dir_org != 1) { // it is NOT a 'uncategorised' download! $db->SetQuery("SELECT cat_dir, cat_dir_parent FROM #__jdownloads_categories WHERE id = '{$cat_dir_org}'"); $old_stored_catdir = $db->loadObject(); } else { // get the uncategorised folder name from configuration $old_stored_catdir->cat_dir = $jlistConfig['uncategorised.files.folder.name']; } // build the complete stored cat path if ($old_stored_catdir->cat_dir_parent != '') { $old_catdir = $old_stored_catdir->cat_dir_parent . DS . $old_stored_catdir->cat_dir; } else { $old_catdir = $old_stored_catdir->cat_dir; } // move it now to the new folder place if (jFile::move($old_catdir . DS . $this->url_download, $mark_catdir . DS . $this->url_download, $jlistConfig['files.uploaddir'] . DS)) { $movedmsg .= JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_SAVE_MOVEFILE_OK'); } else { $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_SAVE_MOVEFILE_ERROR')); return false; } } // is alternate a file from the server selected to update the download? if ($selected_updatefile) { // clear the other field $this->other_file_id = ''; // okay, then we will use it $update_dir = $jlistConfig['files.uploaddir'] . DS; // todo: we must use here the new methode for this in next release $only_name = JFile::stripExt($selected_updatefile); $file_extension = JFile::getExt($selected_updatefile); $update_filename = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; if ($update_filename != $selected_updatefile) { // rename file jFile::move($update_dir . $selected_updatefile, $update_dir . $update_filename); } // delete first old assigned file if ($this->cat_id > 1) { $db->setQuery("SELECT cat_dir, cat_dir_parent FROM #__jdownloads_categories WHERE id = '{$this->cat_id}'"); $cat_dirs = $db->loadObject(); if ($cat_dirs->cat_dir_parent != '') { $cat_dir = $cat_dirs->cat_dir_parent . '/' . $cat_dirs->cat_dir; } else { $cat_dir = $cat_dirs->cat_dir; } } else { // the used category is 'uncategorised' $cat_dir = $jlistConfig['uncategorised.files.folder.name']; } if (JFile::exists($jlistConfig['files.uploaddir'] . DS . $cat_dir . DS . $this->url_download)) { JFile::delete($jlistConfig['files.uploaddir'] . DS . $cat_dir . DS . $this->url_download); } // set new url_download value $this->url_download = $update_filename; // move the file from the upload root folder to the new target folder $target_path = $jlistConfig['files.uploaddir'] . DS . $cat_dir . DS . $update_filename; if (jFile::move($update_dir . $update_filename, $target_path)) { $this->size = jdownloadsHelper::fsize($target_path); $movedmsg .= JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_SAVE_MOVEFILE_OK'); $this->sha1_value = sha1_file($target_path); $this->md5_value = md5_file($target_path); } if (JFile::exists($update_dir . $update_filename)) { JFile::delete($update_dir . $update_filename); } // use xml to read file info (works with joomla install packages (also others?) if ($use_xml_for_file_info) { $xml_tags = jdownloadsHelper::getXMLdata($target_path, $this->url_download); if ($xml_tags[name] != '') { $row = $this; $row_file_title = jdownloadsHelper::fillFileDateFromXML($row, $xml_tags); if (!$row_file_title) { $this->setError(JText::_('COM_JDOWNLOADS_BE_EDIT_FILES_USE_XML_RESULT_NO_DATA')); return false; } } else { // no xml data found $this->file_title = $this->url_download; $this->setError(JText::_('COM_JDOWNLOADS_BE_EDIT_FILES_USE_XML_RESULT_NO_FILE')); } } // create thumbs form pdf if ($jlistConfig['create.pdf.thumbs'] && strtolower($file_extension) == 'pdf') { $thumb_path = JPATH_SITE . '/images/jdownloads/screenshots/thumbnails/'; $screenshot_path = JPATH_SITE . '/images/jdownloads/screenshots/'; $pdf_thumb_name = jdownloadsHelper::create_new_pdf_thumb($target_path, JFile::stripExt($update_filename), $thumb_path, $screenshot_path); if ($pdf_thumb_name) { $image_thumb_name = $pdf_thumb_name; $thumb_created = TRUE; } } // When file mime is an image type, make sure that we have not a fake pic $file_is_image = JDownloadsHelper::fileIsPicture($update_filename); if ($file_is_image && !JDownloadsHelper::imageFileIsValid($target_path)) { $this->images = ''; // error - user have tried to upload a not valid image file $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_IMAGE_FILE')); return false; } // create auto thumb when extension is a pic if ($jlistConfig['create.auto.thumbs.from.pics'] && $file_is_image) { $thumb_created = jdownloadsHelper::create_new_thumb($target_path); if ($thumb_created) { $image_thumb_name = $update_filename; // create new big image for full view $image_created = jdownloadsHelper::create_new_image($target_path); } } } elseif ($this->other_file_id > 0) { // file from an other download is selected // get mdh5 and sha1 $this->md5_value = jdownloadsHelper::getFieldDataFromDownload($this->other_file_id, 'md5_value'); $this->sha1_value = jdownloadsHelper::getFieldDataFromDownload($this->other_file_id, 'sha1_value'); } else { // has user the filename manually renamed? Then do it now. if ($filename_renamed) { $only_name = JFile::stripExt($filename_new_name); $file_extension = JFile::getExt($filename_new_name); // check new filename $filename_new = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; $only_name = JFile::stripExt($filename_new); if ($only_name != '') { if (JFile::move($jlistConfig['files.uploaddir'] . DS . $mark_catdir . DS . $filename_old_name, $jlistConfig['files.uploaddir'] . DS . $mark_catdir . DS . $filename_new)) { // change now value in table field $this->url_download = $filename_new; JError::raiseNotice(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_RENAMED')); } else { // error - can not rename JError::raiseWarning(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_ERROR')); } } else { // filename is after clearing empty - invalid filename JError::raiseWarning(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_ERROR')); } } // has user the preview filename manually renamed? Then do it now. if ($preview_filename_renamed) { $only_name = JFile::stripExt($preview_filename_new_name); $file_extension = JFile::getExt($preview_filename_new_name); // check new filename $preview_filename_new = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; $only_name = JFile::stripExt($preview_filename_new); if ($only_name != '') { if (JFile::move($jlistConfig['files.uploaddir'] . DS . $jlistConfig['preview.files.folder.name'] . DS . $preview_filename_old_name, $jlistConfig['files.uploaddir'] . DS . $jlistConfig['preview.files.folder.name'] . DS . $preview_filename_new)) { // change now value in table field $this->preview_filename = $preview_filename_new; JError::raiseNotice(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_RENAMED')); } else { // error - can not rename JError::raiseWarning(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_ERROR')); } } else { // filename is after clearing empty - invalid filename JError::raiseWarning(100, JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_FILENAME_ERROR')); } } } } //handle now the preview file upload for this download if ($files['tmp_name']['preview_file_upload'] != '') { $upload_dir = $jlistConfig['files.uploaddir'] . '/' . $jlistConfig['preview.files.folder.name'] . '/'; // delete first old assigned file if exist - so we can use for a update a file with the same filename! if ($this->preview_filename) { if (JFile::exists($upload_dir . $this->preview_filename)) { JFile::delete($upload_dir . $this->preview_filename); } } $only_name = JFile::stripExt($files['name']['preview_file_upload']); $file_extension = JFile::getExt($files['name']['preview_file_upload']); // check filename $filename_new = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; $only_name = JFile::stripExt($filename_new); $file_extension = JFile::getExt($filename_new); if ($only_name != '') { // filename is valid $files['name']['preview_file_upload'] = $filename_new; $target_path = $upload_dir . $files['name']['preview_file_upload']; // When file mime is an image type, make sure that we have not a fake pic $file_is_image = JDownloadsHelper::fileIsImage($files['type']['preview_file_upload']); if ($file_is_image && !JDownloadsHelper::imageFileIsValid($files['tmp_name']['preview_file_upload'])) { $files['tmp_name']['preview_file_upload'] = ''; // error - user have tried to upload a not valid image file $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_IMAGE_FILE')); return false; } if (JFile::upload($files['tmp_name']['preview_file_upload'], $target_path)) { $this->preview_filename = basename($target_path); } else { // error - can not write on server folder - wrong permissions set? $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_CHECK_PERMISSIONS')); return false; } } else { // filename is after clearing empty - invalid filename $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_FILENAME')); } } /** * @desc Remove all not marked images from image folders and DB */ if ($this->images != '') { $post = JRequest::get('post'); if (isset($post['keep_image'])) { $keep_image_ids = $post['keep_image']; } else { $keep_image_ids = array(); } // build an array so we can compare it $org_image_ids = explode('|', $this->images); $results = array_diff($org_image_ids, $keep_image_ids); if ($results) { $images_dir = JPATH_SITE . '/images/jdownloads/screenshots/'; $thumb_dir = JPATH_SITE . '/images/jdownloads/screenshots/thumbnails/'; foreach ($results as $result) { // remove the unchecked images if (JFile::exists($images_dir . $result)) { JFile::delete($images_dir . $result); } if (JFile::exists($thumb_dir . $result)) { JFile::delete($thumb_dir . $result); } } // update the image field in the db table $this->images = implode('|', $keep_image_ids); } } // only now can we add the above created thumbs for assigned image or pdf files if ($image_thumb_name) { if ($this->images != '') { $this->images = $this->images . '|' . $image_thumb_name; } else { $this->images = $image_thumb_name; } $this->images = rtrim($this->images, "|"); } /** * @desc check icon upload field * if pic selected for upload: * - check image typ * - check whether filename exists. If so, rename the new file. * - move new file to catimages */ $file = JArrayHelper::getValue($_FILES, 'picnew', array('tmp_name' => '')); if ($file['tmp_name'] != '' && JDownloadsHelper::fileIsPicture($file['name'])) { $upload_dir = JPATH_SITE . '/images/jdownloads/fileimages/'; $file['name'] = JFile::makeSafe($file['name']); if (!JFile::upload($file['tmp_name'], $upload_dir . $file['name'])) { $this->setError(JText::_('COM_JDOWNLOADS_ERROR_CAN_NOT_MOVE_UPLOADED_IMAGE')); return false; } else { // move ok - set new file name as selected $this->file_pic = $file['name']; } } else { // check now whether it is selected manually a other icon from server $selected_file_icon = $jinput->get('file_pic', '', 'string'); if ($selected_file_icon != '' && $selected_file_icon != $this->file_pic) { $this->file_pic = $selected_file_icon; } } /** * @desc check thumbnail upload field * if image selected for upload: * - check image typ * - check whether filename exists. If so, rename the new file. * - move new files to /screenshots and /screenshots/thumbnail folder */ $filename = ''; $tempname = ''; $images = array(); $upload_dir = JPATH_SITE . '/images/jdownloads/screenshots/'; $sum = count($imagefiles['name']); if ($sum > 0) { // new images are uploaded for ($i = 0; $i < $sum; $i++) { $filename = $imagefiles['name'][$i]; $tempname = $imagefiles['tmp_name'][$i]; $temptype = $imagefiles['type'][$i]; if ($filename != '' && JDownloadsHelper::fileIsImage($temptype)) { // replace special chars in filename $only_name = JFile::stripExt($filename); $file_extension = JFile::getExt($filename); $filename = JDownloadsHelper::getCleanFolderFileName($only_name) . '.' . $file_extension; $only_name = JFile::stripExt($filename); $num = 0; while (JFile::exists($upload_dir . $filename)) { $filename = $only_name . $num++ . '.' . $file_extension; if ($num > 5000) { break; } } // make sure that we have not a fake image file if (!JDownloadsHelper::imageFileIsValid($tempname)) { $imagefiles['tmp_name'][$i] = ''; // error - user have tried to upload a not valid image file // but we do not break the upload process // $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_FILESEDIT_INVALID_IMAGE_FILE')); // return false; } else { if (!JFile::upload($tempname, $upload_dir . $filename)) { //$this->setError(JText::_('COM_JDOWNLOADS_ERROR_CAN_NOT_MOVE_UPLOADED_IMAGE')); //return false; } else { // move okay - create now thumbnail $x = JDownloadsHelper::create_new_thumb($upload_dir . $filename); // set correct chmod @chmod($upload_dir . $filename, 0655); // move ok - set new file name as selected $images[] = $filename; } } } else { // not a file with image mime selected if ($filename != '' && !JDownloadsHelper::fileIsImage($imagefiles['type'][$i])) { // add a error message? Or do better nothing then we have always files stored above! // $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_CATSEDIT_ERROR_FILE_TITLE')); } } } // add all uploaded or selected image files to the new images field if ($this->images != '') { $this->images = $this->images . '|' . implode('|', $images); } else { $this->images = implode('|', $images); } $this->images = rtrim($this->images, "|"); } } return true; }
function checkFiles($task) { global $jlistConfig, $lang; $limits = remove_server_limits(); if (!$limits) { echo '<p>'; echo '*******************************************************'; echo '<br />Note: The time limit on the server could not be changed/increased!<br />'; echo '*******************************************************'; echo '</p>'; } ignore_user_abort(true); // ob_flush(); flush(); $model_category = JModelLegacy::getInstance('Category', 'jdownloadsModel'); $model_download = JModelLegacy::getInstance('Download', 'jdownloadsModel'); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $db = JFactory::getDBO(); $lang = JFactory::getLanguage(); $lang->load('com_jdownloads', JPATH_SITE . DS); //check if all files and dirs in the uploaddir directory are listed if ($jlistConfig['files.autodetect'] || $task == 'restore.run' || $task == 'scan.files') { if (file_exists($jlistConfig['files.uploaddir']) && $jlistConfig['files.uploaddir'] != '') { $startdir = $jlistConfig['files.uploaddir'] . '/'; $dir_len = strlen($startdir); // define the params for scan_dir() results $dir = $startdir; $only = FALSE; $type = array(); if ($jlistConfig['all.files.autodetect']) { $allFiles = true; } else { $allFiles = FALSE; $type = explode(',', $jlistConfig['file.types.autodetect']); } $recursive = TRUE; $onlyDir = TRUE; $files = array(); $file = array(); $dirlist = array(); $new_files = 0; $new_dirs_found = 0; $new_dirs_create = 0; $new_dirs_errors = 0; $new_dirs_exists = 0; $new_cats_create = 0; $log_message = ''; $success = FALSE; $log_array = array(); // ******************************************** // first search new categories // ******************************************** clearstatcache(); $jd_root = $jlistConfig['files.uploaddir'] . '/'; $temp_dir = $jd_root . $jlistConfig['tempzipfiles.folder.name'] . '/'; $uncat_dir = $jd_root . $jlistConfig['uncategorised.files.folder.name'] . '/'; $preview_dir = $jd_root . $jlistConfig['preview.files.folder.name'] . '/'; $private_dir = $jd_root . $jlistConfig['private.area.folder.name'] . '/'; $except_folders = array($temp_dir, $uncat_dir, $preview_dir, $private_dir); $searchdirs = array(); $dirlist = JDownloadsHelper::searchdir($jd_root, -1, 'DIRS', 0, $except_folders); $no_writable = 0; for ($i = 0; $i < count($dirlist); $i++) { // no tempzifiles directory if (strpos($dirlist[$i], $jlistConfig['private.area.folder.name'] . '/') === FALSE) { if (!is_writable($dirlist[$i])) { $no_writable++; } $dirlist[$i] = str_replace($jd_root, '', $dirlist[$i]); // delete last slash / if ($pos = strrpos($dirlist[$i], '/')) { $searchdirs[] = substr($dirlist[$i], 0, $pos); } } } unset($dirlist); $count_cats = count($searchdirs); // first progressbar for cats $title1 = JText::_('COM_JDOWNLOADS_RUN_MONITORING_INFO3'); $bar = new ProgressBar(); $bar->setMessage($title1); $bar->setAutohide(false); $bar->setSleepOnFinish(0); $bar->setPrecision(100); $bar->setForegroundColor('#990000'); $bar->setBackgroundColor('#CCCCCC'); $bar->setBarLength(300); $bar->initialize($count_cats - 1); // print the empty bar for ($i = 0; $i < count($searchdirs); $i++) { $dirs = explode('/', $searchdirs[$i]); $sum = count($dirs); // check that folder exist if ($sum == 1) { $db->setQuery("SELECT COUNT(*) FROM #__jdownloads_categories WHERE cat_dir = '{$searchdirs[$i]}'"); $cat_dir_parent_value = ''; $cat_dir_value = $dirs[0]; } else { $pos = strrpos($searchdirs[$i], '/'); $cat_dir_parent_value = substr($searchdirs[$i], 0, $pos); $cat_dir_value = substr($searchdirs[$i], $pos + 1); $db->setQuery("SELECT COUNT(*) FROM #__jdownloads_categories WHERE cat_dir = '{$cat_dir_value}' AND cat_dir_parent = '{$cat_dir_parent_value}'"); } $cat_exist = $db->loadResult(); // when not exist - add it if (!$cat_exist) { $new_dirs_found++; $parent_cat = ''; // get the right parent_id value if ($sum == 1) { // we have a new root cat $parent_id = 1; } else { // find the parent category and get the cat ID $pos = strrpos($cat_dir_parent_value, '/'); if ($pos) { // we have NOT a first level sub category $cat_dir_parent_value2 = substr($cat_dir_parent_value, 0, $pos); $cat_dir_value2 = substr($cat_dir_parent_value, $pos + 1); $db->setQuery("SELECT * FROM #__jdownloads_categories WHERE cat_dir = '{$cat_dir_value2}' AND cat_dir_parent = '{$cat_dir_parent_value2}'"); } else { // we have a first level sub category $cat_dir_parent_value2 = $cat_dir_parent_value; $cat_dir_value2 = $cat_dir_value; $db->setQuery("SELECT * FROM #__jdownloads_categories WHERE cat_dir = '{$cat_dir_parent_value2}' AND cat_dir_parent = ''"); } $parent_cat = $db->loadObject(); if ($parent_cat) { $parent_id = $parent_cat->id; } else { // can not found the parents category for the new child $log_array[] = JText::_('Abort. Can not find parents category for the new folder: ') . ' <b>' . $searchdirs[$i] . '</b><br />'; break; } } $cat_dir_value = utf8_encode($cat_dir_value); // we need the original folder title as category title $original_folder_name = $cat_dir_value; // check the founded folder name $checked_cat_dir = JDownloadsHelper::getCleanFolderFileName($cat_dir_value, true); // check the folder name result if ($cat_dir_value != $checked_cat_dir) { // build path if ($parent_cat) { if ($parent_cat->cat_dir_parent) { $cat_dir_path = $jd_root . $parent_cat->cat_dir_parent . '/' . $parent_cat->cat_dir . '/' . $checked_cat_dir; $new_cat_dir_name = $parent_cat->cat_dir_parent . '/' . $parent_cat->cat_dir . '/' . $checked_cat_dir; } else { $cat_dir_path = $jd_root . $parent_cat->cat_dir . '/' . $checked_cat_dir; $new_cat_dir_name = $parent_cat->cat_dir . '/' . $checked_cat_dir; } } else { $cat_dir_path = $jd_root . $checked_cat_dir; $new_cat_dir_name = $checked_cat_dir; } // rename the folder - when he already exist: make it unique! $num = 1; while (JFolder::exists($cat_dir_path)) { $cat_dir_path = $cat_dir_path . $num; $checked_cat_dir = $checked_cat_dir . $num; $num++; } if (!JFolder::exists($cat_dir_path)) { $copied = JFolder::move($jd_root . $searchdirs[$i], $cat_dir_path); if ($copied !== true) { $log_array[] = JText::_('Error! Can not change folder name: ') . ' <b>' . $searchdirs[$i] . '</b><br />'; } } else { $log_array[] = JText::_('Error! A folder with the same (cleaned) name exist already: ') . ' <b>' . $searchdirs[$i] . '</b><br />'; } $cat_dir_value = $checked_cat_dir; // update the name in the folder list $searchdirs[$i] = $new_cat_dir_name; } // set access if ($parent_cat) { $access = $parent_cat->access; } else { $access = 1; } // set alias $alias = JApplication::stringURLSafe($cat_dir_value); // set note hint $note = JText::_('COM_JDOWNLOADS_RUN_MONITORING_NOTE_TEXT'); // build table array $data = array('id' => 0, 'parent_id' => $parent_id, 'title' => $original_folder_name, 'alias' => $alias, 'notes' => $note, 'description' => '', 'cat_dir' => $cat_dir_value, 'cat_dir_parent' => $cat_dir_parent_value, 'pic' => $jlistConfig['cat.pic.default.filename'], 'published' => (int) $jlistConfig['autopublish.founded.files'], 'access' => $access, 'metadesc' => '', 'metakey' => '', 'created_user_id' => '0', 'language' => '*', 'rules' => array('core.create' => array(), 'core.delete' => array(), 'core.edit' => array(), 'core.edit.state' => array(), 'core.edit.own' => array(), 'download' => array()), 'params' => array()); // create new cat in table $create_result = $model_category->createAutoCategory($data); if (!$create_result) { // error message $log_array[] = JText::_('Error! Can not create new category for: ') . ' <b>' . $searchdirs[$i] . '</b><br />'; } $new_cats_create++; // copy index.html to the new folder $index_copied = JFile::copy(JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_jdownloads' . DS . 'index.html', $jlistConfig['files.uploaddir'] . DS . $searchdirs[$i] . DS . 'index.html'); $log_array[] = JText::_('COM_JDOWNLOADS_AUTO_CAT_CHECK_ADDED') . ' <b>' . $searchdirs[$i] . '</b><br />'; } $bar->increase(); // calls the bar with every processed element } echo '<small><br />' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_SUM_FOLDERS') . ' ' . count($searchdirs) . '<br /><br /></small>'; ob_flush(); flush(); unset($dirs); unset($searchdirs); // ******************************************** // Exists all published category folders? // ******************************************** $mis_cats = 0; // get all published categories but not the root $db->setQuery("SELECT * FROM #__jdownloads_categories WHERE published = 1 AND id > 1"); $cats = $db->loadObjectList(); $count_cats = count($cats); // first progressbar for cats $bar = new ProgressBar(); $title2 = JText::_('COM_JDOWNLOADS_RUN_MONITORING_INFO4'); $bar->setMessage($title2); $bar->setAutohide(false); $bar->setSleepOnFinish(0); $bar->setPrecision(100); $bar->setForegroundColor('#990000'); $bar->setBarLength(300); $bar->initialize($count_cats); // print the empty bar foreach ($cats as $cat) { if ($cat->cat_dir_parent != '') { $cat_dir = $jd_root . $cat->cat_dir_parent . '/' . $cat->cat_dir; } else { $cat_dir = $jd_root . $cat->cat_dir; } // when it not exist, we must unpublish the category if (!JFolder::exists($cat_dir)) { $db->setQuery("UPDATE #__jdownloads_categories SET published = 0 WHERE id = '{$cat->id}'"); $db->execute(); $mis_cats++; $log_array[] = '<font color="red">' . JText::_('COM_JDOWNLOADS_AUTO_CAT_CHECK_DISABLED') . ' <b>' . $cat->cat_dir . '</b></font><br />'; } $bar->increase(); // calls the bar with every processed element } echo '<br /><br />'; unset($cats); // ********************************************************* // Check all files and create for new founded new Downloads // ********************************************************* unset($except_folders[1]); $all_dirs = JDownloadsHelper::scan_dir($dir, $type, $only, $allFiles, $recursive, $onlyDir, $except_folders, $jd_root, $files); if ($all_dirs != FALSE) { $count_files = count($files); // first progressbar for cats $bar = new ProgressBar(); $title3 = JText::_('COM_JDOWNLOADS_RUN_MONITORING_INFO5'); $bar->setMessage($title3); $bar->setAutohide(false); $bar->setSleepOnFinish(0); $bar->setPrecision(100); $bar->setForegroundColor('#990000'); $bar->setBarLength(300); $bar->initialize($count_files); // print the empty bar reset($files); $new_files = 0; foreach ($files as $key3 => $array2) { $filename = $files[$key3]['file']; if ($filename != '') { $dir_path_total = $files[$key3]['path']; $restpath = substr($files[$key3]['path'], $dir_len); $only_dirs = substr($restpath, 0, strlen($restpath) - 1); $upload_dir = $jlistConfig['files.uploaddir'] . '/' . $only_dirs . '/'; $pos = strrpos($only_dirs, '/'); if ($pos) { $cat_dir_parent_value = substr($only_dirs, 0, $pos); $cat_dir_value = substr($only_dirs, $pos + 1); } else { $cat_dir_parent_value = ''; $cat_dir_value = $only_dirs; } // exist still a Download with this filename? $exist_file = false; $db->setQuery("SELECT cat_id FROM #__jdownloads_files WHERE url_download = '" . $filename . "'"); $row_file_exists = $db->loadObjectList(); // when exist, get the category from the Download, when we have really assigned a category (ID > 1) if ($row_file_exists && $row_file_exists[0]->cat_id > 1) { foreach ($row_file_exists as $row_file_exist) { if (!$exist_file) { $db->setQuery("SELECT COUNT(*) FROM #__jdownloads_categories WHERE id = '{$row_file_exist->cat_id}' AND cat_dir = '{$cat_dir_value}' AND cat_dir_parent = '{$cat_dir_parent_value}'"); $row_cat_find = $db->loadResult(); if ($row_cat_find) { $exist_file = true; } } } } else { // it can be an 'uncategorised' if ($row_file_exists && $row_file_exists[0]->cat_id == 1) { $exist_file = true; } else { $exist_file = false; } } // Add the file here in a new Download if (!$exist_file) { // not check the filename when restore backup file if ($task != 'restore.run') { // reset images var $images = ''; $only_name = utf8_encode(JFile::stripExt($filename)); $file_extension = JFile::getExt($filename); // $title = JFilterInput::clean($only_name); $title = JFilterInput::getInstance(null, null, 1, 1)->clean($only_name, 'STRING'); // check filename $filename_new = JDownloadsHelper::getCleanFolderFileName($only_name, true) . '.' . $file_extension; if ($only_name == '') { echo "<script> alert('Error: Filename empty after cleaning: " . $dir_path_total . "'); </script>\n"; continue; // go to next foreach item } if ($filename_new != $filename) { $source = $startdir . $only_dirs . '/' . $filename; $target = $startdir . $only_dirs . '/' . $filename_new; $success = @rename($source, $target); if ($success === true) { $filename = $filename_new; } else { // could not rename filename echo "<script> alert('Error: Could not rename {$filename}'); </script>\n"; continue; // go to next foreach item } } } $target_path = $upload_dir . $filename; // find the category for the new founded file in this folder $db->setQuery("SELECT * FROM #__jdownloads_categories WHERE cat_dir = '{$cat_dir_value}' AND cat_dir_parent = '{$cat_dir_parent_value}'"); $cat = $db->loadObject(); if ($cat) { $id = $cat->id; $access = $cat->access; } else { // it seems that we have a new file in 'uncategorised' folder found $id = 1; $access = 1; } $date = JFactory::getDate(); $tz = JFactory::getConfig()->get('offset'); $date->setTimezone(new DateTimeZone($tz)); $file_extension = JFile::getExt($filename); // set file size $file_size = $files[$key3]['size']; // set note hint $note = JText::_('COM_JDOWNLOADS_RUN_MONITORING_NOTE_TEXT'); // set creation date $creation_date = JFactory::getDate()->toSql(); // set file mime pic $picpath = strtolower(JPATH_SITE . '/images/jdownloads/fileimages/' . $file_extension . '.png'); if (file_exists($picpath)) { $file_pic = $file_extension . '.png'; } else { $file_pic = $jlistConfig['file.pic.default.filename']; } // create thumbs form pdf if ($jlistConfig['create.pdf.thumbs'] && $jlistConfig['create.pdf.thumbs.by.scan'] && $file_extension == 'pdf') { $thumb_path = JPATH_SITE . '/images/jdownloads/screenshots/thumbnails/'; $screenshot_path = JPATH_SITE . '/images/jdownloads/screenshots/'; $pdf_thumb_name = jdownloadsHelper::create_new_pdf_thumb($target_path, $only_name, $thumb_path, $screenshot_path); if ($pdf_thumb_name) { $images = $pdf_thumb_name; } } // create auto thumb when founded file is an image if ($jlistConfig['create.auto.thumbs.from.pics'] && $jlistConfig['create.auto.thumbs.from.pics.by.scan']) { if ($file_is_image = JDownloadsHelper::fileIsPicture($filename)) { $thumb_created = jdownloadsHelper::create_new_thumb($target_path); if ($thumb_created) { $images = $filename; // create new big image for full view $image_created = jdownloadsHelper::create_new_image($target_path); } } } $sha1_value = sha1_file($target_path); $md5_value = md5_file($target_path); // build data array $data = array('file_id' => 0, 'cat_id' => $id, 'file_title' => $title, 'file_alias' => '', 'notes' => $note, 'url_download' => $filename, 'size' => $file_size, 'description' => JDownloadsHelper::getOnlyLanguageSubstring($jlistConfig['autopublish.default.description']), 'file_pic' => $file_pic, 'images' => $images, 'date_added' => $creation_date, 'sha1_value' => $sha1_value, 'md5_value' => $md5_value, 'published' => (int) $jlistConfig['autopublish.founded.files'], 'access' => $access, 'metadesc' => '', 'metakey' => '', 'created_user_id' => '0', 'language' => '*', 'rules' => array('core.create' => array(), 'core.delete' => array(), 'core.edit' => array(), 'core.edit.state' => array(), 'core.edit.own' => array(), 'download' => array()), 'params' => array()); // create new download in table $create_result = $model_download->createAutoDownload($data); if (!$create_result) { // error message echo "<script> alert('Error: Could not add download for: {$filename}'); window.history.go(-1); </script>\n"; exit; } $new_files++; $log_array[] = JText::_('COM_JDOWNLOADS_AUTO_FILE_CHECK_ADDED') . ' <b>' . $only_dirs . '/' . $filename . '</b><br />'; } } $bar->increase(); // calls the bar with every processed element } } echo '<small><br />' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_SUM_FILES') . ' ' . count($files) . '<br /><br /></small>'; unset($files); flush(); // **************************************************** // Check whether the assigned files from all published downloads exists // - otherwise unpublish this downloads // **************************************************** $mis_files = 0; $db->setQuery("SELECT * FROM #__jdownloads_files WHERE published = 1"); $files = $db->loadObjectList(); $count_files = count($files); // first progressbar for cats $bar = new ProgressBar(); $title4 = JText::_('COM_JDOWNLOADS_RUN_MONITORING_INFO6'); $bar->setMessage($title4); $bar->setAutohide(false); $bar->setSleepOnFinish(0); $bar->setPrecision(100); $bar->setForegroundColor('#990000'); $bar->setBarLength(300); $bar->initialize($count_files); // print the empty bar foreach ($files as $file) { // we checked only intern stored files if ($file->url_download != '') { // get the category path only, when we have not an 'uncategorised' Download if ($file->cat_id > 1) { $db->setQuery("SELECT cat_dir, cat_dir_parent FROM #__jdownloads_categories WHERE id = '{$file->cat_id}'"); $cat = $db->loadObject(); if ($cat->cat_dir_parent != '') { $cat_dir_path = $cat->cat_dir_parent . '/' . $cat->cat_dir; } else { $cat_dir_path = $cat->cat_dir; } $file_path = $jd_root . $cat_dir_path . '/' . $file->url_download; $cat_dir = $cat->cat_dir . '/' . $file->url_download; } else { // file in 'uncategorised' folder $file_path = $uncat_dir . $file->url_download; $cat_dir = $file_path; } if (!file_exists($file_path)) { $db->setQuery("UPDATE #__jdownloads_files SET published = 0 WHERE file_id = '{$file->file_id}'"); $db->execute(); $mis_files++; $log_array[] = '<font color="red">' . JText::_('COM_JDOWNLOADS_AUTO_FILE_CHECK_DISABLED') . ' <b>' . $cat_dir . '</b></font><br />'; } } $bar->increase(); // calls the bar with every processed element } echo '<br /><br />'; echo '<div style="font-family:Verdana; font-size:10"><b>' . JText::_('COM_JDOWNLOADS_RUN_MONITORING_INFO7') . '</b><br /><br /></div>'; flush(); // build log message if (count($log_array) > 0) { array_unshift($log_array, date(JText::_('DATE_FORMAT_LC2')) . ':<br />'); } foreach ($log_array as $log) { $log_message .= $log; } // when we have changed anything, we store it in the config if ($log_message != '') { $db->setQuery("UPDATE #__jdownloads_config SET setting_value = '{$log_message}' WHERE setting_name = 'last.log.message'"); $db->execute(); } if ($task == 'scan.files') { echo '<table width="100%"><tr><td><font size="1" face="Verdana">' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_TITLE') . '</font><br />'; if ($new_cats_create > 0) { echo '<font color="#FF6600" size="1" face="Verdana"><b>' . $new_cats_create . ' ' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NEW_CATS') . '</b></font><br />'; } else { echo '<font color="green" size="1" face="Verdana"><b>' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NO_NEW_CATS') . '</b></font><br />'; } if ($new_files > 0) { echo '<font color="#FF6600" size="1" face="Verdana"><b>' . $new_files . ' ' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NEW_FILES') . '</b></font><br />'; } else { echo '<font color="green" size="1" face="Verdana"><b>' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NO_NEW_FILES') . '</b></font><br />'; } if ($mis_cats > 0) { echo '<font color="#990000" size="1" face="Verdana"><b>' . $mis_cats . ' ' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_MISSING_CATS') . '</b></font><br />'; } else { echo '<font color="green" size="1" face="Verdana"><b>' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NO_MISSING_CATS') . '</b></font><br />'; } if ($mis_files > 0) { echo '<font color="#990000" size="1" face="Verdana"><b>' . $mis_files . ' ' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_MISSING_FILES') . '</b><br /></td></tr></table>'; } else { echo '<font color="green" size="1" face="Verdana"><b>' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_NO_MISSING_FILES') . '</b><br /></td></tr></table>'; } if ($log_message) { echo '<table width="100%"><tr><td><font size="1" face="Verdana">' . JText::_('COM_JDOWNLOADS_BACKEND_AUTOCHECK_LOG_TITLE') . '<br />' . $log_message . '</font></td></tr></table>'; } } } else { // error upload dir not exists echo '<font color="red"><b>' . JText::sprintf('COM_JDOWNLOADS_AUTOCHECK_DIR_NOT_EXIST', $jlistConfig['files.uploaddir']) . '<br /><br />' . JText::_('COM_JDOWNLOADS_AUTOCHECK_DIR_NOT_EXIST_2') . '</b></font>'; } } }
/** * Method to save the form data. * * @param array The form data. * @param boolean The switch for added by monitoring * @return boolean True on success. */ public function save($data, $auto_added = false) { global $jlistConfig; // Initialise variables; $dispatcher = JDispatcher::getInstance(); $jinput = JFactory::getApplication()->input; $table = $this->getTable(); $pk = !empty($data['id']) ? $data['id'] : (int) $this->getState($this->getName() . '.id'); $isNew = true; $catChanged = false; $title_changed = false; $cat_dir_changed_manually = false; $checked_cat_title = ''; // Include the content plugins for the on save events. JPluginHelper::importPlugin('content'); // remove bad input values $data['parent_id'] = (int) $data['parent_id']; // Load the row if saving an existing category. if ($pk > 0) { $table->load($pk); $isNew = false; if ($table->parent_id != $data['parent_id']) { // we must be here careful for the case that user has manipulated manually the parent_id if ($data['parent_id'] == 0) { // invalid value, so we do here nothing and use the old parent_id $data['parent_id'] = $table->parent_id; } else { $catChanged = true; } } } // parent id must have at minimum a 1 for 'root' category if ($data['parent_id'] == 0) { $data['parent_id'] = 1; } // is title changed? $org_title = $jinput->get('cat_title_org', '', 'string'); if ($org_title != '' && $org_title != $data['title']) { $title_changed = true; } // cat_dir manually changed? $old_cat_dir = $jinput->get('cat_dir_org', '', 'string'); if ($old_cat_dir != '' && $old_cat_dir != $data['cat_dir']) { $cat_dir_changed_manually = true; } if (!$auto_added) { // we must check first the cat_dir content and remove some critical things if ($jlistConfig['create.auto.cat.dir']) { // check whether we have a different title and cat_dir (as example when prior was activated the manually category name building) if (!$title_changed && $data['title'] != $data['cat_dir']) { // activate this switch $title_changed = true; } // the cat_dir name is managed by jD and builded from category title $checked_cat_title = JDownloadsHelper::getCleanFolderFileName($data['title']); } else { // the cat_dir name is managed by the user and the cat_dir field $checked_cat_title = JDownloadsHelper::getCleanFolderFileName($data['cat_dir']); } $data['cat_dir'] = $checked_cat_title; } if ($isNew || $title_changed || $cat_dir_changed_manually) { // make sure that we have a new (valid) folder name / same when changed title or manually cat_dir field $data['cat_dir'] = $this->generateNewFolderName($data['parent_id'], $data['cat_dir'], $data['id']); } if (!$data['cat_dir']) { // ERROR - we have a empty category folder name - not possible! $this->setError(JText::_('COM_JDOWNLOADS_BACKEND_CATSEDIT_ERROR_FOLDER_NAME')); return false; } // Set the new parent id if parent id not matched OR while New/Save as Copy . if ($table->parent_id != $data['parent_id'] || $data['id'] == 0) { $table->setLocation($data['parent_id'], 'last-child'); } // Alter the title for save as copy if ($jinput->get('task') == 'save2copy') { list($title, $alias) = $this->generateNewTitle($data['parent_id'], $data['alias'], $data['title']); $data['title'] = $title; $data['alias'] = $alias; } if (!empty($data['tags']) && $data['tags'][0] != '') { $table->newTags = $data['tags']; } // Bind the data. if (!$table->bind($data)) { $this->setError($table->getError()); return false; } // Prepare the row for saving $this->prepareTable($table); // Check the data. if (!$table->checkData($isNew)) { $this->setError($table->getError()); return false; } // Trigger the onContentBeforeSave event. $result = $dispatcher->trigger($this->event_before_save, array($this->option . '.' . $this->name, &$table, $isNew)); if (in_array(false, $result, true)) { $this->setError($table->getError()); return false; } // Store the data. if (!$table->store()) { $this->setError($table->getError()); return false; } // folder handling functionality - not used for auto added if (!$auto_added) { if (!$table->checkCategoryFolder($isNew, $catChanged, $title_changed, $checked_cat_title, $cat_dir_changed_manually)) { if ($table->published = 1) { $table->published = 0; $table->store(); } //return false; } } // Trigger the onContentAfterSave event. $dispatcher->trigger($this->event_after_save, array($this->option . '.' . $this->name, &$table, $isNew)); // Rebuild the path for the category: // but only when it is a sub category (parent_id > 1) if ($table->parent_id > 1) { if (!$table->rebuildPath($table->id)) { $this->setError($table->getError()); return false; } } // Rebuild the paths of the category's children: if ($table->hasChildren($table->id)) { if ($table->cat_dir_parent != '') { $path = $table->cat_dir_parent . '/' . $table->cat_dir; } else { $path = $table->cat_dir; } if (!$table->rebuild($table->id, $table->lft, $table->level, $path)) { $this->setError($table->getError()); return false; } } $this->setState($this->getName() . '.id', $table->id); // Clear the cache $this->cleanCache(); return true; }