function remove_folder($dir) { $result = array(); $result['removed'] = array(); $result['kept'] = array(); $files = array_diff(scandir($dir), array('.', '..')); foreach ($files as $file) { if (is_dir("{$dir}/{$file}")) { $result = array_merge_recursive($result, remove_folder("{$dir}/{$file}")); } else { if (unlink("{$dir}/{$file}")) { $result['removed'][] = "{$dir}/{$file}"; } else { $result['kept'][] = "{$dir}/{$file}"; } } } if (rmdir("{$dir}")) { $result['removed'][] = $dir; } else { $result['kept'][] = $dir; } return $result; }
public function deleteUpdate($update_id) { // Begin transaction with the database $this->db->trans_start(); // Update URL count $update = $this->getSingle($update_id, 1); if ($update['url']) { // Check if this is the only update using this url $num = $this->db->where('url', $update['url'])->get('update_url')->num_rows; if ($num > 1) { // More than one share $this->db->where('id', $update['url'])->set('share_count', 'share_count - 1', false)->update('url'); } else { // Only one share // Delete from DB $this->db->where('id', $update['url'])->delete('url'); $dir = getcwd() . '/upload/url/' . $update['url']; if (is_dir($dir)) { empty_folder($dir); if (!remove_folder($dir)) { log_message('error', "user_model->deleteUpdate() - Remove folder failed:" . $dir); return false; } } } } // Delete files if ($update['image_id']) { // Check if this is the only update using this image $num = $this->db->where('image_id', $update['image_id'])->get('update_image')->num_rows; if ($num == 1) { // Delete from DB $this->db->where('image_id', $update['image_id'])->delete('image'); $dir = getcwd() . '/upload/photo/' . $update['username']; remove_files(array($dir . '/' . $update['image_id'] . '-' . $update['image_filename'] . $update['image_fileext'], $dir . '/' . $update['image_id'] . '-' . $update['image_filename'] . '-large' . $update['image_fileext'], $dir . '/' . $update['image_id'] . '-' . $update['image_filename'] . '-small' . $update['image_fileext'])); } } // Delete mentions $this->db->where('update_id', $update_id)->delete('user_notification'); // Delete update $this->db->where('id', $update_id)->delete('update'); $this->db->trans_complete(); if ($this->db->trans_status() === false) { return false; } return true; }