/** * Triggers the necessary calculations when a page is added, edited or removed * * @author Woxxy */ public function on_change($chapter) { // cleanup the archive if there is one for this chapter $archives = new Archive(); $archives->where('comic_id', $chapter->comic_id)->group_start()->where('chapter_id', $chapter->id)->or_where('volume_id', $chapter->volume)->group_end()->get(); if ($archives->result_count()) { foreach ($archives as $archive) { $archive->remove(); } } }
public function check($repair = FALSE, $recursive = FALSE) { $dir = "content/comics/" . $this->directory() . "/"; $errors = array(); if (!is_dir($dir)) { $errors[] = 'comic_directory_not_found'; set_notice('warning', _('No directory found for:') . ' ' . $this->name . ' (' . $this->directory() . ')'); log_message('debug', 'check: comic directory missing at ' . $dir); if ($repair) { // the best we can do is removing the database entry $this->remove_comic_db(); } } else { // check that there are no unidentified files in the comic folder $map = directory_map($dir, 1); foreach ($map as $key => $item) { $item_path = $dir . $item; if (is_dir($item_path)) { // gotta split the directory to get stub and uniqid $item_arr = explode('_', $item); $uniqid = end($item_arr); $stub = str_replace('_' . $uniqid, '', $item); $chapter = new Chapter(); $chapter->where('stub', $stub)->where('uniqid', $uniqid)->get(); if ($chapter->result_count() == 0) { $errors[] = 'comic_unidentified_directory_found'; set_notice('warning', _('Unidentified directory found at:') . ' ' . $item_path); log_message('debug', 'check: unidentified directory found at ' . $item_path); if ($repair) { // you have to remove all the files in the folder first delete_files($item_path, TRUE); rmdir($item_path); } } } else { if ($item != $this->thumbnail && $item != 'thumb_' . $this->thumbnail) { $ext = strtolower(substr($item, -4)); if (in_array($ext, array('.zip'))) { $archive = new Archive(); $archive->where('comic_id', $this->id)->where('filename', $item)->get(); if ($archive->result_count()) { continue; } } // if it's not the thumbnail image, it's an unidentified file $errors[] = 'comic_unidentified_file_found'; set_notice('warning', _('Unidentified file found at:') . ' ' . $item_path); log_message('debug', 'check: unidentified file found at ' . $item_path); if ($repair) { unlink($item_path); } } } } } return $errors; }
/** * Triggers the necessary calculations when a page is added, edited or removed * * @author Woxxy */ public function on_change($chapter_id) { // cleanup the archive if there is one for this chapter $archive = new Archive(); $archive->where('chapter_id', $chapter_id)->get(); if ($archive->result_count() == 1) { $archive->remove(); } }
function check($repair = FALSE) { // make sure we got the comic if ($this->get_comic() === FALSE) { $errors[] = 'chapter_comic_entry_not_found'; set_notice('warning', _('Found a chapter entry without a comic entry, Chapter ID: ' . $this->id)); log_message('debug', 'check: chapter entry without comic entry'); if ($repair) { $this->remove_chapter_db(); } return FALSE; } $errors = array(); // check if the directory exists at all $path = 'content/comics/' . $this->comic->directory() . '/' . $this->directory() . '/'; if (!is_dir($path)) { $errors[] = 'chapter_directory_not_found'; set_notice('warning', _('No directory found for:') . ' ' . $this->comic->name . ' > ' . $this->title()); log_message('debug', 'check: chapter directory missing at ' . $path); // the folder doesn't exist, so get rid of the entry from database if ($repair) { $this->remove_chapter_db(); } // there's no recovery from this, return the error codes return $errors; } // check if there are extraneous files in the folder $files = get_dir_file_info($path); foreach ($files as $key => $file) { // check that the file is writable if (!is_writable($file['relative_path'])) { // non writable files are horrendous, send a notice and stop the machines $errors[] = 'chapter_non_writable_file'; set_notice('warning', _('Found non writable files in the comics folder. Check your files permissions.')); log_message('debug', 'check: non writable file: ' . $file['relative_path']); return $errors; } // get the extension $ext = strtolower(substr($file['name'], -4)); if (in_array($ext, array('.zip'))) { // maybe it's just the zip created by the archive system $archives = new Archive(); $archives->where('comic_id', $this->comic_id)->where('chapter_id', $this->id)->where('volume_id', 0)->get(); if ($archives->result_count()) { foreach ($archives as $archive) { // we actually have an archive, but is it the same file? if ($file['name'] == $archive->filename) { // same file, unset to confirm unset($files[$key]); continue; } } } } if (in_array($ext, array('.png', '.jpg', 'jpeg', '.gif'))) { $page = new Page(); $page->where('chapter_id', $this->id)->where('filename', $file['name'])->get(); if ($page->result_count() == 1) { // it's a simple page, unset to confirm unset($files[$key]); continue; } } } // now we have an array with files that don't belong here foreach ($files as $file) { $errors[] = 'chapter_unidentified_file'; set_notice('warning', _('Unidentified file found in:') . ' ' . $this->comic->name . ' > ' . $this->title() . ': ' . $file['name']); log_message('debug', 'check: unidentified file ' . $file['relative_path'] . $file['name']); // repairing this means getting rid of extraneous files if ($repair) { // it's possible the file is not removeable if (is_writable($file['relative_path'] . $file['name'])) { // the files SHOULD be writable, we checked it earlier if (is_dir($file['relative_path'] . $file['name'])) { delete_files($file['relative_path'] . $file['name']); rmdir($file['relative_path'] . $file['name']); } else { unlink($file['relative_path'] . $file['name']); } } } } // everything's been checked. The errors are in the set_notice system return $errors; }