function xmldb_block_sharing_cart_upgrade($oldversion = 0) { global $CFG, $THEME, $DB; $result = true; if ($oldversion < 2009020300) { $result = execute_sql("ALTER TABLE `{$CFG->prefix}sharing_cart`\n ADD `file` VARCHAR(255) NOT NULL DEFAULT '' AFTER `time`"); if ($result) { require_once dirname(__FILE__) . '../sharing_cart_table.php'; if ($shared_items = $DB->get_records('sharing_cart')) { foreach ($shared_items as $shared_item) { $shared_item->file = sharing_cart_table::gen_zipname($shared_item->time); update_record('sharing_cart', $shared_item); } } } } if ($oldversion < 2009040600) { $result = execute_sql("CREATE TABLE `{$CFG->prefix}sharing_cart_plugins` (\n `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n `plugin` VARCHAR(32) NOT NULL,\n `user` INT(10) UNSIGNED NOT NULL,\n `data` TEXT NOT NULL\n )"); } return $result; }
<?php require_once '../../config.php'; require_once './sharing_cart_table.php'; //error_reporting(E_ALL); global $DB; require_login(); $shared_id = required_param('id', PARAM_INT); $return_to = urldecode(required_param('return')); $insert_to = urldecode(optional_param('to')); // 共有アイテムが存在するかチェック $shared = sharing_cart_table::get_record_by_id($shared_id) or print_error('err_shared_id', 'block_sharing_cart', $return_to); // 自分が所有する共有アイテムかチェック $shared->user == $USER->id or print_error('err_capability', 'block_sharing_cart', $return_to); // 挿入先アイテムIDからソート順を取得 (挿入先未指定=最後尾へ) $dest_sort = 0; if (!empty($insert_to) and $target = $DB->get_record('sharing_cart', 'id', $insert_to, 'tree', $shared->tree, 'user', $USER->id)) { $dest_sort = $target->sort; } else { $max_sort = get_field_sql("SELECT MAX(sort) FROM {$CFG->prefix}sharing_cart\n WHERE user = '******' AND tree = '{$shared->tree}'"); $dest_sort = $max_sort + 1; } // 挿入先以降のレコードの`sort`をインクリメントしてスペースを確保 $sql = "UPDATE {$CFG->prefix}sharing_cart SET sort = sort + 1\n WHERE user = '******' AND tree = '{$shared->tree}'\n AND sort >= {$dest_sort}"; execute_sql($sql, FALSE); // 目的のアイテムを移動 $shared->sort = $dest_sort; sharing_cart_table::update_record($shared) or print_error('err_move', 'block_sharing_cart', $return_to); //if (headers_sent()) die; redirect($return_to);
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php require_once '../../config.php'; //error_reporting(E_ALL); require_once './shared/SharingCart_Restore.php'; require_once './sharing_cart_table.php'; $sc_id = required_param('id', PARAM_INT); $course_id = required_param('course', PARAM_INT); $section_id = required_param('section', PARAM_INT); $return_to = urldecode(required_param('return')); // 共有アイテムが存在するかチェック $sharing_cart = sharing_cart_table::get_record_by_id($sc_id) or print_error('err_shared_id', 'block_sharing_cart', $return_to); // 自分が所有する共有アイテムかチェック $sharing_cart->user == $USER->id or print_error('err_capability', 'block_sharing_cart', $return_to); // ZIPファイル名取得 $zip_name = $sharing_cart->file; try { // リストアオブジェクト (※ $restore は Moodle グローバル変数として予約されているので使用不可) $worker = new SharingCart_Restore($course_id, $section_id); // サイレントモード $worker->setSilent(); // 設定開始 $worker->beginPreferences(); // ZIPファイル名設定 $worker->setZipName($zip_name); // 設定完了 $worker->endPreferences();
// 設定完了 $worker->endPreferences(); // バックアップ実行 $worker->execute(); // モジュールの名前とZIPとの対応などをDBに登録 (ブロック表示で使用) $sharing_cart = new stdClass(); $sharing_cart->userid = $USER->id; $sharing_cart->name = addslashes($module->name); $sharing_cart->icon = addslashes($cm->icon); $sharing_cart->text = addslashes($module->name == 'label' ? $cm->extra : $cm->name); $sharing_cart->time = $worker->getUnique(); // ZIP名生成に使用したユニーク値 (=タイムスタンプ) $sharing_cart->contextid = $worker->getContextID(); $sharing_cart->fileid = $worker->getFileID(); $sharing_cart->sort = 0; sharing_cart_table::insert_record($sharing_cart); if ($worker->succeeded()) { // 成功:リダイレクト redirect($return_to); } else { // 失敗:「続行」画面 print_continue($return_to); } } catch (SharingCart_CourseException $e) { //print_error('err_course_id', 'block_sharing_cart', $return_to); error((string) $e); // デバッグ用に詳細メッセージを表示 } catch (SharingCart_SectionException $e) { //print_error('err_section_id', 'block_sharing_cart', $return_to); error((string) $e); // デバッグ用に詳細メッセージを表示
<?php require_once '../../config.php'; require_once './sharing_cart_table.php'; //error_reporting(E_ALL); require_login(); $shared_id = required_param('id', PARAM_INT); $return_to = urldecode(required_param('return', PARAM_LOCALURL)); // 続行可能な通知メッセージがあれば直接リダイレクトせずにそれを表示 $notifications = array(); // 共有アイテムが存在するかチェック $shared = sharing_cart_table::get_record_by_id($shared_id) or print_error('err_shared_id', 'block_sharing_cart', $return_to); // 自分が所有する共有アイテムかチェック $shared->userid == $USER->id or print_error('err_capability', 'block_sharing_cart', $return_to); // $zip_path = make_user_directory($USER->id, true).'/'.$shared->file; // ZIP削除 //$oldmask = umask(0); //chmod($zip_path, 0666); // unlink($zip_path) // or $notifications[] = get_string('err_delete', 'block_sharing_cart'); //umask($oldmask); // DB削除 sharing_cart_table::delete_record($shared) or print_error('err_delete', 'block_sharing_cart', $return_to); //if (headers_sent()) die; if (count($notifications)) { notice(implode('<br />', $notifications), $return_to); } else { redirect($return_to); }
// 削除実行 // SQLインジェクション対策のためintvalでフィルタリング $delete_ids = array_map('intval', array_keys($delete)) or print_error('err_shared_id', 'block_sharing_cart', $return_to); $items = $DB->get_records_select('sharing_cart', 'user = '******' AND ' . 'id IN (' . implode(',', $delete_ids) . ')') or print_error('err_shared_id', 'block_sharing_cart', $return_to); $user_dir = make_user_directory($USER->id, true); // ファイル削除に成功したIDのみをDB削除に渡す $delete_ids = array(); foreach ($items as $id => $item) { if (@unlink($user_dir . '/' . $item->file)) { $delete_ids[] = $id; } else { $notifications[] = get_string('err_delete', 'block_sharing_cart'); } } delete_records_select('sharing_cart', 'id IN (' . implode(',', $delete_ids) . ')'); sharing_cart_table::renumber($USER->id); if (count($notifications)) { notice(implode('<br />', $notifications), $return_to); } else { redirect($return_to); } exit; } $title = get_string('bulkdelete', 'block_sharing_cart'); $navlinks = array(); if ($course_id != SITEID) { $navlinks[] = array('name' => get_field('course', 'shortname', 'id', $course_id), 'link' => $CFG->wwwroot . '/course/view.php?id=' . $course_id, 'type' => 'title'); } $navlinks[] = array('name' => $title, 'link' => '', 'type' => 'title'); print_header_simple($title, '', build_navigation($navlinks)); print_heading($title);