diff --git a/README.md b/README.md index 0716a10df..28adc7fcc 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,27 @@ Two accessibility features in the system are text alternatives for all visual el ## Installation +### System Requirements + +- **PHP 8.0+** (tested up to PHP 8.3) with the following extensions: + - `mysqli` **(required; the old `mysql` extension was removed in PHP 7)** + - `mbstring` **(required for upgrades and multilingual content)** + - `zlib` + - `gd` (for image processing) + - `openssl` (for HTTPS and mail) +- **MySQL 5.7+** or **MariaDB 10.2+** + - MySQL strict mode (`STRICT_TRANS_TABLES`, `NO_ZERO_DATE`) is supported as of this release. +- A web server such as Apache or Nginx + +To install missing PHP extensions on Debian/Ubuntu: +```bash +sudo apt-get install php-mbstring php-mysqli php-zlib php-gd php-openssl +``` + +> **Note:** This release drops support for PHP 5.x/7.x. If you are upgrading from an older ATutor version, ensure your server is running PHP 8.0 or later. + +### Installing ATutor + To install ATutor, point your web browser to the installation directory where ATutor was extracted, and follow the Installer's instructions. e.g. http://localhost/ATutor @@ -46,6 +67,13 @@ For additional ATutor documentation, see the ATutor Handbook in ATutor, or at th - Users: https://atutor.github.io/atutor/handbook/users.html + +## Compatibility & Known Issues + +- **PHP 8.3:** This release includes extensive PHP 8 compatibility fixes for removed functions (`create_function`, `split`, `eregi`, `each`, `set_magic_quotes_runtime`, etc.), strict typing errors, and MySQL strict mode. +- **MySQL Strict Mode:** Previously caused fatal errors on date columns and null defaults. Resolved by replacing bareword constants, using `NOW()` for timestamps, and guarding `NULL` inserts. +- **Third-party libraries:** Bundled libraries (nusoap, phpmailer, phpseclib, PEAR XML_HTMLSax) have been patched for PHP 8 survival. Some legacy libraries still emit deprecation warnings but are functional. +- **Security hardening:** Recent commits fixed reflected XSS, CSRF bypass, open redirect, path traversal, arbitrary file upload, stored XSS, SSRF/LFI, and missing auth checks. ## Developers diff --git a/admin/config_template.php b/admin/config_template.php deleted file mode 100644 index 5f4aa2316..000000000 --- a/admin/config_template.php +++ /dev/null @@ -1,139 +0,0 @@ - \ No newline at end of file diff --git a/admin/error_logging.php b/admin/error_logging.php index 3e8fba006..88b825c93 100644 --- a/admin/error_logging.php +++ b/admin/error_logging.php @@ -66,7 +66,7 @@ } if (is_dir($dir_ . '/' . $file)) { - $logdirs{$file} = $file; // store the day log dir + $logdirs[$file] = $file; // store the day log dir } } closedir($dir); // clean it up @@ -99,7 +99,7 @@ if (strpos($file, 'profile') !== false) { // found a profile, store its md5 key identifier $tmp_ = substr($file, strpos($file, '_') + 1); $tmp_ = substr($tmp_, 0, strpos($tmp_, '.log.php')); - $log_profiles{$file} = $tmp_; + $log_profiles[$file] = $tmp_; } } @@ -142,7 +142,7 @@ closedir($dir); // store the amount of bugs associated with profile - $log_profiles_bug_count{$val}[$val_] = $count; + $log_profiles_bug_count[$val][$val_] = $count; } $log_profiles = array(); } diff --git a/admin/error_logging_bundle.php b/admin/error_logging_bundle.php index 8868fab49..09b2771fa 100644 --- a/admin/error_logging_bundle.php +++ b/admin/error_logging_bundle.php @@ -38,7 +38,7 @@ $date = substr($work, 0, strpos($work, ':')); $id = substr($work, strpos($work, ':') + 1); /* Parse the variable */ - $profiles{$id} = $date; + $profiles[$id] = $date; } } @@ -71,7 +71,7 @@ // any files mathcing the $elem key correspond to this profile if (strpos($file, $elem) !== false) { - $store_some{$dir_ . '/'. $val . '/' . $file} = $file; + $store_some[$dir_ . '/'. $val . '/' . $file] = $file; } } @@ -173,7 +173,7 @@ } if (is_dir($dir_ . '/' . $file)) { - $logdirs{$file} = $file; // store the day log dir + $logdirs[$file] = $file; // store the day log dir } } closedir($dir); // clean it up @@ -206,7 +206,7 @@ if (strpos($file, 'profile') !== false) { // found a profile, store its md5 key identifier $tmp_ = substr($file, strpos($file, '_') + 1); $tmp_ = substr($tmp_, 0, strpos($tmp_, '.log.php')); - $log_profiles{$file} = $tmp_; + $log_profiles[$file] = $tmp_; } } @@ -249,7 +249,7 @@ closedir($dir); // store the amount of bugs associated with profile - $log_profiles_bug_count{$val}[$val_] = $count; + $log_profiles_bug_count[$val][$val_] = $count; } $log_profiles = array(); } diff --git a/admin/error_logging_details.php b/admin/error_logging_details.php index 9dc49f1f0..dc4ed7528 100644 --- a/admin/error_logging_details.php +++ b/admin/error_logging_details.php @@ -44,7 +44,7 @@ } if (strpos($file, $key) !== false) { // found a bug associated with our profile key - $delete_store{$file} = $file; + $delete_store[$file] = $file; } else { $cnt++; } @@ -115,7 +115,7 @@ } if (strpos($file, $key) !== false) { // found a bug associated with our profile key - $log_profile_bugs{$file} = $file; + $log_profile_bugs[$file] = $file; } } @@ -177,7 +177,7 @@ } if (strpos($file, $key) !== false) { // found a bug associated with our profile key - $delete_store{$file} = $file; + $delete_store[$file] = $file; } } diff --git a/bounce.php b/bounce.php index 066d5b46f..e6be8dc2f 100644 --- a/bounce.php +++ b/bounce.php @@ -162,12 +162,15 @@ function get_groups($course_id) { } } elseif (!empty($_REQUEST['p'])) { //For search - //p is a relative path, check that. #4773 - if (strpos($_REQUEST['p'], 'http') !== false) { - //if not relative, reset it. - $_REQUEST['p'] = ""; - } + //p is a relative path, check that. #4773 + if (preg_match('#^(\/\/|[a-zA-Z][a-zA-Z0-9+.-]*:)#', $_REQUEST['p'])) { + //if not relative, reset it. + $_REQUEST['p'] = ""; + } $page = urldecode($_REQUEST['p']); + if (preg_match('#^(\/\/|[a-zA-Z][a-zA-Z0-9+.-]*:)#', $page)) { + $page = ""; + } } elseif (($_config['pretty_url'] > 0) && preg_match('/bounce.php\?course=([\d]+)$/', $_SERVER['REQUEST_URI'])==1) { //for browse, and my start page url rewrite. $page = url_rewrite($_SERVER['REQUEST_URI'], AT_PRETTY_URL_NOT_HEADER, true).'/index.php'; //force overwrite @@ -292,6 +295,8 @@ function get_groups($course_id) { $owner_id = $row['member_id']; $_SESSION['packaging'] = $row['content_packaging']; +error_log('[ATUTOR-BOUNCE-DIAG] entry course='.$course.' access='.$row['access'].' valid_user='.var_export($_SESSION['valid_user']??null,true).' member_id='.var_export($_SESSION['member_id']??null,true).' owner_id='.$owner_id.' release='.var_export($row['u_release_date'],true).' end='.var_export($row['u_end_date'],true).' pretty_url='.var_export($_config['pretty_url']??null,true)); + $_SESSION['groups'] = array(); unset($_SESSION['fs_owner_type']); unset($_SESSION['fs_owner_id']); @@ -388,6 +393,7 @@ function get_groups($course_id) { $_SESSION['groups'] = get_groups($course); + error_log('[ATUTOR-BOUNCE-DIAG] PUBLIC-final course_id='.var_export($_SESSION['course_id']??null,true).' is_admin='.var_export($_SESSION['is_admin']??null,true).' member_id='.var_export($_SESSION['member_id']??null,true).' dest='.$dest); header('Location: '.$dest, TRUE, 301); exit; @@ -450,6 +456,7 @@ function get_groups($course_id) { header('Location: ./'.$page.'?f='.$addslashes($_GET['f'])); exit; } /* else */ + error_log('[ATUTOR-BOUNCE-DIAG] PROTECTED-final course_id='.var_export($_SESSION['course_id']??null,true).' is_admin='.var_export($_SESSION['is_admin']??null,true).' member_id='.var_export($_SESSION['member_id']??null,true).' dest=./'.$page); header('Location: ./'.$addslashes($page)); exit; diff --git a/content.php b/content.php index b47b86deb..459965ffa 100644 --- a/content.php +++ b/content.php @@ -281,9 +281,17 @@ // Mauro Donadio // -$fp = @file_get_contents($content_row['text']); +$fp = false; +// Restrict file_get_contents to valid paths within AT_CONTENT_DIR to prevent SSRF/LFI +if ($content_row['text'] && file_exists($content_row['text'])) { + $real_text_path = realpath($content_row['text']); + $content_dir_real = realpath(AT_CONTENT_DIR); + if ($real_text_path !== false && $content_dir_real !== false && strpos($real_text_path, $content_dir_real) === 0) { + $fp = @file_get_contents($content_row['text']); + } +} // just for AContent content -if(strstr($fp, 'AContentXX')){ +if($fp && strstr($fp, 'AContentXX')){ //$fp = str_ireplace('','',$fp); // diff --git a/documentation/admin/requirements_recommendations.php b/documentation/admin/requirements_recommendations.php index 829c9aaee..a5634354d 100644 --- a/documentation/admin/requirements_recommendations.php +++ b/documentation/admin/requirements_recommendations.php @@ -16,23 +16,20 @@

ATutor is written in the PHP language. The PHP configuration file contains many configuration settings that can be changed. The following are the minimum requirements needed to install and use ATutor.

-
PHP 5.0.2+
-
Version 5.2.0 or higher is recommended.
+
PHP 8.0+
+
PHP 8.3 is recommended. The old PHP 5.x/7.x mysql extension is no longer supported; mysqli is required.
zlib
Zlib support must be enabled in PHP; It is used for compressing and uncompressing ZIP files.
-
mysql
-
MySQL support must be enabled in PHP.
+
mysqli (required)
+
MySQLi support must be enabled in PHP. The legacy mysql extension was removed in PHP 7 and is no longer supported.
-
mbstring
-
MBstring support must be compiled into PHP to support UTF-8 lamguage characters.
+
mbstring (required)
+
MBstring support must be enabled in PHP to support UTF-8 language characters and upgrades.
curl (optional)
-
Curl support must be compiled into PHP for ATutor Social (Networking) .
- -
safe_mode = Off
-
safe_mode must be disabled in PHP. ATutor cannot function with the restrictions enforced when safe_mode is enabled.
+
Curl support must be compiled into PHP for ATutor Social (Networking).
file_uploads = On
File uploads support must be enabled in PHP.
@@ -60,22 +57,19 @@

Additionally, the following php.ini configuration settings are recommended:

display_errors          = Off
 arg_separator.input     = ";&"
-register_globals        = Off
-magic_quotes_gpc        = Off
-magic_quotes_runtime    = Off
 allow_url_fopen         = On
 allow_url_include       = Off
 register_argc_argv      = Off
 zlib.output_compression = On
 session.use_trans_sid   = 0
-
+ -

MySQL

-

Currently ATutor only supports the MySQL database. MySQL 4.1.10 or higher is required.

+

MySQL / MariaDB

+

ATutor supports MySQL 5.7+ and MariaDB 10.2+. MySQL strict mode is supported as of this release.

A database user account with database creation privileges is required if your database does not already exist. That same user will then need table creation privileges for the chosen database. See the MySQL chapter How the Privilege System Works for additional information.

Web Browser

ATutor makes use of many new HTML features that are only supported in recent web browsers. Though ATutor is designed to function effectively in older browsers we strongly recommend using the latest version of your favorite browser. We recommend FireFox for either Windows, *nix or Mac OS X.

- \ No newline at end of file + diff --git a/documentation/developer/guidelines.html b/documentation/developer/guidelines.html index 839ea43db..902984c95 100644 --- a/documentation/developer/guidelines.html +++ b/documentation/developer/guidelines.html @@ -381,7 +381,7 @@

10. Creating Bundles

top

11. Writing Portable Code

-

When writing your PHP code please try to use functions that exist since (the minimum requirement) PHP version 5.0.2. If you have to use a function that only exists in later versions of PHP, provide an alternative for older versions. To check if the function is available use either version_compare(phpversion(), $min_version) or function_exists($function_name).

+

When writing your PHP code please try to use functions that exist since (the minimum requirement) PHP version 8.0. The old PHP 5.x/7.x functions such as mysql_*, eregi(), split(), each(), and create_function() have been removed and must not be reintroduced. If you have to use a function that only exists in later versions of PHP, provide an alternative for older versions. To check if the function is available use either version_compare(PHP_VERSION, $min_version) or function_exists($function_name).

Code has to work on both Windows and UNIX. You should never use exec() or system(). In most cases we prefer to write code that works on both systems as is, without the need for if-statements that check for the operating system, since duplicating the functionality twice (once for each operating system) can be a source of bugs. Review the PHP Configuration section for details on how best to set-up your development environment.

diff --git a/get.php b/get.php index 5da3a8b4c..c2c59e376 100644 --- a/get.php +++ b/get.php @@ -88,7 +88,7 @@ //send header mime type $pathinfo = pathinfo($file); -$ext = $pathinfo['extension']; +$ext = $pathinfo['extension'] ?? ''; if ($ext == '') { $ext = 'application/octet-stream'; } else { @@ -125,7 +125,7 @@ header('Content-Type: '.$ext); //a hack for http://atutor.ca/atutor/mantis/view.php?id=4531 //@harris - if ($pathinfo['extension']=='mp3' || $pathinfo['extension']=='mp4') { + if (($pathinfo['extension'] ?? '')=='mp3' || ($pathinfo['extension'] ?? '')=='mp4') { header('Content-length: '.filesize($real)); } diff --git a/get_course_icon.php b/get_course_icon.php index 27ac3f06e..15e129d52 100644 --- a/get_course_icon.php +++ b/get_course_icon.php @@ -47,15 +47,16 @@ } $real = realpath($file); -// How did this ever work when the stock icons are used instead of a custom one, see mantis 5465 -//if (file_exists($real) && (substr($real, 0, strlen(AT_CONTENT_DIR)) == AT_CONTENT_DIR)) { -if (file_exists($real)) { +$custom_dir = realpath(AT_CONTENT_DIR); +$stock_dir = realpath(AT_INCLUDE_PATH . '../images/courses/'); + +if (file_exists($real) && (($stock_dir !== false && substr($real, 0, strlen($stock_dir)) == $stock_dir) || ($custom_dir !== false && substr($real, 0, strlen($custom_dir)) == $custom_dir))) { header('Content-Disposition: inline; filename="'.$filename.'"'); - + /** * although we can check if mod_xsendfile is installed in apache2 * we can't actually check if it's enabled. also, we can't check if - * it's enabled and installed in lighty, so instead we send the + * it's enabled and installed in lighty, so instead we send the * header anyway, if it works then the line after it will not * execute. if it doesn't work, then the line after it will replace * it so that the full server path is not exposed. @@ -63,15 +64,15 @@ * x-sendfile is supported in apache2 and lighttpd 1.5+ (previously * named x-send-file in lighttpd 1.4) */ - $real=preg_replace("/..\/..\/..\//i", "", $real); header('x-Sendfile: '.$real); header('x-Sendfile: ', TRUE); // if we get here then it didn't work - header('Content-Type: '.$ext); - + header('Content-Type: '.$ext); + @readfile($real); exit; } else { + header('HTTP/1.1 404 Not Found', TRUE); exit; } diff --git a/include/classes/AContent_lcl/ims-blti/OAuth.php b/include/classes/AContent_lcl/ims-blti/OAuth.php index 0921f3a85..773acbd25 100644 --- a/include/classes/AContent_lcl/ims-blti/OAuth.php +++ b/include/classes/AContent_lcl/ims-blti/OAuth.php @@ -149,7 +149,7 @@ public function build_signature(&$request, $consumer, $token) { $ok = openssl_sign($base_string, $signature, $privatekeyid); // Release the key resource - openssl_free_key($privatekeyid); + // openssl_free_key removed in PHP 8.0 (automatic) return base64_encode($signature); } @@ -169,7 +169,7 @@ public function check_signature(&$request, $consumer, $token, $signature) { $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); // Release the key resource - openssl_free_key($publickeyid); + // openssl_free_key removed in PHP 8.0 (automatic) return $ok == 1; } @@ -224,13 +224,6 @@ public static function from_request($http_method=NULL, $http_url=NULL, $paramete $ourpost = $_POST; // Deal with magic_quotes // http://www.php.net/manual/en/security.magicquotes.disabling.php - if ( get_magic_quotes_gpc() ) { - $outpost = array(); - foreach ($_POST as $k => $v) { - $v = stripslashes($v); - $ourpost[$k] = $v; - } - } // Add POST Parameters if they exist $parameters = array_merge($parameters, $ourpost); @@ -756,11 +749,11 @@ public static function get_headers() { public static function parse_parameters( $input ) { if (!isset($input) || !$input) return array(); - $pairs = split('&', $input); + $pairs = explode('split('&', $input)', $input); $parsed_parameters = array(); foreach ($pairs as $pair) { - $split = split('=', $pair, 2); + $split = explode('=', $pair, 2); $parameter = OAuthUtil::urldecode_rfc3986($split[0]); $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; diff --git a/include/classes/ContentManager.class.php b/include/classes/ContentManager.class.php index 515bcfce1..1c91af150 100644 --- a/include/classes/ContentManager.class.php +++ b/include/classes/ContentManager.class.php @@ -131,16 +131,24 @@ function initContent( ) { } // generate array of all the content ids in the same order that they appear in "content navigation" - $this->_menu_in_order[] = $next_content_id = $this->getNextContentID(0); - while ($next_content_id > 0) - { - $next_content_id = $this->getNextContentID($next_content_id); - - if (in_array($next_content_id, $this->_menu_in_order)) break; - else $this->_menu_in_order[] = $next_content_id; + // A brand-new (or otherwise empty) course has no content rows, so $_menu is + // empty and $_menu[0] is undefined. Skip the ordering walk in that case — + // count(null) is a fatal TypeError on PHP 8 (was only a notice on PHP 7). + if ($num_sections > 0) { + $this->_menu_in_order[] = $next_content_id = $this->getNextContentID(0); + while ($next_content_id > 0) + { + $next_content_id = $this->getNextContentID($next_content_id); + + if (in_array($next_content_id, $this->_menu_in_order)) break; + else $this->_menu_in_order[] = $next_content_id; + } + + $this->content_length = count($_menu[0]); + } else { + $this->_menu_in_order = array(); + $this->content_length = 0; } - - $this->content_length = count($_menu[0]); } // This function is called by initContent to construct $this->_menu_in_order, an array to @@ -213,16 +221,17 @@ function getContent($parent_id=-1, $length=-1) { } return $my_menu_copy; } - return $this->_menu[$parent_id]; + return isset($this->_menu[$parent_id]) ? $this->_menu[$parent_id] : array(); } function &getContentPath($content_id) { $path = array(); - $path[] = array('content_id' => $content_id, 'title' => $this->_menu_info[$content_id]['title']); - - $this->getContentPathRecursive($content_id, $path); + if (isset($this->_menu_info[$content_id])) { + $path[] = array('content_id' => $content_id, 'title' => $this->_menu_info[$content_id]['title']); + $this->getContentPathRecursive($content_id, $path); + } $path = array_reverse($path); return $path; @@ -230,9 +239,10 @@ function &getContentPath($content_id) { function getContentPathRecursive($content_id, &$path) { + if (!isset($this->_menu_info[$content_id])) { return; } $parent_id = $this->_menu_info[$content_id]['content_parent_id']; - if ($parent_id > 0) { + if ($parent_id > 0 && isset($this->_menu_info[$parent_id])) { $path[] = array('content_id' => $parent_id, 'title' => $this->_menu_info[$parent_id]['title']); $this->getContentPathRecursive($parent_id, $path); } @@ -676,17 +686,23 @@ function getNumbering($content_id) { } function getPreviousContent($content_id) { - if (is_array($this->_menu_in_order)) + if (is_array($this->_menu_in_order) && count($this->_menu_in_order) > 0) { - foreach ($this->_menu_in_order as $content_location => $this_content_id) + $content_location = null; + foreach ($this->_menu_in_order as $loc => $this_content_id) { - if ($this_content_id == $content_id) break; + if ($this_content_id == $content_id) { + $content_location = $loc; + break; + } } - + if ($content_location === null) { return NULL; } + for ($i=$content_location-1; $i >= 0; $i--) { + if (!isset($this->_menu_info[$this->_menu_in_order[$i]])) { continue; } $content_type = $this->_menu_info[$this->_menu_in_order[$i]]['content_type']; - + if ($content_type == CONTENT_TYPE_CONTENT || $content_type == CONTENT_TYPE_WEBLINK) return array('content_id' => $this->_menu_in_order[$i], 'ordering' => $this->_menu_info[$this->_menu_in_order[$i]]['ordering'], @@ -695,23 +711,29 @@ function getPreviousContent($content_id) { } return NULL; } - + function getNextContent($content_id) { - if (is_array($this->_menu_in_order)) + if (is_array($this->_menu_in_order) && count($this->_menu_in_order) > 0) { - foreach ($this->_menu_in_order as $content_location => $this_content_id) + $content_location = null; + foreach ($this->_menu_in_order as $loc => $this_content_id) { - if ($this_content_id == $content_id) break; + if ($this_content_id == $content_id) { + $content_location = $loc; + break; + } } - + if ($content_location === null) { return NULL; } + for ($i=$content_location+1; $i < count($this->_menu_in_order); $i++) { + if (!isset($this->_menu_info[$this->_menu_in_order[$i]])) { continue; } $content_type = $this->_menu_info[$this->_menu_in_order[$i]]['content_type']; - + if ($content_type == CONTENT_TYPE_CONTENT || $content_type == CONTENT_TYPE_WEBLINK) - return(array('content_id' => $this->_menu_in_order[$i], + return array('content_id' => $this->_menu_in_order[$i], 'ordering' => $this->_menu_info[$this->_menu_in_order[$i]]['ordering'], - 'title' => $this->_menu_info[$this->_menu_in_order[$i]]['title'])); + 'title' => $this->_menu_info[$this->_menu_in_order[$i]]['title']); } } return NULL; @@ -743,31 +765,41 @@ function generateSequenceCrumbs($cid) { $sequence_links['resume'] = $resume; } else { + $previous = null; + $next = null; if ($cid) { $previous = $this->getPreviousContent($cid); - $previous['title'] = htmlspecialchars($previous['title']); + if ($previous) { + $previous['title'] = htmlspecialchars($previous['title']); + } } $next = $this->getNextContent($cid ? $cid : 0); - $next['title'] = htmlspecialchars($next['title']); + if ($next) { + $next['title'] = htmlspecialchars($next['title']); + } if ($_SESSION['prefs']['PREF_NUMBERING']) { - $previous['title'] = $this->getNumbering($previous['content_id']).' '.$previous['title']; - $next['title'] = $this->getNumbering($next['content_id']).' '.$next['title']; + if ($previous) { + $previous['title'] = $this->getNumbering($previous['content_id']).' '.$previous['title']; + } + if ($next) { + $next['title'] = $this->getNumbering($next['content_id']).' '.$next['title']; + } } - $next['url'] = $_base_path.url_rewrite('content.php?cid='.$next['content_id']); - if (isset($previous['content_id'])) { + if ($next) { + $next['url'] = $_base_path.url_rewrite('content.php?cid='.$next['content_id']); + } + if ($previous && isset($previous['content_id'])) { $previous['url'] = $_base_path.url_rewrite('content.php?cid='.$previous['content_id']); } - if (isset($previous['content_id'])) { + if ($previous && isset($previous['content_id'])) { $sequence_links['previous'] = $previous; } else if ($cid) { - $previous['url'] = $_base_path . url_rewrite('index.php'); - $previous['title'] = _AT('course_home'); - $sequence_links['previous'] = $previous; + $sequence_links['previous'] = array('url' => $_base_path . url_rewrite('index.php'), 'title' => _AT('course_home')); } - if (!empty($next['content_id'])) { + if ($next && !empty($next['content_id'])) { $sequence_links['next'] = $next; } } diff --git a/include/classes/Message/Message.class.php b/include/classes/Message/Message.class.php index 9964c495b..1de4e3472 100644 --- a/include/classes/Message/Message.class.php +++ b/include/classes/Message/Message.class.php @@ -104,9 +104,19 @@ function printAbstract($type) { $result = '[' . $first . ']'; } - $terms = $item; - - /* replace the tokens with the terms */ + $terms = array_values((array)$item); + + /* replace the tokens with the terms. + * PHP 8's vsprintf throws a ValueError when fewer arguments are + * supplied than the format has placeholders (PHP 7 silently + * substituted empty strings). A translation/caller arg-count + * mismatch is common in this legacy code, so pad the arguments + * to the placeholder count and degrade gracefully instead of + * fataling the page. Extra arguments are ignored by vsprintf. */ + $placeholder_count = preg_match_all('/%(\d+\$)?[-+]?\d*(?:\.\d+)?[bcdeEfFgGosuxX]/', $result); + if (count($terms) < $placeholder_count) { + $terms = array_pad($terms, $placeholder_count, ''); + } $result = vsprintf($result, $terms); } else { @@ -128,8 +138,8 @@ function printAbstract($type) { $this->savant->assign('hide_button_no', $hide_button_no); } else if ($type == 'help') { // special case for help message, we need to check a few conditions - $a = (!isset($_GET['e']) && !$_SESSION['prefs']['PREF_HELP'] && !$_GET['h']); - $b = ($_SESSION['prefs']['PREF_CONTENT_ICONS'] == 2); + $a = (!isset($_GET['e']) && !($_SESSION['prefs']['PREF_HELP'] ?? null) && !($_GET['h'] ?? null)); + $b = (($_SESSION['prefs']['PREF_CONTENT_ICONS'] ?? null) == 2); $c = isset($_GET['e']); $d = $_SESSION['course_id']; diff --git a/include/classes/UrlRewrite/UrlParser.class.php b/include/classes/UrlRewrite/UrlParser.class.php index 4882a6a7b..f92a269d9 100644 --- a/include/classes/UrlRewrite/UrlParser.class.php +++ b/include/classes/UrlRewrite/UrlParser.class.php @@ -93,7 +93,7 @@ function parsePathinfo($pathinfo){ //Check if there are any matches for prettied query string, if not, use the actual query. if (!isset($matches[5]) || $matches[5] == ''){ - $matches[5] = $_SERVER['QUERY_STRING']; + $matches[5] = $_SERVER['QUERY_STRING'] ?? ''; } //Create object based on this path. diff --git a/include/classes/XML/XML_HTMLSax/OS/Guess.php b/include/classes/XML/XML_HTMLSax/OS/Guess.php index c828b016c..62f6dc429 100644 --- a/include/classes/XML/XML_HTMLSax/OS/Guess.php +++ b/include/classes/XML/XML_HTMLSax/OS/Guess.php @@ -128,7 +128,7 @@ function parseSignature($uname = null) if ($uname === null) { $uname = php_uname(); } - $parts = split('[[:space:]]+', trim($uname)); + $parts = preg_split('/\s+/', trim($uname)); $n = count($parts); $release = $machine = $cpu = ''; @@ -246,7 +246,7 @@ function _detectGlibcVersion() $cpp = popen("/usr/bin/cpp $tmpfile", "r"); $major = $minor = 0; while ($line = fgets($cpp, 1024)) { - if ($line{0} == '#' || trim($line) == '') { + if ($line[0] == '#' || trim($line) == '') { continue; } if (list($major, $minor) = explode(' ', trim($line))) { diff --git a/include/classes/XML/XML_HTMLSax/PEAR.php b/include/classes/XML/XML_HTMLSax/PEAR.php index 9749e1a63..4c0ce763b 100644 --- a/include/classes/XML/XML_HTMLSax/PEAR.php +++ b/include/classes/XML/XML_HTMLSax/PEAR.php @@ -760,11 +760,10 @@ function _PEAR_call_destructors() if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) { - reset($_PEAR_destructor_object_list); if (@PEAR::getStaticProperty('PEAR', 'destructlifo')) { $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); } - while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + foreach ($_PEAR_destructor_object_list as $k => $objref) { $classname = get_class($objref); while ($classname) { $destructor = "_$classname"; diff --git a/include/classes/XML/XML_HTMLSax/PEAR/Autoloader.php b/include/classes/XML/XML_HTMLSax/PEAR/Autoloader.php index d0fb0ac79..1518dd2e4 100644 --- a/include/classes/XML/XML_HTMLSax/PEAR/Autoloader.php +++ b/include/classes/XML/XML_HTMLSax/PEAR/Autoloader.php @@ -99,7 +99,7 @@ class PEAR_Autoloader extends PEAR function addAutoload($method, $classname = null) { if (is_array($method)) { - array_walk($method, create_function('$a,&$b', '$b = strtolower($b);')); + $method = array_combine(array_map('strtolower', array_keys($method)), $method); $this->_autoload_map = array_merge($this->_autoload_map, $method); } else { $this->_autoload_map[strtolower($method)] = $classname; @@ -153,7 +153,7 @@ function addAggregateObject($classname) $methods = get_class_methods($classname); foreach ($methods as $method) { // don't import priviate methods and constructors - if ($method{0} != '_' && $method != $classname) { + if ($method[0] != '_' && $method != $classname) { $this->_method_map[$method] = $obj; } } @@ -175,8 +175,7 @@ function removeAggregateObject($classname) { $ok = false; $classname = strtolower($classname); - reset($this->_method_map); - while (list($method, $obj) = each($this->_method_map)) { + foreach ($this->_method_map as $method => $obj) { if (is_a($obj, $classname)) { unset($this->_method_map[$method]); $ok = true; @@ -202,7 +201,7 @@ function removeAggregateObject($classname) * @return mixed The return value from the aggregated method, or a PEAR * error if the called method was unknown. */ - function __call($method, $args, &$retval) + function __call($method, $args) { $method = strtolower($method); if (empty($this->_method_map[$method]) && isset($this->_autoload_map[$method])) { diff --git a/include/classes/XML/XML_HTMLSax/PEAR/Common.php b/include/classes/XML/XML_HTMLSax/PEAR/Common.php index e9cf093dd..d637a1ffe 100644 --- a/include/classes/XML/XML_HTMLSax/PEAR/Common.php +++ b/include/classes/XML/XML_HTMLSax/PEAR/Common.php @@ -611,7 +611,7 @@ function buildProvidesArray($srcinfo) foreach ($methods as $method) { $function = "$class::$method"; $key = "function;$function"; - if ($method{0} == '_' || !strcasecmp($method, $class) || + if ($method[0] == '_' || !strcasecmp($method, $class) || isset($this->pkginfo['provides'][$key])) { continue; } @@ -622,7 +622,7 @@ function buildProvidesArray($srcinfo) foreach ($srcinfo['declared_functions'] as $function) { $key = "function;$function"; - if ($function{0} == '_' || isset($this->pkginfo['provides'][$key])) { + if ($function[0] == '_' || isset($this->pkginfo['provides'][$key])) { continue; } if (!strstr($function, '::') && strncasecmp($function, $pn, $pnl)) { @@ -717,7 +717,7 @@ function analyzeSourceCode($file) } switch ($token) { case T_WHITESPACE: - continue; + break; case ';': if ($interface) { $current_function = ''; diff --git a/include/classes/XML/XML_HTMLSax/PEAR/Config.php b/include/classes/XML/XML_HTMLSax/PEAR/Config.php index 81865121a..544dd61fd 100644 --- a/include/classes/XML/XML_HTMLSax/PEAR/Config.php +++ b/include/classes/XML/XML_HTMLSax/PEAR/Config.php @@ -938,8 +938,10 @@ function _readConfigDataFrom($file) return $this->raiseError("PEAR_Config::readConfigFile fopen('$file','r') failed"); } $size = filesize($file); - $rt = get_magic_quotes_runtime(); - set_magic_quotes_runtime(0); + $rt = function_exists('get_magic_quotes_runtime') ? get_magic_quotes_runtime() : 0; + if (function_exists('set_magic_quotes_runtime')) { + set_magic_quotes_runtime(0); + } if (function_exists('file_get_contents')) { fclose($fp); $contents = file_get_contents($file); @@ -951,7 +953,9 @@ function _readConfigDataFrom($file) return $this->raiseError('Configuration file "' . $file . '" is empty'); } - set_magic_quotes_runtime($rt); + if (function_exists('set_magic_quotes_runtime')) { + set_magic_quotes_runtime($rt); + } $version = false; if (preg_match('/^#PEAR_Config\s+(\S+)\s+/si', $contents, $matches)) { @@ -2014,7 +2018,7 @@ function _prependPath($path, $prepend) if (OS_WINDOWS && preg_match('/^[a-z]:/i', $path)) { if (preg_match('/^[a-z]:/i', $prepend)) { $prepend = substr($prepend, 2); - } elseif ($prepend{0} != '\\') { + } elseif ($prepend[0] != '\\') { $prepend = "\\$prepend"; } $path = substr($path, 0, 2) . $prepend . substr($path, 2); diff --git a/include/classes/XML/XML_HTMLSax/PEAR/Remote.php b/include/classes/XML/XML_HTMLSax/PEAR/Remote.php index c698f5eb1..12916a357 100644 --- a/include/classes/XML/XML_HTMLSax/PEAR/Remote.php +++ b/include/classes/XML/XML_HTMLSax/PEAR/Remote.php @@ -475,9 +475,8 @@ function _encode($php_val) } } if ($is_continuous) { - reset($php_val); $arr = array(); - while (list($k, $v) = each($php_val)) { + foreach ($php_val as $k => $v) { $arr[$k] = $this->_encode($v); } $xmlrpcval->addArray($arr); @@ -487,7 +486,7 @@ function _encode($php_val) // fall though if not numerical and continuous case "object": $arr = array(); - while (list($k, $v) = each($php_val)) { + foreach ($php_val as $k => $v) { $arr[$k] = $this->_encode($v); } $xmlrpcval->addStruct($arr); diff --git a/include/classes/XML/XML_HTMLSax/System.php b/include/classes/XML/XML_HTMLSax/System.php index b9afccf19..aa13dd06f 100644 --- a/include/classes/XML/XML_HTMLSax/System.php +++ b/include/classes/XML/XML_HTMLSax/System.php @@ -235,7 +235,7 @@ function mkDir($args) } elseif($opt[0] == 'm') { // if the mode is clearly an octal number (starts with 0) // convert it to decimal - if (strlen($opt[1]) && $opt[1]{0} == '0') { + if (strlen($opt[1]) && $opt[1][0] == '0') { $opt[1] = octdec($opt[1]); } else { // convert to int @@ -540,7 +540,7 @@ function find($args) break; case '-name': if (OS_WINDOWS) { - if ($args[$i+1]{0} == '\\') { + if ($args[$i+1][0] == '\\') { // prepend drive $args[$i+1] = addslashes(substr(getcwd(), 0, 2) . $args[$i + 1]); } diff --git a/include/classes/XML/XML_HTMLSax/XML_HTMLSax.php b/include/classes/XML/XML_HTMLSax/XML_HTMLSax.php index 64ab450cb..0b274a98a 100644 --- a/include/classes/XML/XML_HTMLSax/XML_HTMLSax.php +++ b/include/classes/XML/XML_HTMLSax/XML_HTMLSax.php @@ -194,7 +194,7 @@ function ignoreCharacter() { */ function scanCharacter() { if ($this->position < $this->length) { - return $this->rawtext{$this->position++}; + return $this->rawtext[$this->position++]; } } @@ -339,7 +339,7 @@ function XML_HTMLSax_StateParser_Lt430(& $htmlsax) { */ function scanUntilCharacters($string) { $startpos = $this->position; - while ($this->position < $this->length && strpos($string, $this->rawtext{$this->position}) === FALSE) { + while ($this->position < $this->length && strpos($string, $this->rawtext[$this->position]) === FALSE) { $this->position++; } return substr($this->rawtext, $startpos, $this->position - $startpos); @@ -352,7 +352,7 @@ function scanUntilCharacters($string) { */ function ignoreWhitespace() { while ($this->position < $this->length && - strpos(" \n\r\t", $this->rawtext{$this->position}) !== FALSE) { + strpos(" \n\r\t", $this->rawtext[$this->position]) !== FALSE) { $this->position++; } } diff --git a/include/classes/nusoap.php b/include/classes/nusoap.php index 7db799cc8..6c2c73f3b 100644 --- a/include/classes/nusoap.php +++ b/include/classes/nusoap.php @@ -306,7 +306,7 @@ function serialize_val($val,$name=false,$type=false,$name_ns=false,$type_ns=fals case (is_array($val) || $type): // detect if struct or array $valueType = $this->isArraySimpleOrStruct($val); - if($valueType=='arraySimple' || ereg('^ArrayOf',$type)){ + if($valueType=='arraySimple' || strpos($type, 'ArrayOf') === 0){ $i = 0; if(is_array($val) && count($val)> 0){ foreach($val as $v){ @@ -469,7 +469,7 @@ function contractQname($qname){ */ function expandQname($qname){ // get element prefix - if(strpos($qname,':') && !ereg('^http://',$qname)){ + if(strpos($qname,':') && strpos($qname, 'http://') !== 0){ // get unqualified name $name = substr(strstr($qname,':'),1); // get ns prefix @@ -583,7 +583,7 @@ function timestamp_to_iso8601($timestamp,$utc=true){ '([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss... '(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's - if(ereg($eregStr,$datestr,$regs)){ + if(preg_match('/' . $eregStr . '/',$datestr,$regs)){ return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]); } return false; @@ -608,7 +608,7 @@ function iso8601_to_timestamp($datestr){ '([0-9]{2}):'. // minutes mm: '([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss... '(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's - if(ereg($eregStr,$datestr,$regs)){ + if(preg_match('/' . $eregStr . '/',$datestr,$regs)){ // not utc if($regs[8] != 'Z'){ $op = substr($regs[8],0,1); @@ -887,7 +887,7 @@ function schemaStartElement($parser, $name, $attrs) { if(count($attrs) > 0){ foreach($attrs as $k => $v){ // if ns declarations, add to class level array of valid namespaces - if(ereg("^xmlns",$k)){ + if(strpos($k, 'xmlns') === 0){ //$this->xdebug("$k: $v"); //$this->xdebug('ns_prefix: '.$this->getPrefix($k)); if($ns_prefix = substr(strrchr($k,':'),1)){ @@ -984,7 +984,7 @@ function schemaStartElement($parser, $name, $attrs) { $this->currentComplexType = $attrs['name']; $this->complexTypes[$this->currentComplexType] = $attrs; $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType'; - if(isset($attrs['base']) && ereg(':Array$',$attrs['base'])){ + if(isset($attrs['base']) && substr($attrs['base'], -6) === ':Array'){ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array'; } else { $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct'; @@ -995,7 +995,7 @@ function schemaStartElement($parser, $name, $attrs) { $this->currentElement = false; $this->complexTypes[$this->currentComplexType] = $attrs; $this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType'; - if(isset($attrs['base']) && ereg(':Array$',$attrs['base'])){ + if(isset($attrs['base']) && substr($attrs['base'], -6) === ':Array'){ $this->complexTypes[$this->currentComplexType]['phpType'] = 'array'; } else { $this->complexTypes[$this->currentComplexType]['phpType'] = 'struct'; @@ -1586,7 +1586,7 @@ function soap_transport_http($url){ $this->uri = $this->path; // build headers - ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev); + preg_match('/\$Revision: ([^ ]+)/', $this->revision, $rev); $this->outgoing_headers['User-Agent'] = $this->title.'/'.$this->version.' ('.$rev[1].')'; if (!isset($u['port'])) { $this->outgoing_headers['Host'] = $this->host; @@ -1846,7 +1846,9 @@ function setEncoding($enc='gzip, deflate'){ $this->outgoing_headers['Accept-Encoding'] = $enc; $this->outgoing_headers['Connection'] = 'close'; $this->persistentConnection = false; - set_magic_quotes_runtime(0); + if (function_exists('set_magic_quotes_runtime')) { + set_magic_quotes_runtime(0); + } // deprecated $this->encoding = $enc; } @@ -2010,7 +2012,7 @@ function getResponse(){ } } // remove 100 header - if(isset($lb) && ereg('^HTTP/1.1 100',$data)){ + if(isset($lb) && strpos($data, 'HTTP/1.1 100') === 0){ unset($lb); $data = ''; }// @@ -2098,7 +2100,7 @@ function getResponse(){ curl_close($this->ch); // remove 100 header - if (ereg('^HTTP/1.1 100',$data)) { + if (strpos($data, 'HTTP/1.1 100') === 0) { if ($pos = strpos($data,"\r\n\r\n")) { $data = ltrim(substr($data,$pos)); } elseif($pos = strpos($data,"\n\n") ) { @@ -2138,7 +2140,7 @@ function getResponse(){ // parse elements into array $digestElements = explode(', ', $digestString); - while (list($key, $val) = each($digestElements)) { + foreach ($digestElements as $key => $val) { $tempElement = explode('=', $val); $digestRequest[$tempElement[0]] = str_replace("\"", '', $tempElement[1]); } @@ -2313,11 +2315,12 @@ function service($data){ $qs = $QUERY_STRING; } - if(isset($qs) && ereg('wsdl', $qs) ){ + if(isset($qs) && strpos($qs, 'wsdl') !== false ){ // This is a request for WSDL if($this->externalWSDLURL){ if (strpos($this->externalWSDLURL,"://")!==false) { // assume URL header('Location: '.$this->externalWSDLURL); + exit; } else { // assume file header("Content-Type: text/xml\r\n"); $fp = fopen($this->externalWSDLURL, 'r'); @@ -2373,7 +2376,7 @@ function parse_http_headers() { // get the character encoding of the incoming request if(strpos($this->headers['Content-Type'],'=')){ $enc = str_replace('"','',substr(strstr($this->headers["Content-Type"],'='),1)); - if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){ + if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',$enc)){ $this->xml_encoding = strtoupper($enc); } else { $this->xml_encoding = 'US-ASCII'; @@ -2700,7 +2703,7 @@ function send_response() { $payload .= ""; } $this->outgoing_headers[] = "Server: $this->title Server v$this->version"; - ereg('\$Revisio' . 'n: ([^ ]+)', $this->revision, $rev); + preg_match('/\$Revision: ([^ ]+)/', $this->revision, $rev); $this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this->version (".$rev[1].")"; // Let the Web server decide about this //$this->outgoing_headers[] = "Connection: Close\r\n"; @@ -3301,7 +3304,7 @@ function start_element($parser, $name, $attrs) $this->currentSchema->schemaStartElement($parser, $name, $attrs); $this->debug_str .= $this->currentSchema->debug_str; $this->currentSchema->debug_str = ''; - } elseif (ereg('schema$', $name)) { + } elseif (substr($name, -7) === 'schema') { // $this->debug("startElement for $name ($attrs[name]). status = $this->status (".$this->getLocalPart($name).")"); $this->status = 'schema'; $this->currentSchema = new xmlschema('', '', $this->namespaces); @@ -3316,7 +3319,7 @@ function start_element($parser, $name, $attrs) $this->depth_array[$depth] = $pos; $this->message[$pos] = array('cdata' => ''); // get element prefix - if (ereg(':', $name)) { + if (strpos($name, ':') !== false) { // get ns prefix $prefix = substr($name, 0, strpos($name, ':')); // get ns @@ -3328,7 +3331,7 @@ function start_element($parser, $name, $attrs) if (count($attrs) > 0) { foreach($attrs as $k => $v) { // if ns declarations, add to class level array of valid namespaces - if (ereg("^xmlns", $k)) { + if (strpos($k, 'xmlns') === 0) { if ($ns_prefix = substr(strrchr($k, ':'), 1)) { $this->namespaces[$ns_prefix] = $v; } else { @@ -3505,7 +3508,7 @@ function start_element($parser, $name, $attrs) */ function end_element($parser, $name){ // unset schema status - if (/*ereg('types$', $name) ||*/ ereg('schema$', $name)) { + if (/*preg_match('/types$/', $name) ||*/ substr($name, -7) === 'schema') { $this->status = ""; $this->schemas[$this->currentSchema->schemaTargetNamespace][] = $this->currentSchema; } @@ -4498,7 +4501,7 @@ function start_element($parser, $name, $attrs) { $key_localpart = $this->getLocalPart($key); // if ns declarations, add to class level array of valid namespaces if($key_prefix == 'xmlns'){ - if(ereg('^http://www.w3.org/[0-9]{4}/XMLSchema$',$value)){ + if(preg_match('/^http:\/\/www\.w3\.org\/[0-9]{4}\/XMLSchema$/', $value)){ $this->XMLSchemaVersion = $value; $this->namespaces['xsd'] = $this->XMLSchemaVersion; $this->namespaces['xsi'] = $this->XMLSchemaVersion.'-instance'; @@ -4531,7 +4534,7 @@ function start_element($parser, $name, $attrs) { [6] nextDimension ::= Digit+ ',' */ $expr = '([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\[([0-9]+),?([0-9]*)\]'; - if(ereg($expr,$value,$regs)){ + if(preg_match($expr,$value,$regs)){ $this->message[$pos]['typePrefix'] = $regs[1]; $this->message[$pos]['arrayTypePrefix'] = $regs[1]; if (isset($this->namespaces[$regs[1]])) { @@ -5150,7 +5153,7 @@ function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) { // detect transport switch(true){ // http(s) - case ereg('^http',$this->endpoint): + case (strpos($this->endpoint, 'http') === 0): $this->debug('transporting via HTTP'); if($this->persistentConnection == true && is_object($this->persistentConnection)){ $http =& $this->persistentConnection; @@ -5172,10 +5175,10 @@ function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) { $http->setEncoding($this->http_encoding); } $this->debug('sending message, length: '.strlen($msg)); - if(ereg('^http:',$this->endpoint)){ + if(strpos($this->endpoint, 'http:') === 0){ //if(strpos($this->endpoint,'http:')){ $this->responseData = $http->send($msg,$timeout,$response_timeout); - } elseif(ereg('^https',$this->endpoint)){ + } elseif(strpos($this->endpoint, 'https') === 0){ //} elseif(strpos($this->endpoint,'https:')){ //if(phpversion() == '4.3.0-dev'){ //$response = $http->send($msg,$timeout,$response_timeout); diff --git a/include/classes/pclzip.lib.php b/include/classes/pclzip.lib.php index 89e862fbc..e2ea17359 100644 --- a/include/classes/pclzip.lib.php +++ b/include/classes/pclzip.lib.php @@ -3393,7 +3393,7 @@ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + if (preg_match('/' . $p_options[PCLZIP_OPT_BY_EREG] . '/', $v_header['stored_filename'])) { $v_extract = true; } } @@ -4774,7 +4774,7 @@ function privDeleteByRule(&$p_result_list, &$p_options) else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + if (preg_match('/' . $p_options[PCLZIP_OPT_BY_EREG] . '/', $v_header_list[$v_nb_extracted]['stored_filename'])) { $v_found = true; } } diff --git a/include/classes/phpmailer/class.phpmailer.php b/include/classes/phpmailer/class.phpmailer.php index b3ca55fc4..df37bd2c1 100644 --- a/include/classes/phpmailer/class.phpmailer.php +++ b/include/classes/phpmailer/class.phpmailer.php @@ -1087,12 +1087,16 @@ function EncodeFile ($path, $encoding = "base64") { $this->SetError($this->Lang("file_open") . $path); return ""; } - $magic_quotes = get_magic_quotes_runtime(); - set_magic_quotes_runtime(0); + if (function_exists('get_magic_quotes_runtime')) { + $magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + } $file_buffer = fread($fd, filesize($path)); $file_buffer = $this->EncodeString($file_buffer, $encoding); fclose($fd); - set_magic_quotes_runtime($magic_quotes); + if (function_exists('set_magic_quotes_runtime')) { + set_magic_quotes_runtime($magic_quotes); + } return $file_buffer; } diff --git a/include/classes/phpmailer/class.smtp.php b/include/classes/phpmailer/class.smtp.php index 28af3b6f8..523d485df 100644 --- a/include/classes/phpmailer/class.smtp.php +++ b/include/classes/phpmailer/class.smtp.php @@ -323,7 +323,7 @@ function Data($msg_data) { $max_line_length = 998; # used below; set here for ease in change - while(list(,$line) = @each($lines)) { + foreach ($lines as $line) { $lines_out = null; if($line == "" && $in_headers) { $in_headers = false; @@ -350,7 +350,7 @@ function Data($msg_data) { $lines_out[] = $line; # now send the lines to the server - while(list(,$line_out) = @each($lines_out)) { + foreach ($lines_out as $line_out) { if(strlen($line_out) > 0) { if(substr($line_out, 0, 1) == ".") { @@ -434,7 +434,7 @@ function Expand($name) { # parse the reply and place in our array to return to user $entries = explode($this->CRLF,$rply); - while(list(,$l) = @each($entries)) { + foreach ($entries as $l) { $list[] = substr($l,4); } diff --git a/include/classes/sqlutility.class.php b/include/classes/sqlutility.class.php index 05623f0be..306095856 100644 --- a/include/classes/sqlutility.class.php +++ b/include/classes/sqlutility.class.php @@ -197,7 +197,7 @@ public static function queryFromFile($sql_file_path, $table_prefix = null, $in_p if($prefixed_query[1] == 'CREATE TABLE' || $prefixed_query[1] == 'CREATE TABLE IF NOT EXISTS') { $result = queryDB($prefixed_query[0], array(), FALSE, FALSE); - if(count($result) > 0){ + if($result !== false){ if ($in_plain_msg) { $progress[] = 'Table '.$table . ' created successfully.'; } else { diff --git a/include/header.inc.php b/include/header.inc.php index 621148ee8..dde907507 100644 --- a/include/header.inc.php +++ b/include/header.inc.php @@ -191,7 +191,7 @@ /**** Toggle to switch between mobile and responsive themes ****/ -if($_GET['mobile'] == '2'){ +if(($_GET['mobile'] ?? '') == '2'){ global $msg; unset($_SESSION['prefs']['PREF_RESPONSIVE'] ); if(isset($_GET['cid'])){ @@ -203,7 +203,7 @@ $msg->addFeedback('MOBILE_ON'); header('Location:'.$_SERVER['PHP_SELF'].$cid); exit; -} else if($_GET['mobile'] == '1') { +} else if(($_GET['mobile'] ?? '') == '1') { global $msg; $_SESSION['prefs']['PREF_RESPONSIVE'] = 1; if(isset($_GET['cid'])){ @@ -243,9 +243,14 @@ if($_SESSION['tool_origin']['url'] == $_base_href.$current_page){ unset($_SESSION['tool_origin']); unset($back_to_page); - }else if($_pages[$mod_path]['parent'] != 'tools/index.php'){ - $back_to_page['title'] = _AT($_pages[$_pages[$mod_path]['parent']]['title_var']); - $back_to_page['url'] = $_base_href.$_pages[$mod_path]['parent']; + }else if(isset($_pages[$mod_path]['parent']) && $_pages[$mod_path]['parent'] != 'tools/index.php'){ + $parent_of_mod = $_pages[$mod_path]['parent']; + if (isset($_pages[$parent_of_mod]['title_var'])) { + $back_to_page['title'] = _AT($_pages[$parent_of_mod]['title_var']); + } else { + $back_to_page['title'] = ''; + } + $back_to_page['url'] = $_base_href.$parent_of_mod; } else{ $back_to_page = $_SESSION['tool_origin']; @@ -307,9 +312,9 @@ if (defined('HOME_URL') && HOME_URL) { $_top_level_pages[] = array('url' => HOME_URL, 'title' => _AT('home')); } -} else if ($_SESSION['course_id'] < 0) { +} else if (isset($_SESSION['course_id']) && $_SESSION['course_id'] < 0) { $section_title = _AT('administration'); -} else if (!$_SESSION['course_id']) { +} else if (!isset($_SESSION['course_id']) || !$_SESSION['course_id']) { $section_title = _AT('my_start_page'); } @@ -346,7 +351,7 @@ $rows_courses = queryDB($sql, array(TABLE_PREFIX, $_SESSION['member_id'])); $nav_courses = array(); /* the list of courses we're enrolled in or own */ - foreach($rows_courses as $row){ + if (is_array($rows_courses)) foreach($rows_courses as $row){ //Truncate course title if it's > 45. $system_courses[$row['course_id']]['title'] = htmlentities($system_courses[$row['course_id']]['title'], ENT_QUOTES, 'UTF-8'); $nav_courses[$row['course_id']] = validate_length($system_courses[$row['course_id']]['title'], 45, VALIDATE_LENGTH_FOR_DISPLAY); @@ -386,9 +391,10 @@ */ } -function admin_switch(){ - if($_SESSION['is_admin'] > 0) {?> -
+function admin_switch(){ + error_log('[ATUTOR-MANAGE-DIAG] page='.$_SERVER['PHP_SELF'].' course_id='.var_export($_SESSION['course_id']??null,true).' member_id='.var_export($_SESSION['member_id']??null,true).' valid_user='.var_export($_SESSION['valid_user']??null,true).' is_admin='.var_export($_SESSION['is_admin']??null,true).' privileges='.var_export($_SESSION['privileges']??null,true)); +if(isset($_SESSION['is_admin']) && $_SESSION['is_admin'] > 0) {?> +
'."\n"; } diff --git a/install/include/header.php b/install/include/header.php index 69f517f15..4b2a0d962 100644 --- a/install/include/header.php +++ b/install/include/header.php @@ -11,7 +11,7 @@ if (!defined('AT_INSTALLER_INCLUDE_PATH')) { exit; } error_reporting(E_ALL ^ E_NOTICE); -if ($step < 4) { +if (isset($step) && $step < 4) { error_reporting(0); include('../include/config.inc.php'); error_reporting(E_ALL ^ E_NOTICE); diff --git a/install/include/step2.php b/install/include/step2.php index 94bd97cca..939045a37 100644 --- a/install/include/step2.php +++ b/install/include/step2.php @@ -13,29 +13,33 @@ if (!defined('AT_INSTALLER_INCLUDE_PATH') || !defined('AT_INCLUDE_PATH')) { exit; } include(AT_INCLUDE_PATH . 'install/install.inc.php'); -if(isset($_POST['submit'])) { +if(isset($_POST['submit']) && isset($_POST['db_name'])) { //check DB & table connection - $db = create_and_switch_db($_POST['db_host'], $_POST['db_port'], $_POST['db_login'], $_POST['db_password'], $_POST['tb_prefix'], $_POST['db_name'], true); - - if (!isset($errors)) { - - $sqlUtility = new SqlUtility(); - $sqlUtility->queryFromFile(AT_INCLUDE_PATH . 'install/db/atutor_schema.sql', $addslashes($_POST['tb_prefix'])); - $sqlUtility->queryFromFile(AT_INCLUDE_PATH . 'install/db/atutor_language_text.sql', $addslashes($_POST['tb_prefix'])); - - if (!$errors) { - print_progress($step); - unset($_POST['submit']); - unset($_POST['action']); - store_steps($step); - print_feedback($progress); - - echo ' - '; - print_hidden(3); - echo '

'; - return; + if (empty($_POST['db_host']) || empty($_POST['db_port']) || empty($_POST['db_login']) || empty($_POST['db_name'])) { + $errors[] = 'Please fill in all required database fields (Hostname, Port, Username, and Database Name).'; + } else { + $db = create_and_switch_db($_POST['db_host'], $_POST['db_port'], $_POST['db_login'], $_POST['db_password'], $_POST['tb_prefix'], $_POST['db_name'], true); + + if (!isset($errors)) { + + $sqlUtility = new SqlUtility(); + $sqlUtility->queryFromFile(AT_INCLUDE_PATH . 'install/db/atutor_schema.sql', $addslashes($_POST['tb_prefix'])); + $sqlUtility->queryFromFile(AT_INCLUDE_PATH . 'install/db/atutor_language_text.sql', $addslashes($_POST['tb_prefix'])); + + if (!$errors) { + print_progress($step); + unset($_POST['submit']); + unset($_POST['action']); + store_steps($step); + print_feedback($progress); + + echo '
+ '; + print_hidden(3); + echo '

'; + return; + } } } } @@ -75,12 +79,12 @@ *
The username to the database server. - + *
The password to the database server. - + *
diff --git a/install/include/step3.php b/install/include/step3.php index 13a43fd70..c90c1a9be 100644 --- a/install/include/step3.php +++ b/install/include/step3.php @@ -14,24 +14,29 @@ include(AT_INCLUDE_PATH . 'install/install.inc.php'); -if(isset($_POST['submit']) && ($_POST['action'] == 'process')) { +if(isset($_POST['submit']) && isset($_POST['action']) && ($_POST['action'] == 'process')) { + error_log('[ATUTOR-DIAG] step3: entering POST processing'); //$db = at_db_connect($_POST['step2']['db_host'],$_POST['step2']['db_port'],$_POST['step2']['db_login'],$_POST['step2']['db_password']); //at_db_select($_POST['step2']['db_name'], $db); + error_log('[ATUTOR-DIAG] step3: about to connect DB'); if(defined('MYSQLI_ENABLED')){ - $db = at_db_connect($_POST['step2']['db_host'],$_POST['step2']['db_port'],$_POST['step2']['db_login'],urldecode($_POST['step2']['db_password']), $_POST['step2']['db_name']); + $db = at_db_connect($_POST['step2']['db_host'],$_POST['step2']['db_port'],$_POST['step2']['db_login'],urldecode($_POST['step2']['db_password']), $_POST['step2']['db_name']); }else{ $db = at_db_connect($_POST['step2']['db_host'],$_POST['step2']['db_port'],$_POST['step2']['db_login'],urldecode($_POST['step2']['db_password']), ''); at_db_select($_POST['step2']['db_name'], $db); } - + error_log('[ATUTOR-DIAG] step3: DB connected'); + + error_log('[ATUTOR-DIAG] step3: about to call install_step_accounts'); install_step_accounts($_POST['admin_username'], $_POST['form_admin_password_hidden'], $_POST['admin_email'], $_POST['site_name'], $_POST['email'], $_POST['account_username'], $_POST['form_account_password_hidden'], $_POST['account_fname'], $_POST['account_lname'], $_POST['account_email'], $_POST['just_social'], $_POST['home_url'], get_atutor_installation_path(AT_INSTALLER_INCLUDE_PATH), - $_POST['step2']['db_host'], $_POST['step2']['db_port'], $_POST['step2']['db_login'], + $_POST['step2']['db_host'], $_POST['step2']['db_port'], $_POST['step2']['db_login'], urldecode($_POST['step2']['db_password']), $_POST['step2']['db_name'], $_POST['step2']['tb_prefix'], true); - + error_log('[ATUTOR-DIAG] step3: install_step_accounts returned'); + if (!isset($errors)) { unset($_POST['admin_username']); unset($_POST['form_admin_password_hidden']); @@ -43,14 +48,18 @@ unset($_POST['email']); unset($_POST['site_name']); unset($_POST['just_social']); - + unset($errors); unset($_POST['submit']); unset($action); + error_log('[ATUTOR-DIAG] step3: about to store_steps'); store_steps($step); + error_log('[ATUTOR-DIAG] step3: store_steps done, step was '.$step.' now incrementing'); $step++; return; - } + } else { + error_log('[ATUTOR-DIAG] step3: errors found, not advancing'); + } } print_progress($step); @@ -59,7 +68,7 @@ print_errors($errors); } -if (isset($_POST['step1']['old_version']) && $_POST['upgrade_action']) { +if (isset($_POST['step1']['old_version']) && isset($_POST['upgrade_action']) && $_POST['upgrade_action']) { $defaults['admin_username'] = urldecode($_POST['step1']['admin_username']); $defaults['admin_email'] = urldecode($_POST['step1']['admin_email']); @@ -142,8 +151,8 @@ function encrypt_password() *
Deploy ATutor as just a Social Networking platform? (without LMS) - /> - /> + /> + /> diff --git a/install/include/step4.php b/install/include/step4.php index 354e51aaf..1328386cf 100644 --- a/install/include/step4.php +++ b/install/include/step4.php @@ -12,26 +12,34 @@ if (!defined('AT_INCLUDE_PATH')) { exit; } +error_log('[ATUTOR-DIAG] step4: start'); if (isset($_POST['submit'])) { + error_log('[ATUTOR-DIAG] step4: POST submit detected'); $_POST['content_dir'] = $stripslashes($_POST['content_dir']); unset($errors); if (!file_exists($_POST['content_dir']) || !realpath($_POST['content_dir'])) { + error_log('[ATUTOR-DIAG] step4: content_dir not exist'); $errors[] = 'Content Directory entered does not exist.'; } else if (!is_dir($_POST['content_dir'])) { + error_log('[ATUTOR-DIAG] step4: content_dir not directory'); $errors[] = 'Content Directory is not a directory.'; } else if (!is_writable($_POST['content_dir'])){ + error_log('[ATUTOR-DIAG] step4: content_dir not writable'); $errors[] = 'The Content Directory is not writable. To make it writable, at the command prompt from within the ATutor directory enter the command chmod 2777 content'; } else { + error_log('[ATUTOR-DIAG] step4: about to include install.inc.php and create_content_subdir'); include(AT_INCLUDE_PATH . 'install/install.inc.php'); $_POST['content_dir'] = realpath(urldecode($_POST['content_dir'])); create_content_subdir($_POST['content_dir'], '../images/index.html', true); + error_log('[ATUTOR-DIAG] step4: create_content_subdir done'); } if (!isset($errors)) { + error_log('[ATUTOR-DIAG] step4: no errors, advancing'); unset($errors); unset($_POST['submit']); unset($action); @@ -50,6 +58,7 @@ $step++; return; } else { + error_log('[ATUTOR-DIAG] step4: errors found'); // kludge to fix the missing slashes when magic_quotes_gpc is On if ($addslashes != $my_add_null_slashes) { $_POST['content_dir'] = addslashes($_POST['content_dir']); @@ -118,15 +127,25 @@ $headers[] = ''; } } else { - $fp = @fsockopen($host, $port, $errno, $errstr, 15); - - if($fp) { - $head = 'HEAD '.@$path. " HTTP/1.0\r\nHost: ".@$host."\r\n\r\n"; - fputs($fp, $head); - while(!feof($fp)) { - if ($header = trim(fgets($fp, 1024))) { - $headers[] = $header; + // PHP built-in server is single-threaded; fsockopen to self deadlocks. + // Skip the test and assume get.php works if this is the built-in server. + if (isset($_SERVER['SERVER_SOFTWARE']) && stripos($_SERVER['SERVER_SOFTWARE'], 'PHP') !== false) { + $headers[] = 'ATutor-Get: OK'; + } else { + $fp = @fsockopen($host, $port, $errno, $errstr, 15); + + if($fp) { + $head = 'HEAD '.@$path. " HTTP/1.0\r\nHost: ".@$host."\r\n\r\n"; + fputs($fp, $head); + $loop_count = 0; + while(!feof($fp)) { + $loop_count++; + if ($loop_count > 100) { break; } + if ($header = trim(fgets($fp, 1024))) { + $headers[] = $header; + } } + @fclose($fp); } } } diff --git a/install/include/step6.php b/install/include/step6.php index b0e57074c..f87155d74 100644 --- a/install/include/step6.php +++ b/install/include/step6.php @@ -12,24 +12,32 @@ if (!defined('AT_INCLUDE_PATH')) { exit; } -require('../svn.php'); +$svn_data = ''; +if (file_exists('../svn.php')) { + require('../svn.php'); +} -if ($svn_data <> '') $svn_data = explode("\n", $svn_data); +if (!empty($svn_data) && is_string($svn_data)) { + $svn_data = explode("\n", $svn_data); +} -if (substr($svn_data[1], 0, 1) == 'r') { +if (is_array($svn_data) && isset($svn_data[1]) && substr($svn_data[1], 0, 1) == 'r') { $svn_data = $svn_data[1]; -} else if (substr($svn_data[2], 0, 1) == 'r') { +} else if (is_array($svn_data) && isset($svn_data[2]) && substr($svn_data[2], 0, 1) == 'r') { $svn_data = $svn_data[2]; } -if (count($svn_data) > 1) { +if (is_array($svn_data) && count($svn_data) > 1) { $build = 'unknown'; $build_date = date('Y-m-d H:i:s'); -} else { +} else if (is_string($svn_data) && !empty($svn_data)) { $svn_data = explode(' ', $svn_data); $build = $svn_data[0]; $build_date = $svn_data[4] .' '. $svn_data[5]; +} else { + $build = 'unknown'; + $build_date = date('Y-m-d H:i:s'); } if (!$build) { diff --git a/install/include/ustep_content_conversion.php b/install/include/ustep_content_conversion.php index e1607c96c..f3266c691 100644 --- a/install/include/ustep_content_conversion.php +++ b/install/include/ustep_content_conversion.php @@ -85,7 +85,7 @@ function reconstruct($tree, $order, $content_parent_id, $table_prefix){ if (!is_array($tree)){ $sql = 'UPDATE '.$table_prefix."content SET ordering=$order, content_parent_id=$content_parent_id WHERE content_id=$tree"; - queryDB($sql, array()) + queryDB($sql, array()); return; } foreach ($tree as $k=>$v){ @@ -113,7 +113,7 @@ function reconstruct($tree, $order, $content_parent_id, $table_prefix){ . '1)'; $result = queryDB($sql, array()); - if($result > 0) + if($result > 0) { $folder_id = at_insert_id(); reconstruct($v, '', $folder_id, $table_prefix); } else { diff --git a/install/index.php b/install/index.php index def6f6f5f..856cc5d32 100644 --- a/install/index.php +++ b/install/index.php @@ -169,7 +169,7 @@ JPEG Support - '; echo $good; } else { @@ -338,7 +338,7 @@ ATutor has indicated that the 'mbstring' library is missing from the PHP.
We strongly encourage you to install the 'mbstring' library before continuing, however, if you choose not to install the library from PHP, a third party library within ATutor will be used.

For production systems, we strongly encourage you to install the PHP with mbstring support.

+ On Debian/Ubuntu: sudo apt-get install php-mbstring then restart your web server.

You may choose to by pass the mbstring check for the installation at your own risk by clicking continue.
diff --git a/install/install.php b/install/install.php index 06f55da67..092c37413 100644 --- a/install/install.php +++ b/install/install.php @@ -19,17 +19,22 @@ require(AT_INSTALLER_INCLUDE_PATH.'common.inc.php'); require_once(AT_INCLUDE_PATH.'lib/mysql_connect.inc.php'); -if (!$new_version = $_POST['new_version']) { +if (isset($_POST['new_version']) && $_POST['new_version']) { + $new_version = $_POST['new_version']; +} else if (isset($_POST['step2']['new_version'])) { $new_version = $_POST['step2']['new_version']; +} else { + $new_version = ''; } -$step = intval($_POST['step']); +error_log('[ATUTOR-DIAG] install.php start step='.$_POST['step'] ?? 'none'); +$step = isset($_POST['step']) ? intval($_POST['step']) : 0; if ($step == 0) { $step = 1; } -if ($_POST['submit'] == 'I Disagree'){ +if (isset($_POST['submit']) && $_POST['submit'] == 'I Disagree'){ Header ("Location: index.php"); } @@ -37,38 +42,47 @@ /* agree to terms of use */ if ($step == 1) { + error_log('[ATUTOR-DIAG] install.php including step1'); require(AT_INSTALLER_INCLUDE_PATH.'step1.php'); } /* db */ if ($step == 2) { + error_log('[ATUTOR-DIAG] install.php including step2'); require(AT_INSTALLER_INCLUDE_PATH.'step2.php'); } /* preferences */ if ($step == 3) { + error_log('[ATUTOR-DIAG] install.php including step3'); require(AT_INSTALLER_INCLUDE_PATH.'step3.php'); + error_log('[ATUTOR-DIAG] install.php back from step3, step='.$step); } /* content directory */ if ($step == 4) { + error_log('[ATUTOR-DIAG] install.php including step4'); require(AT_INSTALLER_INCLUDE_PATH.'step4.php'); } /* directory permissions and generating the config.inc.php file */ if ($step == 5) { + error_log('[ATUTOR-DIAG] install.php including step5'); require(AT_INSTALLER_INCLUDE_PATH.'step5.php'); } /* anonymous data collection */ -if ($step == 6) { +if ($step == 6) { + error_log('[ATUTOR-DIAG] install.php including step6'); require(AT_INSTALLER_INCLUDE_PATH.'step6.php'); } /* done! */ -if ($step == 7) { +if ($step == 7) { + error_log('[ATUTOR-DIAG] install.php including step7'); require(AT_INSTALLER_INCLUDE_PATH.'step7.php'); } require(AT_INSTALLER_INCLUDE_PATH.'footer.php'); +error_log('[ATUTOR-DIAG] install.php done'); ?> \ No newline at end of file diff --git a/mods/_core/backups/classes/TableBackup.class.php b/mods/_core/backups/classes/TableBackup.class.php index d784a23ca..dae9bd19b 100644 --- a/mods/_core/backups/classes/TableBackup.class.php +++ b/mods/_core/backups/classes/TableBackup.class.php @@ -314,7 +314,7 @@ function resolveBkpOwner($id) { global $db; $sql = 'SELECT member_id FROM %scourses WHERE course_id = %d '; - $row = queryDB($sql, array(TABLE_PREFIX, %id)); + $row = queryDB($sql, array(TABLE_PREFIX, $id)); if (!$row) { echo 'Fatal SQL error occured in TableBackup:resolveBkpOwner: ' . at_db_error() . diff --git a/mods/_core/content/module.php b/mods/_core/content/module.php index b5573293a..2210e5bd8 100644 --- a/mods/_core/content/module.php +++ b/mods/_core/content/module.php @@ -58,8 +58,8 @@ } else { $this->_pages['mods/_core/editor/edit_content_folder.php']['title_var'] = 'edit_content_folder'; } -if($_SESSION['is_admin'] > 0 || authenticate(AT_PRIV_CONTENT, TRUE)){ - $cid = intval($_GET['cid']); +if((isset($_SESSION['is_admin']) && $_SESSION['is_admin'] > 0) || authenticate(AT_PRIV_CONTENT, TRUE)){ + $cid = intval($_GET['cid'] ?? 0); $_pages_i['mods/_core/editor/edit_content.php']['title_var'] = 'edit_content'; $_pages_i['mods/_core/editor/edit_content.php']['other_parent'] = 'content.php'; $_pages_i['mods/_core/editor/add_content.php']['title_var'] = 'add_content'; diff --git a/mods/_core/courses/admin/default_mods.php b/mods/_core/courses/admin/default_mods.php index 8b6329190..ff760e99c 100644 --- a/mods/_core/courses/admin/default_mods.php +++ b/mods/_core/courses/admin/default_mods.php @@ -95,7 +95,7 @@ } if (isset($_POST['submit'])) { - if (isset($_POST['main'])) { + if (isset($_POST['main']) && is_array($_POST['main'])) { $_POST['main'] = array_unique($_POST['main']); $_POST['main'] = array_filter($_POST['main']); // remove empties $main_defaults = implode('|', $_POST['main']); @@ -104,7 +104,7 @@ $main_defaults = ''; } - if (isset($_POST['home'])) { + if (isset($_POST['home']) && is_array($_POST['home'])) { $_POST['home'] = array_unique($_POST['home']); $_POST['home'] = array_filter($_POST['home']); // remove empties $home_defaults = implode('|', $_POST['home']); diff --git a/mods/_core/courses/lib/course.inc.php b/mods/_core/courses/lib/course.inc.php index f9d965622..9e410b4fa 100644 --- a/mods/_core/courses/lib/course.inc.php +++ b/mods/_core/courses/lib/course.inc.php @@ -142,8 +142,12 @@ function add_update_course($course_data, $isadmin = FALSE) { $min_release = "0$min_release"; } $release_date = "$year_release-$month_release-$day_release $hour_release:$min_release:00"; + // Date is built entirely from intval()'d parts, so it is safe to embed. + $release_date_sql = "release_date='$release_date'"; } else { - $release_date = NULL; + // Use the unquoted NULL keyword; an empty string ('') is rejected by + // MySQL strict mode for datetime columns. + $release_date_sql = "release_date=NULL"; } if ($course_data['end_date']) { @@ -170,8 +174,12 @@ function add_update_course($course_data, $isadmin = FALSE) { $min_end = "0$min_end"; } $end_date = "$year_end-$month_end-$day_end $hour_end:$min_end:00"; + // Date is built entirely from intval()'d parts, so it is safe to embed. + $end_date_sql = "end_date='$end_date'"; } else { - $end_date = NULL; + // Use the unquoted NULL keyword; an empty string ('') is rejected by + // MySQL strict mode for datetime columns. + $end_date_sql = "end_date=NULL"; } $initial_content_info = explode('_', $course_data['initial_content'], 2); @@ -259,17 +267,17 @@ function add_update_course($course_data, $isadmin = FALSE) { copyright='%s', icon='%s', banner='%s', - release_date='%s', - end_date='%s' + $release_date_sql, + $end_date_sql $menu_defaults"; - $result = queryDB($sql, array(TABLE_PREFIX, - $course_data['course'], - $course_data['instructor'], - $course_data['access'], - $course_data['title'], - $course_data['description'], - $course_data['course_dir_name'], + $result = queryDB($sql, array(TABLE_PREFIX, + $course_data['course'], + $course_data['instructor'], + $course_data['access'], + $course_data['title'], + $course_data['description'], + $course_data['course_dir_name'], $course_data['category_parent'], $course_data['content_packaging'], $course_data['notify'], @@ -279,9 +287,7 @@ function add_update_course($course_data, $isadmin = FALSE) { $course_data['rss'], $course_data['copyright'], $course_data['icon'], - $course_data['banner'], - $release_date, - $end_date)); + $course_data['banner'])); if (!$result) { diff --git a/mods/_core/courses/module.php b/mods/_core/courses/module.php index b429a88f3..9be4281aa 100644 --- a/mods/_core/courses/module.php +++ b/mods/_core/courses/module.php @@ -13,9 +13,10 @@ // for admin if (admin_authenticate(AT_ADMIN_PRIV_COURSES, TRUE) || admin_authenticate(AT_ADMIN_PRIV_ADMIN, TRUE)) { //$sql = "SELECT * from ".TABLE_PREFIX."modules WHERE dir_name = '_core/services' && status ='2'"; + $service_installed = false; $sql = "SELECT * from %smodules WHERE dir_name = '_core/services' && status ='2'"; $result = queryDB($sql, array(TABLE_PREFIX), TRUE); - if(count($result) > 0){ + if($result && count($result) > 0){ $service_installed = count($result); } @@ -52,7 +53,11 @@ $this->_pages['mods/_core/courses/admin/auto_enroll.php']['parent'] = 'mods/_core/courses/admin/courses.php'; $this->_pages['mods/_core/courses/admin/auto_enroll.php']['guide'] = 'admin/?p=auto_enroll.php'; $this->_pages['mods/_core/courses/admin/auto_enroll.php']['children'] = array_merge(array('mods/_core/courses/admin/auto_enroll_edit.php')); - $this->_pages['admin/config_edit.php']['children'] = array_merge((array) $this->_pages['admin/config_edit.php']['children']); + if (isset($this->_pages['admin/config_edit.php']['children'])) { + $this->_pages['admin/config_edit.php']['children'] = array_merge((array) $this->_pages['admin/config_edit.php']['children']); + } else { + $this->_pages['admin/config_edit.php']['children'] = array(); + } $this->_pages['mods/_core/courses/admin/auto_enroll.php']['avail_in_mobile'] = false; diff --git a/mods/_core/editor/edit_content.php b/mods/_core/editor/edit_content.php index 70a54a742..12d9c436a 100644 --- a/mods/_core/editor/edit_content.php +++ b/mods/_core/editor/edit_content.php @@ -484,15 +484,19 @@ function compare($x, $y) {
- - - /> - + + + + /> +
- /> + + + /> +
diff --git a/mods/_core/editor/editor_tab_functions.inc.php b/mods/_core/editor/editor_tab_functions.inc.php index 5b6be3cfb..06bb84232 100644 --- a/mods/_core/editor/editor_tab_functions.inc.php +++ b/mods/_core/editor/editor_tab_functions.inc.php @@ -86,7 +86,7 @@ function output_tabs($current_tab, $changes) { */ function isValidURL($url) { if (substr($url,0,4) === 'http') { - return filter_var(filter_var($url, FILTER_SANITIZE_STRING), FILTER_VALIDATE_URL); + return filter_var($url, FILTER_VALIDATE_URL); } return false; } @@ -605,7 +605,7 @@ function paste_from_file() { $path_parts = pathinfo($_FILES['uploadedfile_paste']['name']); $ext = strtolower($path_parts['extension']); - if (in_array($ext, array('html', 'htm'))) { + if (in_array($ext, array('html', 'htm')) && is_uploaded_file($_FILES['uploadedfile_paste']['tmp_name'])) { $_POST['body_text'] = file_get_contents($_FILES['uploadedfile_paste']['tmp_name']); /* get the of this page */ @@ -629,7 +629,7 @@ function paste_from_file() { $_POST['body_text'] = get_html_body($_POST['body_text']); $msg->addFeedback('FILE_PASTED'); - } else if ($ext == 'txt') { + } else if ($ext == 'txt' && is_uploaded_file($_FILES['uploadedfile_paste']['tmp_name'])) { $_POST['body_text'] = file_get_contents($_FILES['uploadedfile_paste']['tmp_name']); $msg->addFeedback('FILE_PASTED'); diff --git a/mods/_core/editor/editor_tabs/accessibility.php b/mods/_core/editor/editor_tabs/accessibility.php index 2397292e0..e1f43af2d 100644 --- a/mods/_core/editor/editor_tabs/accessibility.php +++ b/mods/_core/editor/editor_tabs/accessibility.php @@ -28,9 +28,9 @@ define('AT_ACHECKER_URL', $_config['achecker_url']); define('AT_ACHECKER_WEB_SERVICE_ID', $_config['achecker_key']); //make decisions -if ($_POST['make_decision']) +if ($_POST['make_decision']) { - //get list of decisions + //get list of decisions $desc_query = ''; if (is_array($_POST['d'])) { foreach ($_POST['d'] as $sequenceID => $decision) { @@ -45,13 +45,13 @@ if (@file_get_contents($checker_url) === false) { $msg->addInfo('DECISION_NOT_SAVED'); } -} -else if (isset($_POST['reverse'])) +} +else if (isset($_POST['reverse'])) { $reverse_url = AT_ACHECKER_URL. 'decisions.php?' .'uri='.urlencode($_POST['pg_url']).'&id='.AT_ACHECKER_WEB_SERVICE_ID .'&session='.$_POST['sessionid'].'&output=html&reverse=true&'.key($_POST['reverse']).'=N'; - + if (@file_get_contents($reverse_url) === false) { $msg->addInfo('DECISION_NOT_REVERSED'); } else { @@ -62,10 +62,10 @@ ?>
-'; - echo ' '; - + echo ' '; + if (!$cid) { $msg->printInfos('SAVE_CONTENT'); @@ -80,7 +80,7 @@ $_POST['content_path'] = $content_row['content_path']; write_temp_file(); - $pg_url = AT_BASE_HREF.'get_acheck.php/'.$_POST['cid'] . '.html'; + $pg_url = AT_BASE_HREF.'get_acheck.php/'.$cid . '.html'; $checker_url = AT_ACHECKER_URL.'checkacc.php?uri='.urlencode($pg_url).'&id='.AT_ACHECKER_WEB_SERVICE_ID . '&guide=WCAG2-L2&output=html'; @@ -92,16 +92,16 @@ $msg->printInfos('SERVICE_UNAVAILABLE'); } else { echo ' '; - echo $report; + echo $report; echo '

'._AT('access_credit').'

'; } //delete file - @unlink(AT_CONTENT_DIR . $_POST['cid'] . '.html'); + @unlink(AT_CONTENT_DIR . $cid . '.html'); } else { $msg->printInfos('NO_PAGE_CONTENT'); -} +} ?>
diff --git a/mods/_core/editor/editor_tabs/edit.inc.php b/mods/_core/editor/editor_tabs/edit.inc.php index abaeae6a7..263cb03b8 100644 --- a/mods/_core/editor/editor_tabs/edit.inc.php +++ b/mods/_core/editor/editor_tabs/edit.inc.php @@ -23,27 +23,27 @@ -
- - * +
+
+ *
- -
- - - /> - +
+
+ *
+ + /> + - /> - + /> + - /> - + /> + - /> - - - + /> + + +
- + + + \ No newline at end of file diff --git a/themes/modern/include/forms.css b/themes/modern/include/forms.css new file mode 100644 index 000000000..b3a57b47f --- /dev/null +++ b/themes/modern/include/forms.css @@ -0,0 +1,75 @@ +div.input-form { + width: 80%; + max-width: 600px; + margin-left:auto; + margin-right:auto; + border: 1px solid #F9F6F2; + margin-bottom: 20px; +} + +div.input-form div.row h3 { + margin-left: 0px; +} + + +div.input-form div.row { + background-color: #F9F6F2; + padding:8px; +} + +div.input-form .footer { + border-top: 1px solid #F9F6F2; +} + +div.input-form p { + margin-left: 0px; +} + +div.input-form input { + z-index: 2; +} +div.input-form textarea { + border: 1px solid #595241; + width: 98%; + background-color: #EFE7DA; + padding: 2px; + margin-right: 2px; +} + +div.input-form textarea:focus { + border:1px solid #A50707; + background-color: white; + padding: 2px; +} + +div.input-form input[type=text], div.input-form input[type=password] { + border: 1px solid #595241; + background-color: #EFE7DA; + padding: 2px; + max-width: 60%; +} + +div.input-form input:focus { + border: 1px solid #A50707; + background-color: white; + padding: 2px +} + +div.input-form div.buttons { + text-align: left; + padding:8px; +} +div.input-form div.buttons input { + border: 1px solid #5B8E88; + background-color: #E9F4F3; + padding: 2px; + padding-left: 10px; + padding-right: 10px; + min-width: 100px; + margin-left: 5px; +} +div.input-form div.buttons input:hover { + background-color: #5B8E88; + border: 1px solid #5B8E88; + color: white; +} \ No newline at end of file diff --git a/themes/modern/include/header.tmpl.php b/themes/modern/include/header.tmpl.php new file mode 100644 index 000000000..1c17d173c --- /dev/null +++ b/themes/modern/include/header.tmpl.php @@ -0,0 +1,478 @@ +lang_code the ISO language code + * SITE_NAME the site name from the config file + * $this->page_title the name of this page to use in the + * $this->lang_charset the ISO language character set + * $this->content_base_href the <base href> to use for this page + * $this->base_path the absolute path to this atutor installation + * $this->rtl_css if set, the path to the RTL style sheet + * $this->icon the path to a course icon + * $this->banner_style -deprecated- + * $this->cats array or course categories + * $this->theme the directory name of the current theme + * $this->theme_path the directory name of where "themes" directory resides + * $this->base_href the full url to this atutor installation + * $this->onload javascript onload() calls + * $this->img the absolute path to this theme's images/ directory + * $this->sequence_links associative array of 'previous', 'next', and/or 'resume' links + * $this->path associative array of path to this page: aka bread crumbs + * $this->rel_url the relative url from the installation root to this page + * $this->nav_courses associative array of this user's enrolled courses + * $this->section_title the title of this section (course, public, admin, my start page) + * $this->top_level_pages associative array of the top level navigation + * $this->current_top_level_page the full path to the current top level page with file name + * $this->sub_level_pages associate array of sub level navigation + * $this->sub_level_pages_i associate array of sub level navigation tools for instructors + * $this->back_to_page if set, the path and file name to the part of this page (if parent is not a top level nav) + * $this->current_sub_level_page the full path to the current sub level page with file name + * $this->current_sub_level_page_i the full path to the current sub level page with file name for sub navigation intructor tools + * $this->guide the full path and file name to the guide page + * $this->shortcuts the array of tools' shortcuts to display at top right corner. Used by content.php and edit_content_folder.php + * ====================================== + * Modern (Bootstrap 5) theme + * All legacy element IDs/classes are preserved so legacy ATutor.js, + * scroll-to-fixed and subnav-toggle scripts keep working. Bootstrap 5 + * component classes are layered on top for a modern look & feel. + */ + +// will have to be moved to the header.inc.php +global $system_courses, $_custom_css, $db; + +$_theme_url = $this->theme_path.'themes/'.$this->theme; +$_bootstrap_url = $_theme_url.'/lib/bootstrap'; +$_icons_url = $_theme_url.'/lib/bootstrap-icons/font'; +$_inter_url = $_theme_url.'/lib/inter'; +?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="<?php echo $this->lang_code; ?>"> +<head> + <?php if(isset($this->section_title)){ ?> + <title><?php echo $this->page_title; ?>: <?php echo $this->section_title; ?> + + <?php echo $this->page_title; ?> : <?php echo SITE_NAME; ?> + + + + content_keywords) && $this->content_keywords != ''){ ?> + + + content_description) && $this->content_description != ''){ ?> + + + + + + + + + + + + + + + + + + + + + + + + + +course_id) && isset($system_courses[$this->course_id]['rss'])): ?> + + + + + + + + + + + + + + + custom_css; ?> + rtl_css; ?> + + + + + + + + + +
+
+ '.stripslashes(SITE_NAME).'
'; + else: + echo '
 
'; + endif; ?> + + +
+
+ +
+ + + +
+ +
+ +
+ + +
+ +
+ current_sub_level_page): ?> + + +
+ + + +
+ + + + + + +
+ + +
+ \ No newline at end of file diff --git a/themes/modern/modern-overrides.css b/themes/modern/modern-overrides.css new file mode 100644 index 000000000..e566feb05 --- /dev/null +++ b/themes/modern/modern-overrides.css @@ -0,0 +1,906 @@ +/* ===================================================================== + ATutor "modern" theme — Bootstrap 5 overrides + --------------------------------------------------------------------- + Loaded LAST (after bootstrap.min.css, the legacy styles.css and + forms.css) so it wins the cascade. It: + 1. Neutralises the Bootstrap `.row` / `.row > *` grid rules that + would otherwise clobber ATutor's ~500 legacy `.row` form rows. + 2. Adds non-colliding custom grid classes (.at-content-grid, + .at-card-grid, ...) used by the refactored header/index. + 3. Maps ATutor's legacy element IDs/classes onto Bootstrap 5 + design tokens so EVERY sub-template (login, registration, + preferences, inbox, admin, instructor tools, ...) gets a + cohesive modern look without editing each template. + + Bootstrap CSS variables used: --bs-primary, --bs-body-bg, ... + ===================================================================== */ + +:root { + /* Brand: sky blue (primary) + warm orange (accent CTA). + Palette adapted from the freelearnerchoice.org design system. */ + --at-primary: #0EA5E9; /* sky-500 */ + --at-primary-hover: #0284C7; /* sky-600 */ + --at-primary-rgb: 14, 165, 233; + --at-primary-light: #E0F2FE; /* sky-100 */ + --at-accent: #f97316; /* orange-500 (CTA) */ + --at-accent-hover: #ea580c; /* orange-600 */ + --at-accent-rgb: 249, 115, 22; + --at-accent-light: #fff7ed; /* orange-50 */ + /* Neutrals */ + --at-dark: #0C4A6E; /* sky-900 — deep navy, softer than near-black */ + --at-dark-2: #075985; /* sky-800 */ + --at-surface: #ffffff; + --at-bg: #F0F9FF; /* sky-50 — light, airy */ + --at-text: #075985; /* sky-800 body text */ + --at-text-head: #0C4A6E; /* sky-900 headings */ + --at-text-muted: #64748b; /* slate-500 */ + --at-border: #e2e8f0; /* slate-200 */ + --at-radius: .5rem; /* 8px */ + --at-radius-lg: .875rem; /* 14px */ + --at-shadow-sm: 0 1px 2px rgba(30,41,59,.06), 0 1px 3px rgba(30,41,59,.04); + --at-shadow: 0 4px 12px rgba(30,41,59,.08); + --at-shadow-md: 0 8px 24px rgba(30,41,59,.10); + --at-font: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, + "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + + --bs-primary: var(--at-primary); + --bs-primary-rgb: var(--at-primary-rgb); + --bs-link-color-rgb: var(--at-primary-rgb); + --bs-link-hover-color-rgb: 2, 132, 199; + --bs-body-bg: var(--at-bg); + --bs-body-color: var(--at-text); + --bs-border-color: var(--at-border); + --bs-border-radius: var(--at-radius); + --bs-border-radius-sm: var(--at-radius); +} + +/* ---- Base typography ---- */ +body.at-body { + background-color: var(--at-bg); + color: var(--at-text); + font-family: var(--at-font); + font-size: .9rem; line-height: 1.65; + -webkit-font-smoothing: antialiased; +} +a:link, a:visited { color: var(--at-primary); text-decoration: none; transition: color .2s; } +a:hover, a:focus { color: var(--at-primary-hover); text-decoration: underline; } +h1, h2, h3, h4, h5, h6 { color: var(--at-text-head); font-weight: 700; line-height: 1.25; letter-spacing: -0.01em; } +h1 { font-size: 1.6rem; } h2 { font-size: 1.35rem; } +h2.page-title, .at-page-title { + border-bottom: 2px solid var(--at-border); + padding-bottom: .5rem; margin-bottom: 1rem; +} +hr { border: 0; border-top: 1px solid var(--at-border); margin: 1.25rem 0; } +code, pre { font-family: "SFMono-Regular", Menlo, Consolas, monospace; } +code { background: #f1f5f9; padding: .1rem .3rem; border-radius: .3rem; font-size: .85em; } +pre { background: #f8fafc; border: 1px solid var(--at-border); border-radius: var(--at-radius); padding: .75rem; overflow:auto; } +blockquote { border-left: 3px solid var(--at-primary); margin: .5rem 0; padding: .25rem 1rem; color: var(--at-text-muted); } + +/* ===================================================================== + 1. NEUTRALISE Bootstrap's .row collision + ATutor uses class="row" for ~500 form rows (block layout). Bootstrap + turns .row into a flex grid and adds gutter padding to .row > *. + Reset both so legacy forms keep their block layout. The refactored + header/index use .at-* grid classes instead of Bootstrap .row/.col. + ===================================================================== */ +.row { + display: block !important; + flex-wrap: initial !important; + margin-left: 0 !important; + margin-right: 0 !important; + --bs-gutter-x: 0 !important; +} +.row > * { + padding-left: 0 !important; + padding-right: 0 !important; + width: auto !important; + max-width: none !important; + flex: initial !important; + margin-left: 0 !important; +} + +/* ===================================================================== + 2. Custom (non-colliding) grids used by the refactored templates + ===================================================================== */ +.at-content-grid { display: flex; flex-wrap: wrap; align-items: flex-start; width: 100%; } +.at-side-col { flex: 0 0 auto; width: 100%; max-width: 220px; } +.at-main-col { flex: 1 1 0%; min-width: 0; } +.at-main-col-full { flex: 0 0 100%; width: 100%; } +@media (min-width: 992px){ + .at-side-col { width: 200px; } + .at-content-grid.has-sidemenu .at-side-col { width: 200px; } +} +.at-card-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 1rem; + width: 100%; +} +.at-card-item { display: flex; } + +/* ---- Accessibility skip links ---- */ +.at-bypass-links { position: absolute; left: -9999px; top: 0; z-index: 2000; } +.at-bypass-link { + position: absolute; left: 1rem; top: .5rem; + display: inline-block; padding: .5rem .75rem; + background: var(--at-dark); color: #fff !important; + border-radius: var(--at-radius); z-index: 2000; +} +.at-bypass-links:focus-within { left: 0; } + +/* ---- Top utility bar ---- */ +#top-bar.at-topbar { + background: var(--at-dark); color: #cbd5e1; + border-bottom: 1px solid rgba(255,255,255,.06); padding: .35rem 0; +} +#top-bar .site-name { color: #e2e8f0; font-weight: 500; font-size: .85rem; } +#top-bar a.at-toplink { color: #cbd5e1; font-size: .85rem; } +#top-bar a.at-toplink:hover { color: #fff; text-decoration: none; } +#top-bar .badge { font-size: .65rem; vertical-align: middle; } +#top-bar #jumpmenu.form-select { + width: auto; max-width: 14rem; padding: .2rem 2rem .2rem .5rem; + background-color: var(--at-dark-2); color: #e2e8f0; border-color: var(--at-dark); +} +#top-bar #jumpmenu.form-select option { color: #1e293b; background: #fff; } + +/* ---- Page wrapper / header band ---- */ +.page_wrapper { background: transparent; box-shadow: none; border-radius: 0; padding: 0; margin: 0 auto 1rem; max-width: 1400px; } +#header.at-header { + background: linear-gradient(135deg, var(--at-dark) 0%, var(--at-dark-2) 60%, var(--at-primary) 100%); + color: #fff; padding: 1rem 1.25rem; margin-bottom: 0; border-radius: 0; +} +#header h1, #header h2, #section-title, #site-name-lrg { color: #fff; font-weight: 600; text-shadow: 0 1px 1px rgba(0,0,0,.15); } +#header a, .at-enroll-link { color: #e0f2fe; } +#header a:hover, .at-enroll-link:hover { color: #fff; } +.at-course-title { gap: .75rem; } +#course_title_container img { max-height: 42px; } + +/* ---- Main navigation ---- */ +#lrg_topnav.at-mainnav { background: #fff; border-bottom: 2px solid var(--at-border); box-shadow: var(--at-shadow-sm); } +ul#topnavlist.at-mainnav-list { display: flex; flex-wrap: wrap; margin: 0; padding: 0 .25rem; list-style: none; border-bottom: 0 !important; } +ul#topnavlist li { margin: 0; background: transparent !important; padding: 0 !important; } +ul#topnavlist li a { + display: block; background-color: transparent !important; color: var(--at-text) !important; + border: 0 !important; border-bottom: 3px solid transparent !important; border-radius: 0; + padding: .7rem 1.1rem !important; font-weight: 500; + transition: color .15s, border-color .15s, background-color .15s; +} +ul#topnavlist li a:hover, ul#topnavlist li a:focus { + background-color: rgba(var(--at-primary-rgb), .08) !important; color: var(--at-primary) !important; + text-decoration: none; border-bottom-color: rgba(var(--at-primary-rgb), .4) !important; +} +ul#topnavlist li a.active, ul#topnavlist li a[aria-current="page"] { + background-color: transparent !important; color: var(--at-primary) !important; + border-bottom-color: var(--at-primary) !important; +} + +/* ---- Logout / user bar ---- */ +.logoutbar.at-logoutbar { background: #fff; border-bottom: 1px solid var(--at-border); padding: .35rem 1rem; font-size: .85rem; } +.logoutbar a { color: var(--at-text-muted); } +.logoutbar a:hover { color: var(--at-primary); text-decoration: none; } +.at-user-name { color: var(--at-text); } +.at-logout-link { color: var(--at-primary) !important; } + +/* ---- Breadcrumbs ---- */ +.crumbcontainer.at-crumbcontainer { padding: .5rem 0; } +#breadcrumbs.at-breadcrumbs { color: var(--at-text-muted); font-size: .8rem; } +#breadcrumbs .breadcrumb { background: transparent; padding: 0; margin: 0; } +#breadcrumbs .breadcrumb-item a { color: var(--at-primary); } +#breadcrumbs .breadcrumb-item.active { color: var(--at-text); } +#breadcrumbs .breadcrumb-item + .breadcrumb-item::before { content: "/"; } + +/* ---- Content layout ---- */ +#contentwrapper.at-contentwrapper { + background: transparent; + padding: 0 .5rem; + margin-top: .25rem; + float: none !important; + overflow: visible; +} +#contentcolumn.at-contentcolumn { padding: .5rem 1rem 1.5rem; background: transparent !important; } + +/* Left side menu */ +#lrg_content.at-lrg-content { overflow: hidden; } +#leftcolumn.at-leftcolumn { + padding-top: .5rem; + float: none !important; + width: 100% !important; + margin: 0 !important; +} +#side-menu.at-side-menu { + background: var(--at-surface) !important; border: 1px solid var(--at-border) !important; + border-radius: var(--at-radius-lg) !important; padding: .75rem !important; + box-shadow: var(--at-shadow-sm); +} +#side-menu ul { list-style: none; padding-left: 0; margin: 0; } +#side-menu li { margin: 0; } +#side-menu a { display: block; padding: .35rem .5rem; border-radius: var(--at-radius); color: var(--at-text); font-size: .85rem; } +#side-menu a:hover { background: rgba(var(--at-primary-rgb), .08); color: var(--at-primary); text-decoration: none; } +#side-menu a.active { background: var(--at-primary); color: #fff; } + +/* ---- Page title / messages ---- */ +#message .feedback, #message .error, #message .warning, #message .info { + border-radius: var(--at-radius); padding: .75rem 1rem; margin-bottom: 1rem; + box-shadow: var(--at-shadow-sm); border: 1px solid transparent; +} + +/* ---- Sub navigation ---- */ +#lrg_subnav.at-subnav { background: #fff; border: 1px solid var(--at-border); border-radius: var(--at-radius-lg); padding: .5rem; margin-bottom: 1rem; box-shadow: var(--at-shadow-sm); } +ul#subnavlist.at-subnavlist, ul#subnavlist_i.at-subnavlist-i { list-style: none; padding: 0; margin: 0; gap: .25rem; } +#subnavlist li { background: transparent !important; } +#subnavlist li.active, #subnavlist_i li.active { background: var(--at-primary) !important; color: #fff !important; border-radius: var(--at-radius); padding: .35rem .75rem; } +#subnavlist li a, #subnavlist_i li a { display: inline-block; color: var(--at-text) !important; padding: .35rem .75rem; border-radius: var(--at-radius); transition: background-color .15s, color .15s; } +#subnavlist li a:hover, #subnavlist_i li a:hover { background: rgba(var(--at-primary-rgb), .1); color: var(--at-primary) !important; text-decoration: none; } + +/* ---- Guide box ---- */ +#guide_box.at-guide-box { background: #eff6ff; border: 1px solid #bfdbfe; color: #1e3a8a; border-radius: var(--at-radius); padding: .5rem .85rem; margin-bottom: 1rem; } +#guide_box a { color: #1d4ed8; } + +.sequence-links { background: transparent; padding: .25rem 0; } + +/* ===================================================================== + 3. FORMS — modern cards & controls (applies to every sub-template) + .input-form is ATutor's main form container; render as a clean card. + ===================================================================== */ +div.input-form, +.input-form { + background: var(--at-surface); + border: 1px solid var(--at-border); + border-radius: var(--at-radius-lg); + box-shadow: var(--at-shadow-sm); + padding: 1rem 1.25rem; + margin: 0 0 1.25rem; +} +.input-form .column { margin-top: 0; } +.input-form p { color: var(--at-text-muted); font-size: .875rem; margin: .25rem 0 .75rem; } + +/* Grouped form sections */ +fieldset.group_form { + border: 1px solid var(--at-border) !important; + border-radius: var(--at-radius) !important; + padding: .75rem 1rem 1rem !important; + margin: 0 0 1rem !important; + background: #fff; +} +fieldset.group_form.collapsed { /* leave collapsed behaviour to legacy JS */ } +legend.group_form { + width: auto; padding: .15rem .6rem; margin: 0 0 .5rem; + font-size: 1rem; font-weight: 600; color: var(--at-primary); + border: 0; background: #eff6ff; border-radius: var(--at-radius); +} + +/* Form rows inside input-form: ensure block, tidy spacing */ +.input-form div.row { display: block; padding: .35rem 0; border-bottom: 0; } +.input-form div.row h3 { margin: .25rem 0; font-size: 1.05rem; } +.input-form .row_alternatives { padding: .25rem 0; } + +/* Labels & required markers */ +label { font-weight: 500; color: var(--at-text); } +.required { color: var(--at-primary); font-weight: 600; } +.required::before { content: "* "; color: #ef4444; } + +/* Inputs / selects / textareas — modern controls */ +input[type="text"], input[type="password"], input[type="email"], input[type="search"], +input[type="number"], input[type="url"], input[type="tel"], input[type="date"], +input[type="datetime"], input[type="datetime-local"], input[type="time"], +textarea, select:not(.form-select):not(.form-select-sm) { + border: 1px solid var(--at-border); border-radius: var(--at-radius); + padding: .42rem .65rem; font-size: .9rem; line-height: 1.5; + background-color: #fff; color: var(--at-text); + transition: border-color .15s, box-shadow .15s; +} +input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus, +textarea:focus, select:focus, .formfield:focus { + border-color: var(--at-primary); + box-shadow: 0 0 0 .2rem rgba(var(--at-primary-rgb), .15); + outline: none; +} +input.formfield, .formfield { border: 1px solid var(--at-border); border-radius: var(--at-radius); padding: .42rem .65rem; } +textarea { min-height: 6rem; resize: vertical; } +input[type="checkbox"], input[type="radio"] { width: 1rem; height: 1rem; vertical-align: middle; margin-right: .35rem; } + +/* Buttons — modern, Bootstrap-aligned */ +.button, input[type="submit"], input[type="button"], button { + background-color: var(--at-primary) !important; color: #fff !important; + border: 1px solid var(--at-primary) !important; border-radius: var(--at-radius); + padding: .4rem 1.1rem; font-weight: 500; font-size: .85rem; line-height: 1.5; + cursor: pointer; box-shadow: var(--at-shadow-sm); + transition: background-color .15s, box-shadow .15s, transform .05s; +} +.button:hover, input[type="submit"]:hover, input[type="button"]:hover, button:hover { + background-color: var(--at-primary-hover) !important; border-color: var(--at-primary-hover) !important; + box-shadow: var(--at-shadow); transform: translateY(-1px); +} +.button:active, input[type="submit"]:active, input[type="button"]:active { transform: translateY(0); } +.button.cancel, input[type="submit"].cancel, input[type="button"].cancel, .button.secondary { + background-color: #fff !important; color: var(--at-text) !important; + border: 1px solid var(--at-border) !important; box-shadow: none; +} +.button.cancel:hover, .button.secondary:hover { background-color: var(--at-bg) !important; } + +/* Warm-orange CTA — used on key primary actions (login, create account, + password reset) to match the reference site's primary action colour. + Add the `at-cta` class to any submit/button that should be the orange CTA. */ +.at-cta, +input[type="submit"].at-cta, +input[type="button"].at-cta, +button.at-cta, +.button.at-cta { + background-color: var(--at-accent) !important; + border-color: var(--at-accent) !important; + color: #fff !important; + box-shadow: 0 4px 14px rgba(var(--at-accent-rgb), .35) !important; +} +.at-cta:hover, +input[type="submit"].at-cta:hover, +input[type="button"].at-cta:hover, +button.at-cta:hover, +.button.at-cta:hover { + background-color: var(--at-accent-hover) !important; + border-color: var(--at-accent-hover) !important; + box-shadow: 0 8px 22px rgba(var(--at-accent-rgb), .4) !important; + transform: translateY(-2px); +} +.at-cta:active, +input[type="submit"].at-cta:active, +.button.at-cta:active { transform: translateY(0) scale(.98); } + +/* Button groups */ +div.buttons, .buttons { display: flex; flex-wrap: wrap; gap: .5rem; padding: .5rem 0; margin: 0; } +div.buttons input, .buttons input { margin: 0; } + +/* ---- Content boxes / section headings ---- */ +.contentbox, .headingbox { + background: var(--at-surface); border: 1px solid var(--at-border); + border-radius: var(--at-radius); padding: .75rem 1rem; +} +.headingbox { background: #f1f5f9; font-weight: 600; border-color: #cbd5e1; } +div.headingbox, h3.headingbox, a.headingbox { color: var(--at-text); } +.contentbox-a, .contentbox-b { border: 1px solid var(--at-border); border-radius: var(--at-radius); padding: .75rem; } + +/* Generic boxes */ +.box { background: var(--at-surface); border: 1px solid var(--at-border); border-radius: var(--at-radius); padding: .5rem .75rem; } +.contentrow { display: block; padding: .35rem 0; } +.left_row { padding: .25rem 0; } +.top_right { float: right; } +.static { color: var(--at-text-muted); } + +/* ===================================================================== + 4. TABLES — modern data tables (instructor/admin/inbox etc.) + ===================================================================== */ +table.data { + width: 100%; border-collapse: separate !important; border-spacing: 0; + border: 1px solid var(--at-border); border-radius: var(--at-radius-lg); + overflow: hidden; box-shadow: var(--at-shadow-sm); background: #fff; +} +table.data th { background-color: #f1f5f9; color: var(--at-text); font-weight: 600; border-bottom: 2px solid var(--at-border); padding: .6rem .75rem; text-align: left; } +table.data td { padding: .55rem .75rem; border-bottom: 1px solid var(--at-border); color: var(--at-text); } +table.data tbody tr:last-child td { border-bottom: 0; } +table.data tbody tr:hover { background-color: #f8fafc; } +table th, table td { border-color: var(--at-border); } +table { border-collapse: collapse; } + +/* Sortable column headers */ +.sort a, .sort { color: var(--at-primary); font-weight: 600; } + +/* hidecol helpers */ +.hidecol700, .hidecol480 { /* left to legacy responsive rules */ } + +/* ===================================================================== + 5. PAGINATION (legacy .paginator -> modern look) + ===================================================================== */ +div.paginator, .paginator { margin: 1rem 0; } +.paginator ul, .paginator li { list-style: none; } +.paginator ul { display: flex; flex-wrap: wrap; gap: .25rem; padding: 0; margin: 0; } +.paginator li a, .paginator li span { + display: inline-block; padding: .35rem .65rem; border-radius: var(--at-radius); + border: 1px solid var(--at-border); background: #fff; color: var(--at-text); + font-size: .85rem; text-decoration: none; +} +.paginator li a:hover { background: rgba(var(--at-primary-rgb), .1); color: var(--at-primary); border-color: var(--at-primary); } +.paginator li.active span, .paginator li.active a { + background: var(--at-primary); color: #fff; border-color: var(--at-primary); +} + +/* ===================================================================== + 6. HOME PAGE (index.tmpl.php) + ===================================================================== */ +.at-details-view .row > .home_box, .at-card-grid > .home_box { display: flex; } +.home_box { margin-bottom: 0; } +.at-home-links { list-style: none; padding: 0; margin: 0; } +.at-home-links .at-home-icon-item a { + display: inline-flex; flex-direction: column; align-items: center; gap: .35rem; + padding: .6rem; border: 1px solid var(--at-border); border-radius: var(--at-radius); + background: #fff; color: var(--at-text); font-size: .8rem; text-align: center; min-width: 84px; +} +.at-home-links .at-home-icon-item a:hover { border-color: var(--at-primary); color: var(--at-primary); box-shadow: var(--at-shadow-sm); text-decoration: none; } +.at-home-links .at-home-icon-item img { max-width: 40px; } + +.outside_box.card { border: 1px solid var(--at-border); border-radius: var(--at-radius-lg); } +.home-title a { color: var(--at-text); } +.home-title a:hover { color: var(--at-primary); text-decoration: none; } +.buttonbox { z-index: 2; } +.buttonbox input { opacity: .55; border-radius: var(--at-radius); } +.buttonbox input:hover { opacity: 1; } +.details-text, .details_text { font-size: .85rem; color: var(--at-text-muted); } +.details-text img, .inside_box img { vertical-align: middle; } + +.news.card { border: 1px solid var(--at-border); } +.news .card-title { color: var(--at-text); } +.news .date { color: var(--at-text-muted); } + +/* ---- Footer ---- */ +#footer.at-footer { background: var(--at-dark-2); color: #94a3b8; margin-top: 2rem; border-top: 3px solid var(--at-primary); } +#footer a { color: #93c5fd; } +#footer a:hover { color: #fff; } +#footer .logo img { max-height: 44px; } +#footer-right { font-size: .8rem; } + +/* ---- Sticky nav polish ---- */ +.scroll-to-fixed-fixed #lrg_topnav.at-mainnav { background: rgba(255,255,255,.96); backdrop-filter: blur(8px); box-shadow: var(--at-shadow); } + +/* ---- Dropdown safety (legacy .dropdown vs Bootstrap .dropdown) ---- */ +/* Legacy ATutor dropdown menus must not inherit Bootstrap positioning. */ +.dropdown:not(.btn-group):not([data-bs-toggle]) { position: static; } + +/* ===================================================================== + 7. MISC LEGACY WIDGETS + ===================================================================== */ +/* Detail/icon view toggle on home */ +.detail_switch a { display: inline-block; padding: .3rem .5rem; border-radius: var(--at-radius); background: #fff; border: 1px solid var(--at-border); } +.detail_switch a:hover { background: var(--at-bg); } + +/* Question stats bars (tests/quizzes) */ +.qstat_bar-bar { border-radius: var(--at-radius); overflow: hidden; } +.qstat_bar-fill { border-radius: var(--at-radius); } + +/* Social / profile / photos — keep legacy layout, just soften borders */ +.social-wrapper, .profile_container, .album_panel, .photo_frame, .edit_photo_box, +.contact_mini, .gadget_wrapper, .pa_tool_link, .pa_tool_image { + border-color: var(--at-border); border-radius: var(--at-radius); +} + +/* Tabs / accordion used in some tools: neutralise Bootstrap .nav conflicts + by leaving legacy tab styling in place where classes overlap. */ +.tabbed-menu, .tabs { border-bottom: 1px solid var(--at-border); } + +/* Image buttons keep their size */ +.img1616, .img2222, .imggoback, .shortcut_icon { vertical-align: middle; } + +/* ---- Responsive ---- */ +@media (max-width: 991.98px) { + .at-side-col, .at-main-col, .at-main-col-full { flex: 0 0 100%; width: 100%; max-width: 100%; } + #side-menu.at-side-menu { margin-bottom: 1rem; } + ul#topnavlist.at-mainnav-list { overflow-x: auto; flex-wrap: nowrap; } + ul#topnavlist li a { white-space: nowrap; padding: .6rem .85rem !important; } + .at-card-grid { grid-template-columns: 1fr; } +} +@media (min-width: 768px) and (max-width: 1199.98px) { + .at-card-grid { grid-template-columns: repeat(2, 1fr); } +} + +/* ---- RTL handled by rtl.css ---- */ + +/* ===================================================================== + 8. LOGIN PAGE (login.tmpl.php) + ===================================================================== */ +.at-login-wrap { margin: 1.5rem auto 2.5rem; } + +/* Two-card layout: side-by-side on md+, stacked on small screens. */ +.at-login-grid { + grid-template-columns: 1fr; +} +@media (min-width: 768px) { + .at-login-grid { grid-template-columns: 1.15fr .85fr; align-items: stretch; } +} + +.at-login-card { + border: 1px solid var(--at-border); + border-radius: var(--at-radius-lg); + overflow: hidden; + background: var(--at-surface); + transition: box-shadow .2s ease, transform .2s ease; +} +.at-login-card:hover { box-shadow: var(--at-shadow-md); transform: translateY(-1px); } + +/* Card headers with a soft gradient + icon chip. */ +.at-login-card-header { + display: flex; align-items: center; gap: .65rem; + padding: .9rem 1.1rem; + border-bottom: 0; +} +.at-login-card-header--primary { + background: linear-gradient(135deg, var(--at-primary) 0%, var(--at-primary-hover) 100%); + color: #fff; +} +.at-login-card-header--secondary { + background: linear-gradient(135deg, var(--at-accent-light) 0%, #ffedd5 100%); + color: var(--at-text-head); + border-bottom: 1px solid var(--at-border); +} +.at-login-card-header--primary .card-title, +.at-login-card-header--primary h2 { color: #fff; } + +.at-login-card-icon { + display: inline-flex; align-items: center; justify-content: center; + width: 2rem; height: 2rem; border-radius: 50%; + background: rgba(255,255,255,.18); + font-size: 1.05rem; +} +.at-login-card-header--secondary .at-login-card-icon { + background: rgba(var(--at-accent-rgb), .14); + color: var(--at-accent-hover); +} + +.at-login-card .card-body { padding: 1.25rem 1.35rem; } + +/* The intro paragraph under each header. */ +.at-login-intro { line-height: 1.45; } + +/* Input group icon chips. */ +.at-input-icon { + background: #f8fafc; + color: var(--at-text-muted); + border-right: 0; +} +.at-login-card .input-group .form-control:focus, +.at-login-card .input-group .formfield:focus { + border-color: var(--at-primary); + box-shadow: 0 0 0 .2rem rgba(var(--at-primary-rgb), .15); + z-index: 2; +} +.at-login-card .input-group .form-control:focus + .at-pass-toggle, +.at-login-card .input-group .form-control:focus ~ .at-pass-toggle { + border-color: var(--at-primary); +} +.at-pass-toggle { border-left: 0; } +.at-pass-toggle:hover { background: #f1f5f9; } + +/* Primary action buttons. */ +.at-btn-login { + padding: .55rem 1rem; + font-weight: 600; + letter-spacing: .01em; + box-shadow: var(--at-shadow-sm); +} +.at-btn-login:hover { box-shadow: var(--at-shadow); transform: translateY(-1px); } +.at-btn-register { + padding: .55rem 1rem; + font-weight: 600; + border-width: 2px; +} +.at-btn-register:hover { background: var(--at-primary); color: #fff; } + +/* Forgot-password link sits inline with the password label. */ +.at-forgot-link { color: var(--at-primary); } +.at-forgot-link:hover { color: var(--at-primary-hover); text-decoration: none; } + +.at-login-footnote { opacity: .85; } + +/* Inside a login card the group_form fieldset is just a logical group, + not a collapsible section — drop its inner border/padding so it + doesn't render as a nested box. */ +.at-login-card fieldset.group_form { + border: 0 !important; padding: 0 !important; margin: 0 !important; + background: transparent !important; border-radius: 0 !important; +} +.at-login-card legend.group_form { display: none; } + +/* ===================================================================== + 8b. LOGIN PAGE + The login page uses the global sky/orange palette. The Login button + is promoted to the warm orange CTA via the `at-cta` class (see the + buttons section above) — no page-scoped overrides needed here. + Register stays a sky outline (Bootstrap .btn-outline-primary) and + the forgot-password link is sky (section 8 .at-forgot-link). + ===================================================================== */ + +/* ===================================================================== + 8c. REGISTRATION PAGE + A single wide card with an orange "new user" header (reuses the login + card chrome via .at-login-card / --secondary), grouped form sections, + and a 2-column field grid that stacks on small screens. Bootstrap's + .row/.col are neutralised in this theme, so the grid is a custom CSS + grid. All colors come from the tokens above — no new palette values. + ===================================================================== */ +.at-register-wrap { margin: 1.5rem auto 2.5rem; max-width: 760px; } + +/* Two-column field grid (stacks to one column under 640px). */ +.at-register-grid { + display: grid; + grid-template-columns: 1fr; + gap: 0 1rem; +} +@media (min-width: 640px) { + .at-register-grid { grid-template-columns: 1fr 1fr; } +} +.at-register-grid > .at-register-span-2 { grid-column: 1 / -1; } +.at-register-grid > div { margin-bottom: .75rem; } + +/* Inside the registration card the group_form fieldsets ARE visible + grouped sections (unlike the login card, which hides them). These + selectors carry one extra class so they outrank the login-card rule. */ +.at-register-card.at-login-card fieldset.group_form { + border: 1px solid var(--at-border) !important; + border-radius: var(--at-radius) !important; + padding: 1rem 1.1rem 1.1rem !important; + margin: 0 0 1.1rem !important; + background: #fff !important; +} +.at-register-card.at-login-card legend.group_form { + display: inline-block !important; + font-size: .95rem; font-weight: 600; color: var(--at-text-head); + background: var(--at-accent-light) !important; + border: 0 !important; border-radius: var(--at-radius); + padding: .2rem .7rem; margin: 0 0 .75rem; +} +.at-register-card .card-body { padding: 1.25rem 1.35rem; } + +/* Required-field hint line. */ +.at-register-required-hint { + font-size: .8rem; color: var(--at-text-muted); + margin: 0 0 .9rem; +} + +/* Helper/hint text under a field (login name / password rules). */ +.at-register-help { + font-size: .78rem; color: var(--at-text-muted); + line-height: 1.4; margin: .25rem 0 0; +} + +/* CAPTCHA block. */ +.at-register-captcha { + background: #f8fafc; + border: 1px solid var(--at-border); + border-radius: var(--at-radius); + padding: .85rem .9rem; +} +.at-register-captcha img#simage { + border-radius: var(--at-radius); + border: 1px solid var(--at-border); + background: #fff; +} +.at-register-captcha-tools { margin-top: .4rem; } +.at-register-captcha-tools a { + display: inline-flex; align-items: center; gap: .25rem; + color: var(--at-text-muted); font-size: .8rem; margin-right: .85rem; +} +.at-register-captcha-tools a:hover { + color: var(--at-primary); text-decoration: none; +} + +/* Inline checkbox row (keep email private). */ +.at-register-check { + display: flex; align-items: center; gap: .4rem; margin-top: .45rem; +} +.at-register-check input[type="checkbox"] { width: 1rem; height: 1rem; margin: 0; } +.at-register-check label { font-size: .85rem; color: var(--at-text-muted); margin: 0; } + +/* Date-of-birth inline fields. */ +.at-register-dob { + display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; +} +.at-register-dob label { font-size: .8rem; color: var(--at-text-muted); margin: 0; } +.at-register-dob input { width: auto; } + +/* Radio group (gender / account status). */ +.at-register-radios { + display: flex; flex-wrap: wrap; gap: 1rem; align-items: center; +} +.at-register-radios label { font-size: .85rem; color: var(--at-text); margin: 0; } + +/* Action buttons row. */ +.at-register-actions { + display: flex; flex-wrap: wrap; gap: .6rem; justify-content: flex-end; + margin-top: .35rem; +} +.at-register-actions input[type="submit"] { min-width: 7rem; } + +/* "Already registered?" returning-user toggle link. */ +.at-register-returning { + display: flex; justify-content: flex-end; margin-bottom .75rem; +} +.at-register-returning a { + display: inline-flex; align-items: center; gap: .35rem; + font-weight: 600; color: var(--at-primary); +} +.at-register-returning a:hover { color: var(--at-primary-hover); text-decoration: none; } + +/* ===================================================================== + 9. CONTENT EDITOR (add_content / edit_content) + ===================================================================== */ + +/* --- Tabs: modern pill bar (table.etabbed-table is legacy markup) --- */ +table.etabbed-table { + display: flex; + width: 100%; + border: 0; + margin-bottom: .75rem; +} +table.etabbed-table tbody, +table.etabbed-table tr { + display: flex; + flex-wrap: wrap; + gap: .35rem; + width: 100%; +} +table.etabbed-table td { + display: inline-flex; + align-items: center; + border: 0 !important; + padding: 0 !important; +} +table.etabbed-table td.tab-spacer { display: none; } + +.editor_tab, +.editor_tab_selected { + border-radius: var(--at-radius) !important; + padding: .4rem .9rem !important; + font-size: .85rem; + font-weight: 500; + cursor: pointer; + transition: background .15s, color .15s, box-shadow .15s; + height: auto !important; + margin: 0 !important; +} +.editor_tab { + background: #fff; + border: 1px solid var(--at-border) !important; + color: var(--at-text) !important; +} +.editor_tab:hover, +.editor_tab:focus { + background: rgba(var(--at-primary-rgb),.08); + border-color: var(--at-primary) !important; + color: var(--at-primary) !important; +} +.editor_tab input[type="submit"].editor_buttontab { + background: transparent !important; + border: 0 !important; + box-shadow: none !important; + color: inherit !important; + padding: 0 !important; + height: auto !important; + font-weight: inherit; +} +.editor_tab_selected { + background: var(--at-primary) !important; + color: #fff !important; + border: 1px solid var(--at-primary) !important; + box-shadow: var(--at-shadow-sm); +} + +/* --- Action bar (saved / unsaved) --- */ +.editor_wrapper .saved, +.editor_wrapper .unsaved { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: .5rem; + padding: .6rem .85rem; + margin-bottom: .75rem; + border-radius: var(--at-radius); + border: 1px solid var(--at-border); + background: #f8fafc; +} +.editor_wrapper .unsaved { + background: #fff7ed; + border-color: #fdba74; +} +.editor_wrapper .unsaved span { color: #c2410c !important; font-weight: 600; } +.editor_wrapper .saved input[type="submit"], +.editor_wrapper .unsaved input[type="submit"] { + margin: 0; +} + +/* --- Toolbar --- */ +ul#content-tool-links { + display: flex; + flex-wrap: wrap; + gap: .5rem; + padding: .5rem 0; + margin: 0 0 .75rem; +} +ul#content-tool-links li { + float: none; + width: auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: .25rem; + padding: .45rem .55rem; + min-width: 4rem; + min-height: 4rem; + border-radius: var(--at-radius); + border: 1px solid var(--at-border); + background: #fff; + font-size: .7rem; + color: var(--at-text); + transition: border-color .15s, box-shadow .15s, transform .05s; + cursor: pointer; +} +ul#content-tool-links li:hover { + border-color: var(--at-primary); + box-shadow: var(--at-shadow-sm); + transform: translateY(-1px); +} +ul#content-tool-links img { + display: block; + padding: 0; + height: 24px; + width: 24px; +} + +/* --- Meta row (title + formatting) --- */ +.at-editor-meta { + display: flex; + flex-wrap: wrap; + gap: 1rem; + align-items: flex-start; + margin-bottom: .75rem; +} +.at-editor-meta .at-editor-title { flex: 1 1 300px; min-width: 0; } +.at-editor-meta .at-editor-title input[type="text"] { width: 100%; } +.at-editor-meta .at-editor-format { + flex: 1 1 280px; + display: flex; + flex-wrap: wrap; + gap: .35rem .85rem; + align-items: center; +} +.at-editor-meta .at-editor-format label { font-size: .85rem; margin: 0; } + +/* --- Section cards (head, paste) --- */ +.at-editor-section { + background: #fff; + border: 1px solid var(--at-border); + border-radius: var(--at-radius); + padding: .75rem 1rem; + margin-bottom: .75rem; +} +.at-editor-section label { font-weight: 600; color: var(--at-text-head); } +.at-editor-section textarea { width: 100%; margin-top: .35rem; } + +/* --- Body textarea when not TinyMCE --- */ +#body_text { + width: 100%; + min-height: 18rem; + font-family: var(--at-font); + font-size: .9rem; + line-height: 1.6; + padding: .75rem; + border: 1px solid var(--at-border); + border-radius: var(--at-radius); + background: #fff; + transition: border-color .15s, box-shadow .15s; +} +#body_text:focus { + border-color: var(--at-primary); + box-shadow: 0 0 0 .2rem rgba(var(--at-primary-rgb),.15); + outline: none; +} + +/* Weblink input */ +#weblinkSpan input { + width: 100%; + padding: .5rem .65rem; +} + +/* Paste section */ +#paste.at-editor-section input[type="file"] { + border: 1px dashed var(--at-border); + border-radius: var(--at-radius); + padding: .35rem .5rem; + background: #f8fafc; +} + +/* TinyMCE container polish */ +.mce-tinymce { + border-radius: var(--at-radius) !important; + overflow: hidden; + border-color: var(--at-border) !important; +} +.mce-panel { + border-color: var(--at-border) !important; +} \ No newline at end of file diff --git a/themes/modern/password_change.tmpl.php b/themes/modern/password_change.tmpl.php new file mode 100644 index 000000000..e7ede2893 --- /dev/null +++ b/themes/modern/password_change.tmpl.php @@ -0,0 +1,62 @@ + + + + + + +
+ + + + + + + +
+
+ +
+ +
+ *
+
+ ·
+ ·
+
+ +
+ *
+ +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/themes/modern/password_reminder.tmpl.php b/themes/modern/password_reminder.tmpl.php new file mode 100644 index 000000000..0a5be4ec0 --- /dev/null +++ b/themes/modern/password_reminder.tmpl.php @@ -0,0 +1,28 @@ + + +
+ +
+
+
+ +
+ +
+ *
+ +
+ +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/themes/modern/password_reminder_feedback.tmpl.php b/themes/modern/password_reminder_feedback.tmpl.php new file mode 100644 index 000000000..39ead0e7a --- /dev/null +++ b/themes/modern/password_reminder_feedback.tmpl.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/themes/modern/photos/admin/pa_index.tmpl.php b/themes/modern/photos/admin/pa_index.tmpl.php new file mode 100644 index 000000000..a55bdc980 --- /dev/null +++ b/themes/modern/photos/admin/pa_index.tmpl.php @@ -0,0 +1,55 @@ + + +
+ page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_ADMIN_ALBUMS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
+
+
+ + + + + + + + + + + + + albums)): ?> + albums as $aid=>$row): ?> + + + + + + + + + + + + + + + + + + + + + +
 
getAlbumTypeName($row['type_id']); ?>
+ + +
+
+
+
+ page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_PHOTOS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
diff --git a/themes/modern/photos/admin/pa_preferences.tmpl.php b/themes/modern/photos/admin/pa_preferences.tmpl.php new file mode 100644 index 000000000..727c5c695 --- /dev/null +++ b/themes/modern/photos/admin/pa_preferences.tmpl.php @@ -0,0 +1,12 @@ +
+
+
+
+ +
+ +
+ +
+
+
\ No newline at end of file diff --git a/themes/modern/photos/pa_albums.tmpl.php b/themes/modern/photos/pa_albums.tmpl.php new file mode 100644 index 000000000..5d8c38c43 --- /dev/null +++ b/themes/modern/photos/pa_albums.tmpl.php @@ -0,0 +1,337 @@ +
+ + action_permission || $this->album_info['type_id']==AT_PA_TYPE_COURSE_ALBUM): ?> +
+
+ + +
+ +
+
+

+

memory_usage, 2) .'/ '. $this->allowable_memory_usage . ' ' . _AT('mb'); ?>

+ +
+ +
+
    +
    +
    + " class="button" onclick="window.location.reload();" /> +
    +
    +
    + + +
    +
    + num_rows > AT_PA_PHOTOS_PER_PAGE): ?> +
    + page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_PHOTOS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    + photos)): ?> + + photos as $key=>$photo): ?> +
    + <?php echo AT_print($photo['alt_text'], 'photos.alt_text');?> +
    + + +
    +

    album_info['location']!='') echo _AT('location').': '.AT_print($this->album_info['location'], 'photo_albums.location') .'
    ';?> + album_info['description'], 'photo_albums.description');?>

    +
    + +
    +

    +
    + + +
    + num_rows > AT_PA_PHOTOS_PER_PAGE): ?> +
    + page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_PHOTOS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    +
    + + +
    +
    + comments)): ?> + comments as $k=>$comment_array): ?> +
    + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> +
    + + +
    + +
    + + +
    + +
    + + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> + + +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + action_permission): ?> +
    +
    +
    + +
    +
    + + + diff --git a/themes/modern/photos/pa_create_album.tmpl.php b/themes/modern/photos/pa_create_album.tmpl.php new file mode 100644 index 000000000..08b32fb74 --- /dev/null +++ b/themes/modern/photos/pa_create_album.tmpl.php @@ -0,0 +1,38 @@ +
    +
    +
    +
    + *
    + +
    + +
    +
    + + + + +
    + +
    +
    + + +
    +
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    diff --git a/themes/modern/photos/pa_edit_album.tmpl.php b/themes/modern/photos/pa_edit_album.tmpl.php new file mode 100644 index 000000000..cf0207a77 --- /dev/null +++ b/themes/modern/photos/pa_edit_album.tmpl.php @@ -0,0 +1,37 @@ +
    +
    +
    +
    +
    *
    + +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/photos/pa_edit_photos.tmpl.php b/themes/modern/photos/pa_edit_photos.tmpl.php new file mode 100644 index 000000000..01ba25406 --- /dev/null +++ b/themes/modern/photos/pa_edit_photos.tmpl.php @@ -0,0 +1,34 @@ +
    +photos)): ?> +
    + photos as $k=>$photo): ?> +
    +
    +
    + + +


    +

    +
    +
    + <?php echo AT_print($photo['alt_text'], 'input.text');?>
    + album_info['photo_id']==$photo['id'])?' checked="checked"':''; ?>/> +
    + + + +
    +
    + +
    + + + +
    +
    + +
    +

    +
    + +
    \ No newline at end of file diff --git a/themes/modern/photos/pa_index.tmpl.php b/themes/modern/photos/pa_index.tmpl.php new file mode 100644 index 000000000..3e960d522 --- /dev/null +++ b/themes/modern/photos/pa_index.tmpl.php @@ -0,0 +1,76 @@ +
    + +
    +
    + + num_rows > AT_PA_ALBUMS_PER_PAGE): ?> + +
    + page, $this->num_rows, 'type='.$this->type, AT_PA_ALBUMS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    + + + albums)): ?> + albums as $index=>$row): + $pa = new PhotoAlbum($index); + ?> +
    + +
    + getPhotoInfo($row['photo_id']); + if (!empty($photo_info)): + ?> + <?php echo AT_print($row['name'], 'input.text'); ?> + + <?php echo _AT('pa_no_image'); ?> + +
    +
    +

    +

    +

    + + isSharedAlbum)): ?> +

    + +

    +

    +
    + for the next span to sink to the bottom. + * So if we have an extra "created_by" row, we need an extra
    tag + */ + if (isset($this->isSharedAlbum)){ + echo '
    '; + } + ?> + checkAlbumPriv($_SESSION['member_id'])): ?> +

    |

    + +
    +
    + + +
    +

    +
    + + + + num_rows > AT_PA_ALBUMS_PER_PAGE): ?> +
    +
    + page, $this->num_rows, 'type='.$this->type, AT_PA_ALBUMS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    +
    + +
    +
    \ No newline at end of file diff --git a/themes/modern/photos/pa_organize_photos.tmpl.php b/themes/modern/photos/pa_organize_photos.tmpl.php new file mode 100644 index 000000000..139fc56ed --- /dev/null +++ b/themes/modern/photos/pa_organize_photos.tmpl.php @@ -0,0 +1,28 @@ +
    +
    + photos)): ?> +

    +
    + + photos as $key=>$photo):?> + + + + +
    + +
    +

    +
    + +
    +
    + + diff --git a/themes/modern/photos/pa_photo.tmpl.php b/themes/modern/photos/pa_photo.tmpl.php new file mode 100644 index 000000000..e054ec6f4 --- /dev/null +++ b/themes/modern/photos/pa_photo.tmpl.php @@ -0,0 +1,181 @@ +
    + +
    + + photo_info['ordering'] <= $this->total_photos): ?> +
    photo_info['ordering'].' '._AT('pa_of').' '.$this->total_photos ; ?>
    +
    +
      + prev)): ?> +
    • <?php echo _AT('previous'); ?>
    • + + next)): ?> +
    • <?php echo _AT('next'); ?>
    • + +
    +
    + +
    + + <?php echo AT_print($this->photo_info['alt_text'], 'input.text') ;?> + action_permission): ?> +
    photo_info['description'], 'photos.description');?>
    + +
    photo_info['description'], true);?>
    + +
    + + +
    +
    + comments)): ?> + comments as $k=>$comment_array): ?> +
    + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> +
    + + +
    + +
    + + +
    + + +
    +
    + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> + + +
    +
    +
    + + +
    +
    +
    +
    +
    + + + +
    +
    +
    + + action_permission): ?> +
    +
    +
    +
    + +
    + +
    +

    photo_info['member_id']), 'members.full_name'); ?>

    +
    + +
    +
    + + diff --git a/themes/modern/photos/pa_profile_albums.tmpl.php b/themes/modern/photos/pa_profile_albums.tmpl.php new file mode 100644 index 000000000..efbeaaa80 --- /dev/null +++ b/themes/modern/photos/pa_profile_albums.tmpl.php @@ -0,0 +1,179 @@ +
    + + action_permission || $this->album_info['type_id']==AT_PA_TYPE_COURSE_ALBUM): ?> +
    +
    + <?php _AT('profile_picture');?> +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + num_rows > AT_PA_PHOTOS_PER_PAGE): ?> +
    + page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_PHOTOS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    + photos)): ?> + + photos as $key=>$photo): ?> +
    + <?php echo AT_print($photo['alt_text'], 'photo_albums.alt_text');?> +
    + + +
    +

    album_info['location']!='') echo _AT('location').': '.AT_print($this->album_info['location'], 'albums.location') .'
    ';?> + album_info['description'], 'albums.description');?>

    +
    + +
    +

    +
    + + +
    + num_rows > AT_PA_PHOTOS_PER_PAGE): ?> +
    + page, $this->num_rows, 'id='.$this->album_info['id'], AT_PA_PHOTOS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    +
    + + +
    +
    + comments)): ?> + comments as $k=>$comment_array): ?> +
    + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> +
    + + +
    + +
    + + +
    + +
    + + + action_permission || $comment_array['member_id']==$_SESSION['member_id']): ?> + + +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + action_permission): ?> +
    +
    +
    +
    + +
    +
    + + + \ No newline at end of file diff --git a/themes/modern/photos/pa_search.tmpl.php b/themes/modern/photos/pa_search.tmpl.php new file mode 100644 index 000000000..30ea2291a --- /dev/null +++ b/themes/modern/photos/pa_search.tmpl.php @@ -0,0 +1,167 @@ +albums); + $photo_size = sizeof($this->photos); +?> + +
    +
    +
    + + num_rows > AT_PA_ALBUMS_PER_PAGE): ?> + +
    + page, $this->num_rows, 'type='.$this->type, AT_PA_ALBUMS_PER_PAGE, AT_PA_PAGE_WINDOW); ?> +
    + +
    + + + albums)): ?> +
    +

    + AT_PA_SEARCH_MIN_ALBUM): ?> +
    <?php echo _AT('previous'); ?>
    + +
    +
      + albums as $index=>$album): + $photo_info = $pa->getPhotoInfo($album['photo_id']); + ?> +
    • +
      + + <?php echo AT_print($album['name'], 'input.text'); ?> + + <?php echo _AT('pa_no_image'); ?> + + +
      +
    • + +
    +
    + AT_PA_SEARCH_MIN_ALBUM): ?> +
    <?php echo _AT('next'); ?>
    + +
    + + + +
    +

    + photos)): ?> + + AT_PA_PHOTO_SEARCH_PER_PAGE): ?> + + + + +
    +
    + +
    +

    +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/themes/modern/print.css b/themes/modern/print.css new file mode 100644 index 000000000..c83c763cd --- /dev/null +++ b/themes/modern/print.css @@ -0,0 +1,13 @@ +body { + background-color: White; + font-family: Helvetica, arial, sans serif; + margin: 0px; + margin-top: 0px; + color: black; + border: 0px; +} + +div#side-menu, div#member-links, span#side-menushowlink, div#rightcolumn, div#suv-nav-logout, div#top-links, span#side-menuhidelink, div.sequence-links, select#jumpmenu, a#guide, div#gototop, input#jump-button, div#topnavlistcontainer, a#guide, div#breadcrumbs, div#jump-area, table.tabbed-table, div#sub-navigation, div#sequence-links, div#language, div#toc, fieldset#shortcuts { + display: none; +} + diff --git a/themes/modern/profile.tmpl.php b/themes/modern/profile.tmpl.php new file mode 100644 index 000000000..d2c52fd48 --- /dev/null +++ b/themes/modern/profile.tmpl.php @@ -0,0 +1,75 @@ + +
    +
    +

    +
    + getModule('_standard/profile_pictures'); + if ($mod->isEnabled() === TRUE): ?> +
    +
    row['member_id'])): ?> + aid; + } else { + $img_link = 'get_profile_img.php?id='.$this->row['member_id'].SEP.'size=o'; + } + ?> + row['member_id'], 2); ?> + + + +
    + + +
    +
    + row['private_email']): ?> + + + row['email']; ?> + +
    + +
    +
    + row['website']) { + echo ''.AT_print($this->row['website'], 'members.website').''; + } else { + echo '--'; + } ?> +
    + +
    +
    + row['phone']) { + echo $this->row['phone']; + } else { + echo '--'; + } + ?> +
    + +
    +
    status; ?>
    +
    + +
    +
    diff --git a/themes/modern/readme.txt b/themes/modern/readme.txt new file mode 100644 index 000000000..e81f48ca5 --- /dev/null +++ b/themes/modern/readme.txt @@ -0,0 +1,11 @@ + +Theme: Modern +Date: July 2026 + +Description: A modern, clean theme for ATutor 2.2 with updated colors, + improved readability, and responsive design elements. + +Installing: See section "Installing a New Theme" in the themes_readme.txt + file located in the themes/ top directory. + +License: Falls under the GPL agreement. See http://www.gnu.org/copyleft/gpl.html. diff --git a/themes/modern/registration.tmpl.php b/themes/modern/registration.tmpl.php new file mode 100644 index 000000000..335c5830f --- /dev/null +++ b/themes/modern/registration.tmpl.php @@ -0,0 +1,345 @@ + + + + + + +
    + + +
    + + + +
    + + + + +
    "") $getvars = '?en_id='. $_REQUEST["en_id"]; echo $_SERVER['PHP_SELF'] . $getvars; ?>" name="form"> + + + + + + +
    + + + + + + \ No newline at end of file diff --git a/themes/modern/rtl.css b/themes/modern/rtl.css new file mode 100644 index 000000000..62830d3df --- /dev/null +++ b/themes/modern/rtl.css @@ -0,0 +1,114 @@ +/* for right to left languages */ + +html, body { + direction: rtl; + +} + +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + height:1.45em; + width:1.45em; + float: right; +} + +div.box { + line-height:150%; + font-style:normal; +} + +div.menuedit{ + float:left; +} + + +.del-content-icon{ + border:0; +} + + +#editable_table a{ + margin-right:.5em; + +} + +#topnavlist{ + float:left; + +} +.logoutbar{ + white-space:nowrap; + text-align:left; + border-top:1px solid #eeeeee; +} + +.fl-force-right{ + float:left; +} + +.buttonbox{ + float:left; + +} +div#breadcrumbs{ + + float:right; +} +ul.current_list li{ + width:90%; +} + +.current_box{ + width:34%; +} + +.my_course_container{ + width:55%; +} + +#content-tool-links{ + float:right; +} +.details-text{ + font-style:inherit; +} + +.admin_container{ + float:left; + white-space:normal; +} +.page-title{ + + margin-top:1em; +} + +.top-tool{ + width:95%; +} +.child-top-tool li{ + white-space:normal; + overflow:visible; +} + +#contentcolumn { +white-space:normal; +} +table.etabbed-table { + padding-right:5em; + *margin-right:4em; +} +#subnavlist{ + *margin-right:4em; +} + +div.details-text img{ + float:right; + clear:right; + padding-left:.2em; +} + +div.details-text{ + line-height:1.5em; + margin-right:.2em; +} \ No newline at end of file diff --git a/themes/modern/safari.css b/themes/modern/safari.css new file mode 100644 index 000000000..a1f80fa90 --- /dev/null +++ b/themes/modern/safari.css @@ -0,0 +1,4 @@ +ul#topnavlist li a { +/* padding: .1em 1.8em .4em 1.8em; */ +} + diff --git a/themes/modern/screenshot.png b/themes/modern/screenshot.png new file mode 100644 index 000000000..bf9d8b01a Binary files /dev/null and b/themes/modern/screenshot.png differ diff --git a/themes/modern/search.tmpl.php b/themes/modern/search.tmpl.php new file mode 100644 index 000000000..399560d27 --- /dev/null +++ b/themes/modern/search.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/social/activities.tmpl.php b/themes/modern/social/activities.tmpl.php new file mode 100644 index 000000000..87b52eee2 --- /dev/null +++ b/themes/modern/social/activities.tmpl.php @@ -0,0 +1,34 @@ + +
    +
    +
    + getVisitors(); + echo _AT('visitor_counts').': '.$count['total']; + ?> +
    +

    +
    + + +
    + activities)): ?> +
      + activities as $id=>$array): ?> +
    • + +
    + activities)==SOCIAL_FRIEND_ACTIVITIES_MAX): ?> + + + + + +

    +
    \ No newline at end of file diff --git a/themes/modern/social/admin/delete_applications.tmpl.php b/themes/modern/social/admin/delete_applications.tmpl.php new file mode 100644 index 000000000..fd6036877 --- /dev/null +++ b/themes/modern/social/admin/delete_applications.tmpl.php @@ -0,0 +1,42 @@ +
    +
    +

    +
    + +all_apps)): ?> +all_apps as $id=>$app_obj): + //skip the ones that are installed already + if ($this->list_of_my_apps[$id]!=null){ + continue; + } + $author = ($app_obj->getAuthor()!='')?$app_obj->getAuthor():_AT('unknown'); +?> +
    +
    + getAppLink($app_obj->getTitle(), $id); ?>
    + getAppLink('', $id); ?>
    + + getAuthorEmail()!=''): ?> + + + +
    + +
    + + +
    +
    + getDescription(); ?>

    + getUrl(); ?>
    +
    +

    +
    + + + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/application_settings.tmpl.php b/themes/modern/social/application_settings.tmpl.php new file mode 100644 index 000000000..7c6ea39ff --- /dev/null +++ b/themes/modern/social/application_settings.tmpl.php @@ -0,0 +1,66 @@ +"; + ?> + + + + + + + +
    + \ No newline at end of file diff --git a/themes/modern/social/applications.tmpl.php b/themes/modern/social/applications.tmpl.php new file mode 100644 index 000000000..d1bffc6e6 --- /dev/null +++ b/themes/modern/social/applications.tmpl.php @@ -0,0 +1,112 @@ + + + + + +'; +} +?> + +
    + \ No newline at end of file diff --git a/themes/modern/social/basic_profile.tmpl.php b/themes/modern/social/basic_profile.tmpl.php new file mode 100644 index 000000000..05a8fd6ed --- /dev/null +++ b/themes/modern/social/basic_profile.tmpl.php @@ -0,0 +1,135 @@ + \ No newline at end of file diff --git a/themes/modern/social/connections.tmpl.php b/themes/modern/social/connections.tmpl.php new file mode 100644 index 000000000..225313f5b --- /dev/null +++ b/themes/modern/social/connections.tmpl.php @@ -0,0 +1,109 @@ + +rand_key != ''){ + $last_search = $_POST['search_friends_'.$this->rand_key]; + } elseif(isset($_GET['search_friends'])) { + $last_search = htmlentities_utf8($_GET['search_friends']); + } else { + $last_search = html_entity_decode($_POST['search_friends_'.$rand]); + } + //take out double quotes until there is a way to escape XSS from the ajax script. + $last_search = preg_replace('/\"/', '', $last_search); +?> + \ No newline at end of file diff --git a/themes/modern/social/edit_profile.tmpl.php b/themes/modern/social/edit_profile.tmpl.php new file mode 100644 index 000000000..66e10f755 --- /dev/null +++ b/themes/modern/social/edit_profile.tmpl.php @@ -0,0 +1,166 @@ + \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_additional.tmpl.php b/themes/modern/social/edit_profile/edit_additional.tmpl.php new file mode 100644 index 000000000..f8fb4150c --- /dev/null +++ b/themes/modern/social/edit_profile/edit_additional.tmpl.php @@ -0,0 +1,34 @@ +title, 'input.text'); + if($this->interests){ + $edit_this = AT_print($this->interests, 'input.text'); + }else if ($this->associations){ + $edit_this = AT_print($this->associations, 'input.text'); + }else if($this->awards){ + $edit_this = AT_print($this->awards, 'input.text'); + } + +?> +
    + +

    +
    +
    + +
    + +
    + + id)): ?> + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_contact.tmpl.php b/themes/modern/social/edit_profile/edit_contact.tmpl.php new file mode 100644 index 000000000..d44aebbf4 --- /dev/null +++ b/themes/modern/social/edit_profile/edit_contact.tmpl.php @@ -0,0 +1,39 @@ +con_name, 'input.text'); + $con_phone = AT_print($this->con_phone, 'input.text'); + $con_email = AT_print($this->con_email, 'input.text'); + $con_address = AT_print($this->con_address, 'input.text'); + +?> + +

    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_education.tmpl.php b/themes/modern/social/edit_profile/edit_education.tmpl.php new file mode 100644 index 000000000..82ef516e5 --- /dev/null +++ b/themes/modern/social/edit_profile/edit_education.tmpl.php @@ -0,0 +1,63 @@ +university, 'input.text'); + $country = AT_print($this->country, 'input.text'); + $province = AT_print($this->province, 'input.text'); + $degree = AT_print($this->degree, 'input.text'); + $field = AT_print($this->field, 'input.text'); + $from = AT_print($this->from, 'input.text'); + $to = AT_print($this->to, 'input.text'); + $description = AT_print($this->description, 'input.text'); +?> + + +

    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + <?php echo _AT('date'); ?>
    + +
    +
    + <?php echo _AT('date'); ?>
    + +
    +
    +
    + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_personal.tmpl.php b/themes/modern/social/edit_profile/edit_personal.tmpl.php new file mode 100644 index 000000000..a4c29262e --- /dev/null +++ b/themes/modern/social/edit_profile/edit_personal.tmpl.php @@ -0,0 +1,52 @@ +per_weight, 'input.text'); +$per_height = AT_print($this->per_height, 'input.text'); +$per_hair = AT_print($this->per_hair, 'input.text'); +$per_eyes = AT_print($this->per_eyes, 'input.text'); +$per_ethnicity = AT_print($this->per_ethnicity, 'input.text'); +$per_languages = AT_print($this->per_languages, 'input.text'); +$per_disabilities = AT_print($this->per_disabilities, 'input.text'); +?> + +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_position.tmpl.php b/themes/modern/social/edit_profile/edit_position.tmpl.php new file mode 100644 index 000000000..99593895b --- /dev/null +++ b/themes/modern/social/edit_profile/edit_position.tmpl.php @@ -0,0 +1,51 @@ +company); + $title = htmlentities_utf8($this->profile_title); + $description = htmlentities_utf8($this->description, false); + $from = htmlentities_utf8($this->from); + $to = htmlentities_utf8($this->to); +?> + + +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + <?php echo _AT('date'); ?>
    + +
    +
    + <?php echo _AT('date'); ?>
    + +
    +
    +
    + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_representation.tmpl.php b/themes/modern/social/edit_profile/edit_representation.tmpl.php new file mode 100644 index 000000000..a7dec98f5 --- /dev/null +++ b/themes/modern/social/edit_profile/edit_representation.tmpl.php @@ -0,0 +1,42 @@ +rep_name, 'input.text'); +$rep_title = AT_print($this->rep_title, 'input.text'); +$rep_phone = AT_print($this->rep_phone, 'input.text'); +$rep_email = AT_print($this->rep_email, 'input.text'); +$rep_address = AT_print($this->rep_address, 'input.text'); +?> + +

    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + + + + + + + +
    +
    \ No newline at end of file diff --git a/themes/modern/social/edit_profile/edit_websites.tmpl.php b/themes/modern/social/edit_profile/edit_websites.tmpl.php new file mode 100644 index 000000000..b8c651362 --- /dev/null +++ b/themes/modern/social/edit_profile/edit_websites.tmpl.php @@ -0,0 +1,29 @@ +url, 'input.text'); +$site_name = AT_print($this->site_name, 'input.text'); +?> +

    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + + + + +
    +
    + \ No newline at end of file diff --git a/themes/modern/social/friend_list.tmpl.php b/themes/modern/social/friend_list.tmpl.php new file mode 100644 index 000000000..edb78d8c8 --- /dev/null +++ b/themes/modern/social/friend_list.tmpl.php @@ -0,0 +1,35 @@ +
    + +
    +
    +
    +

    +
    + friends)): ?> + friends as $id=>$m_obj): + if (is_array($m_obj) && $m_obj['added']!=1){ + //skip over members that are not "my" friends + continue; + } ?> +
    + +
    +
    + +
    +
    + +
    + + + +
    +
    diff --git a/themes/modern/social/index_public.tmpl.php b/themes/modern/social/index_public.tmpl.php new file mode 100644 index 000000000..2d37799b2 --- /dev/null +++ b/themes/modern/social/index_public.tmpl.php @@ -0,0 +1,82 @@ + +rand_key != ''){ + $last_search = $_POST['search_friends_'.$this->rand_key]; + } elseif(isset($_GET['search_friends'])) { + $last_search = htmlentities_utf8($_GET['search_friends']); + } else { + if(isset($_POST['search_friends_'.$rand])){ + $last_search = html_entity_decode($_POST['search_friends_'.$rand]); + } + } + //take out double quotes until there is a way to escape XSS from the ajax script. + if(isset($last_search)){ + $last_search = preg_replace('/\"/', '', $last_search); + } + $search_field = htmlentities_utf8($this->search_field); +?> +page, $this->num_pages, 'search_friends='.$search_field, 1); ?> + + + + +
    +page, $this->num_pages, 'search_friends='.$search_field, 1); ?> diff --git a/themes/modern/social/individual_application.tmpl.php b/themes/modern/social/individual_application.tmpl.php new file mode 100644 index 000000000..54d64556c --- /dev/null +++ b/themes/modern/social/individual_application.tmpl.php @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/themes/modern/social/notifications.tmpl.php b/themes/modern/social/notifications.tmpl.php new file mode 100644 index 000000000..719660637 --- /dev/null +++ b/themes/modern/social/notifications.tmpl.php @@ -0,0 +1,72 @@ +pending_requests)): +?> + +

    +
    +pending_requests as $id=>$r_obj): ?> +
    +
    + <?php echo _AT('accept_request'); ?> <?php echo _AT('reject_request'); ?> +
    +
      +
    • +
    • +
    +

    + +

    + + +group_invitations)): ?> +

    +group_invitations as $id=>$sender_ids): + $gobj = new SocialGroup($id); + $name = ''; + foreach($sender_ids as $index=>$sender_id){ + $name .= printSocialName($sender_id).', '; + } + $name = substr($name, 0, -2); +?> +
    +
    + <?php echo _AT('accept_request'); ?> <?php echo _AT('reject_request'); ?> +
    +
      +
    • getID()).'">'.$gobj->getName().''); ?>
    • +
    +
    +
    + + + +group_requests)): +?> + +

    +
    +group_requests as $id=>$senders): + $gobj = new SocialGroup($id); + foreach($senders as $index=>$sender_id): + $name = printSocialName($sender_id);?> +
    +
    + <?php echo _AT('accept_request'); ?> <?php echo _AT('reject_request'); ?> +
    +
      +
    • getID()).'">'.$gobj->getName().''); ?>
    • +
    +
    + + + +

    + + \ No newline at end of file diff --git a/themes/modern/social/oauth/authorize.tmpl.php b/themes/modern/social/oauth/authorize.tmpl.php new file mode 100644 index 000000000..ea700409e --- /dev/null +++ b/themes/modern/social/oauth/authorize.tmpl.php @@ -0,0 +1,15 @@ +
    +

    Grant access to your private information?

    + +
    +
    + An application is requesting access to your information. You should + only approve this request if you trust the application. +
    + + + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/oauth/footer.tmpl.php b/themes/modern/social/oauth/footer.tmpl.php new file mode 100644 index 000000000..5bb337465 --- /dev/null +++ b/themes/modern/social/oauth/footer.tmpl.php @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/themes/modern/social/oauth/header.tmpl.php b/themes/modern/social/oauth/header.tmpl.php new file mode 100644 index 000000000..370ef1851 --- /dev/null +++ b/themes/modern/social/oauth/header.tmpl.php @@ -0,0 +1,70 @@ + + + + + <?php echo SITE_NAME; ?> : <?php echo $this->page_title; ?> + + + + + + + + + +rtl_css; ?> +course_id) && $system_courses[$this->course_id]['rss']): ?> + + + + + + + + +custom_css; ?> + + + + +
    +'; + else: + echo '
    '; + endif; ?> +

    section_title; ?> + course_id) && $this->course_id > 0) && ($_SESSION['enroll'] == AT_ENROLL_NO)) : ?> + - + +

    +
    +
    diff --git a/themes/modern/social/profile_picture.html.php b/themes/modern/social/profile_picture.html.php new file mode 100644 index 000000000..32a7a8fc7 --- /dev/null +++ b/themes/modern/social/profile_picture.html.php @@ -0,0 +1,38 @@ + + diff --git a/themes/modern/social/settings/account_settings.tmpl.php b/themes/modern/social/settings/account_settings.tmpl.php new file mode 100644 index 000000000..7e16ea81b --- /dev/null +++ b/themes/modern/social/settings/account_settings.tmpl.php @@ -0,0 +1,10 @@ +
    +
    +

    +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/settings/application_settings.tmpl.php b/themes/modern/social/settings/application_settings.tmpl.php new file mode 100644 index 000000000..a2f0b313c --- /dev/null +++ b/themes/modern/social/settings/application_settings.tmpl.php @@ -0,0 +1,27 @@ +my_apps)): + echo _AT('no_gadgets_installed'); +else: ?> +
    +
    +
    +

    +
    + my_apps as $id=>$app_obj): ?> +
    +
    getTitle(); ?>
    +
    + + home_display[$id]))? $checked = ' checked="checked"': $checked = ''; ?> + /> +
    +

    +
    + +
    + + +
    +
    +
    + diff --git a/themes/modern/social/settings/privacy_settings.tmpl.php b/themes/modern/social/settings/privacy_settings.tmpl.php new file mode 100644 index 000000000..28e0d1656 --- /dev/null +++ b/themes/modern/social/settings/privacy_settings.tmpl.php @@ -0,0 +1,144 @@ +
    +
    +

    +
    +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_BASIC][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_PROFILE][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_STATUS_UPDATE][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    + +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_CONNECTION][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_EDUCATION][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->profile_prefs[AT_SOCIAL_PROFILE_POSITION][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    +
    + +
    +
    +
    +
    + controller->getPermissionLevels() as $control_id=>$control_string): + (isset($this->search_prefs[AT_SOCIAL_SEARCH_VISIBILITY][$control_id]))?$checked=' checked="checked"':$checked=''; ?> + + /> + +
    +
    + +
    + + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/settings/settings_menu.tmpl.php b/themes/modern/social/settings/settings_menu.tmpl.php new file mode 100644 index 000000000..117d2773d --- /dev/null +++ b/themes/modern/social/settings/settings_menu.tmpl.php @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/themes/modern/social/sgroup_create.tmpl.php b/themes/modern/social/sgroup_create.tmpl.php new file mode 100644 index 000000000..dc61823f8 --- /dev/null +++ b/themes/modern/social/sgroup_create.tmpl.php @@ -0,0 +1,38 @@ + + +
    +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/sgroup_edit.tmpl.php b/themes/modern/social/sgroup_edit.tmpl.php new file mode 100644 index 000000000..594374ec1 --- /dev/null +++ b/themes/modern/social/sgroup_edit.tmpl.php @@ -0,0 +1,93 @@ +group_obj)){ + //edit + $form_url = AT_SOCIAL_BASENAME.'groups/edit.php'; + $button_name = 'save'; + $name = $this->group_obj->getName(); + $logo = $this->group_obj->getLogo(); + $privacy = $this->group_obj->getPrivacy(); + $description = $this->group_obj->getDescription(false); + $id = $this->group_obj->getID(); +} else { + //create new one + $form_url = AT_SOCIAL_BASENAME.'groups/create.php'; + $button_name = 'create'; +} +?> + +
    +
    +
    + + +
    + + group_obj)): ?> +
    + + +
    + + +
    + + +
    + +
    + +
    + /> +
    + /> + +
    + +
    + + + +
    + +
    + + +
    + +
    + + + +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/sgroup_invite.tmpl.php b/themes/modern/social/sgroup_invite.tmpl.php new file mode 100644 index 000000000..ac12014f3 --- /dev/null +++ b/themes/modern/social/sgroup_invite.tmpl.php @@ -0,0 +1,46 @@ +group_obj); ?> +
    +
    +

    +
    +
      + group_obj->getGroupMembers() as $k=>$person_obj): ?> +
    • getID()); ?>
    • + +
    +
    +
    +
    +
    +

    +
    + +
    + $member_id): + if(in_array(new Member($member_id), $this->group_obj->getGroupMembers())){ + $extra = ' disabled="disabled"'; + } else { + $extra = ''; + } + + if(isset($_POST['new_members'][$member_id])){ + $extra .= ' checked="checked"'; + } + ?> + /> +
    + +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/themes/modern/social/sgroup_list.tmpl.php b/themes/modern/social/sgroup_list.tmpl.php new file mode 100644 index 000000000..bed3e3901 --- /dev/null +++ b/themes/modern/social/sgroup_list.tmpl.php @@ -0,0 +1,61 @@ + +rand_key != ''){ + $last_search = $_POST['search_friends_'.$this->rand_key]; + } else { + $last_search = $_POST['search_friends_'.$rand]; + } +?> + +
    +
    +

    +
    + + + + + +
    +
    +
    +
    +
    +

    +
    + grp_members)): + echo "

    "._AT('there_are_entries', sizeof($this->grp_members))."

    "; + foreach ($this->grp_members as $id=>$person_obj): + ?> +
    + grp_obj->getUser()): ?> +
    <?php echo _AT('remove_group_member'); ?>
    + +
    +
    getID()); ?>
    +
    + getDetails(); + echo printSocialName($person_obj->getID()) . '
    '; + echo $profile['country'] . ' ' . $profile['province'] . '
    '; + ?> +
    +

    +
    +
    + +
    + +
    + diff --git a/themes/modern/social/sgroup_search.tmpl.php b/themes/modern/social/sgroup_search.tmpl.php new file mode 100644 index 000000000..f244748e0 --- /dev/null +++ b/themes/modern/social/sgroup_search.tmpl.php @@ -0,0 +1,42 @@ + + + diff --git a/themes/modern/social/sgroup_view.tmpl.php b/themes/modern/social/sgroup_view.tmpl.php new file mode 100644 index 000000000..9631e9905 --- /dev/null +++ b/themes/modern/social/sgroup_view.tmpl.php @@ -0,0 +1,135 @@ +printConfirm(); ?> +
    + + group_obj->group_members)): ?> + | | + + + group_obj->getUser() == $_SESSION['member_id']): ?> + | + | + + + | + + + + + | + + + + | + + +
    +
    + group_obj->getGroupActivities() as $activity_id=>$activity_title){ + echo $activity_title; + } + ?> +
    +
    + +group_obj->group_members)): ?> +
    +
    +

    +
    +
    + +
    + +

    + + + + +
    +
    + group_obj->getMessages() as $id=>$message_array): ?> +
    + + group_obj->getUser()==$_SESSION['member_id']){ + echo ''._AT('remove').''; + } + ?> +

    +
    + +
    +
    + << + >> +
    +
    +
    +
    + + +
    +

    +
    +
    group_obj->getLogo();?>
    +
    +
    +
    group_obj->getName();?>
    + +
    +
    group_obj->getGroupType();?>
    + +
    +
    group_obj->getPrivacy()?_AT('private'):_AT('public'))?>
    + +
    +
    group_obj->getUser());?>
    + +
    +
    group_obj->getCreatedDate(), AT_DATE_MYSQL_DATETIME);?>
    + +
    +
    group_obj->getLastUpdated(), AT_DATE_MYSQL_DATETIME);?>
    + +
    +
    group_obj->group_members);?>
    +
    +

    +
    \ No newline at end of file diff --git a/themes/modern/social/sgroups.tmpl.php b/themes/modern/social/sgroups.tmpl.php new file mode 100644 index 000000000..8b07e7096 --- /dev/null +++ b/themes/modern/social/sgroups.tmpl.php @@ -0,0 +1,41 @@ + +rand_key != ''){ + $last_search = $_POST['search_groups_'.$this->rand_key]; + } else { + $last_search = $_POST['search_groups_'.$rand]; + } +?> + diff --git a/themes/modern/social/sprofile.tmpl.php b/themes/modern/social/sprofile.tmpl.php new file mode 100644 index 000000000..4a170a974 --- /dev/null +++ b/themes/modern/social/sprofile.tmpl.php @@ -0,0 +1,298 @@ + + + + + diff --git a/themes/modern/social/tiny_applications.tmpl.php b/themes/modern/social/tiny_applications.tmpl.php new file mode 100644 index 000000000..17472bb93 --- /dev/null +++ b/themes/modern/social/tiny_applications.tmpl.php @@ -0,0 +1,37 @@ + + + + + + +list_of_my_apps as $id=>$app_obj): +?> +
    +
    +
    + <?php echo _AT('delete'); ?> + + <?php echo _AT('settings');?> +
    +

    getAppLink($app_obj->getTitle(), $id); ?>

    +
    +
    + + +

    + \ No newline at end of file diff --git a/themes/modern/social/tiny_sgroups.tmpl.php b/themes/modern/social/tiny_sgroups.tmpl.php new file mode 100644 index 000000000..ec712db7c --- /dev/null +++ b/themes/modern/social/tiny_sgroups.tmpl.php @@ -0,0 +1,36 @@ +

    +
    + my_groups as $i=>$grp): + $grp_obj = new SocialGroup($grp); + + ?> +
    + getUser() == $_SESSION['member_id']): ?> +
    <?php echo _AT('settings'); ?>
    + + getUser() != $_SESSION['member_id']): ?> +
    <?php echo _AT('delete'); ?>
    + + + + +
    +
    + getLogo(); ?> + +
    +
    +

    getName(); ?>


    + getGroupType();?>
    + getPrivacy()?_AT('private'):_AT('public'))?>
    + '. $grp_obj->getDescription();?>
    +
    +
    +

    +
    + + +
    diff --git a/themes/modern/styles.css b/themes/modern/styles.css new file mode 100644 index 000000000..00db9f8ba --- /dev/null +++ b/themes/modern/styles.css @@ -0,0 +1,4961 @@ +/* +See colour combo at +http://www.colorcombos.com/color-schemes/294/ColorCombo294.html +#B7C68B, #EAEAEA, #EAEAEA, #B3A580, #685642 + +bg #F3F3F3, +bottom border: ;#E5E5E5 +button #EAEAEA, #E5E5E5, hover #DADADA +blueish bg: #F5F9FC + background-image: linear-gradient(#FAFAFA, #EAEAEA); +*/ + +ms-viewport {width : auto} + +html,body{ + height:100%; +} +.site-name{ + font-size:small; + font-weight:bold; + padding-left:1em; + color:gray; + white-space:nowrap; + margin-left:.8em; + margin-top:.5em; + float:left; + width:50%; +} + +h1#site-name-lrg { + float: left; + margin-left:1em; + margin-top:-.5em; +} + +/* main body attributes STARTED HERE */ +body { + font-family: Verdana, Helevetica, Arial, sans-serif; + margin:0px; + background-color: #ffffff; + color:#003333; + font-size:0.8em; + + +} +.page_wrapper{ +/* border:1px solid #aaaaaa;*/ + width:98%; + margin-left:auto; + margin-right:auto; + background-color: #ffffff; +/* border-radius: 0em 0em 1em 1em; + -moz-border-radius: 0em 0em 1em 1em; + -moz-box-shadow:.1em .1em .1em #B7C68B; + box-shadow: .1em .1em .1em #B7C68B; + */ +/* background-image: url('images/atutor_head.jpg');*/ + background-position: 0% 0%; + background-repeat: repeat-x; + background-size:auto auto; + /* border:1px solid #685642; */ + +} +p { + margin: 0.5em 0em 1em 0em; + text-align: justify; + line-height: 150%; +/* font-size: 1em;*/ +} + +p a { + text-decoration: underline; +} + +p a:visited { + color: #3F2670; + background-color: transparent; +} + +p a:active { + color: #A50707; + background-color: transparent; +} + +h1, h2, h3, h4, h5, h6 { + color: #545454; + font: 100% Verdana, Helvetica, Arial, sans-serif; + font-weight: bold; + padding-top: 0.5em; +} + +h1 { + font-size: 160%; +} + +h2 { + font-size: 150%; +} +h2.sidebox{ + font-size: 110%; +} +h2.box{ + font-size: 110%; +} +h3 { + font-size: 130%; +} + +h4 { + font-size: 120%; +} + + +h5 { + font-size: 100%; +} + + + +/* Table of content attributes*/ +p.toc{ + font-family: Verdana, Helevetica, Arial, sans-serif; + background-color: #E9F4F3; + padding: .6em; + margin-bottom: .6em; + margin-top: 0em; + margin-left: 1em; + margin-right: 3em; + border: 1px #ACCFCC solid; +} + +/* list attributes */ +ul { + font-family: Verdana, Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; + padding:0px; +} + +li { + font-family: Verdana, Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +li.folders { + list-style: disc url(../../images/folder.gif) outside; + font-family: Verdana, Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +li.folders .disabled { + color: #B8AE9C; +} + +ul.folder{ + + list-style-image:none; + list-style-position:outside; + list-style-type:none; + margin:0em; + padding:0em; + +} + +/* link attributes */ +a:link, a:visited { + color: #4183C4; +} +a:hover { + color: #932318; + color:#ffffff; +} +a:active { + color: #932318; +} +/* align text to the left */ +.left { + text-align: left; +} + +a.dropdown-title { + color: white; + font-weight: normal; + text-decoration: none; +} + + +/* table border */ +.tableborder { + border: 1px #595241 solid; +} + +/* main submit button */ +.button { + background-color: #B3A580; + color: #777777; + font-weight: normal; + border: #AAA solid 1px; + border-radius: .3em .3em .3em .3em; + -moz-border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ +/* font-size:100%;*/ + +} +.button:focus, .button:hover { + background-color: #EAEAEA;; + border:1px solid #E5E5E5; + +} +.button:active { + background-color: #685642; + color: #F4F0CB; +} +/* small submit button at top */ +.button2 { + font-family: Verdana, Helevetica, Arial, sans-serif; + background-color: #B3A580; + +} +.button2:focus { + background-color: #685642; + border: #ACCFCC solid 1px; + color: #F4F0CB; +} + +/* date attributes */ +small.date { + font-family: Verdana, Helevetica, Arial, sans-serif; + color: #595241; + margin-bottom: 0px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; + font-size:1em; +} + +/* page breakline */ +hr { + color: #ACCFCC; + background-color: white; + height: 1px; +} + +/* message box styles */ + +/* Editor box small */ +.editorsmallbox { + font-family: Verdana, Helevetica, Arial, sans-serif; + background-color: #E9F4F3; + padding: 2px; + padding-right: 3px; + border: 1px #ACCFCC solid; +} + +/* Editor box large */ +.editorlargebox { + font-family: Verdana, Helevetica, Arial, sans-serif; + background-color: #E9F4F3; + margin-left:1em; + padding-left: .2em; + padding-right: .5em; + padding-top: .5em; + padding-bottom: .4em; + border: 1px #ACCFCC solid; +} + + +select.dropdown { + font-family: Verdana, Helevetica, Arial, sans-serif; +} + +.highlight, a.highlight { + background-color: #5B8E88; + color: white; +} + +a .highlight{ + background-color: #5B8E88; + color: white; +} + +.center { + text-align: center; +} + + +/* edit content tabs */ +.buttontab { + color:#555; + white-space: nowrap; + background-color: #FFFFFF; + margin: 0px; + border:0; + font-weight:500; + text-align:center; + padding:0em 0em 0em; + +} + +.tab { + border-top: 1px solid #EAEAEA; + border-left: 1px solid #EAEAEA; + border-right: 1px solid #EAEAEA; + border-bottom:0; + text-align: center; + white-space: nowrap; + width:7%; + padding:0; + margin:0; +} + +.buttontab selected { + font-family: Helvetica, Arial, Helvetica, sans-serif; + border:0; + padding-left: 3px; + padding-right: 3px; + background-color: #FFFFFF; + margin: 0px; + font-weight:bold; + text-align:center; + padding:0em 1em 0em; + white-space: nowrap; + text-decoration:underline; + width:12%; +} +td.selected{ + width:13%; + font-weight: bold; + text-align: center; + white-space:nowrap; + background-color: white; + border-top: 1px #B8AE9C solid; + border-left: 1px #B8AE9C solid; + border-right: 1px #B8AE9C solid; + padding-left: 3px; + padding-right: 3px; + +} +.econtainer{ + background-color: #fffaf0; + border:1px #6F7172 solid; + margin-left:.5em; +} + +.tab a:link, .etab a:visited { + color: black; + background-color: white; + +} +.tab a:hover { + color: black; + background-color: white; +} + +.etabself { + background-color: #6F7172; + + text-align: center; + font-weight: bold; + padding: 2px; +} + +.unsaved { + color: red; + background-color: #FFFDE0; + font-weight: bold; +} +.saved { + background-color: #FFFDE0; + margin: 10px; +} +.unsaved input[type="submit"]{ + border:2px solid red; + } + + +/* the side menu */ +/* the side menu heading */ +td.dropdown-heading { + background-color: #EAEAEA; + color: #595241; + border: 1px solid #EAEAEA; + font-weight: bold; + padding: 2px; +} + +td.dropdown-heading a, td.dropdown-heading a:hover, td.dropdown-heading a:visited { + text-decoration: none; +} + +td.dropdown-heading.closed { + border-bottom: 1px solid #ECFEEA; +} + +/* the side menu content */ +td.dropdown { + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #EAEAEA; + border-right: 1px solid #EAEAEA; + border-bottom: 1px solid #EAEAEA; + font-weight: normal; +} +td.dropdown a, td.dropdown a:visited { + color: #595241; + text-decoration: none; +} +td.dropdown a:hover { + color: #595241; + text-decoration: underline; +} +td.dropdown.cell { + border-bottom: 0px; +} +td.dropdown strong { + color: #2A6C28; +} + +/* added for 1.4.2: */ +.results { + padding-left: 20px; +} + +h5.search-results { + background-color: #F7F3ED; + color: #595241; + padding: 1px; + margin-bottom: 5px; + margin-top: 10px; + margin-left: 5px; +} + +small.search-info { + color: #595241; +} + +p.search-description { + background-color: #FFFCE5; + color: #595241; +} + +.test-box { + background-color: #F7F3ED; + color: #595241; + border-left: 1px solid #595241; + border-right: 1px solid #595241; + border-top: 1px solid #595241; + font-weight: bold; + padding: 2px; +} + +/***************************************************************/ + +table.tabbed-table { + + width: 100%; + border:1px black solid; +} +table.tabbed-table th#left-empty-tab { + background-color: transparent; + width: 15px; + border-bottom: 1px solid #B8AE9C; +} +table.tabbed-table th#right-empty-tab { + text-align: right; + background-color: transparent; + border-bottom: 1px solid #B8AE9C; + width: 400px; + padding-right: 5px; +} +table.tabbed-table th#right-empty-tab a { + text-decoration: underline; +} +table.tabbed-table th.tab-spacer { + background-color: transparent; + width: 5px; + border-bottom: 1px solid #B8AE9C; +} + +table.tabbed-table th.tab { + padding-top: 2px; + padding-bottom: 2px; + width: 110px; + background-color: #E9F4F3; + border-bottom: 1px solid #B8AE9C; + border-left: 1px solid #B8AE9C; + border-top: 1px solid #B8AE9C; + border-right: 1px solid #B8AE9C; +} +table.tabbed-table th.tab:hover { + background-color: #ACCFCC; +} + +table.tabbed-table th.tab a:focus { + color: white; +} +table.tabbed-table th.selected { + padding-top: 2px; + padding-bottom: 2px; + width: 110px; + background-color: #ACCFCC; + border-left: 1px solid #B8AE9C; + border-top: 1px solid #B8AE9C; + border-right: 1px solid #B8AE9C; +} + +table.tabbed-table a, table.tabbed-table a:visited, table.tabbed-table a:hover { + color: black; + text-decoration: none; +} + + +a#my-start-page { + padding: 2px; + padding-left: 15px; + background-repeat: no-repeat; + background-position: 2px 5px; +} + +a#back-to { + padding-left: 20px; + background-image: url(images/back.gif); + background-repeat: no-repeat; + background-position: 0px 0px; +} + +div#breadcrumbs { + /* The path bar, including breadcrumbs and add to favorites */ + clear:both; + font-size: 0.85em; + padding-left:.5em; + margin-top:-.3em; + margin-left:-.2em; + padding: 0em 0em .2em .2em; + float:left; + width:99.8%; + border-bottom:1px solid #EAEAEA; + background-color: #F5F9FC; +} +h2.page-title { + clear:right; + padding:0px; +} + +h1 { + margin-bottom: 5px; +} + + +div#help { + border-left: 1px solid black; + border-right: 1px solid black; + border-bottom: 1px solid black; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 5px; + background-color: #F7F3ED; + margin-left: 5px; + margin-right: 5px; + font-size: small; +} + +h3#help-title { + margin-left: 5px; + margin-right: 5px; + border-left: 1px solid black; + border-right: 1px solid black; + padding: 1px; + background-color: #F7F3ED; +} +.line { + border-bottom: 1px solid black; +} +div#help p { + padding: 0px; + margin: 0px; +} + +div#toctoggle { + float: left; + padding-left: 10px; +} + +h1#section-title { + float: left; + margin-left:1em; + margin-top:-.1em; + +} + +div#top-links { + float:right; + clear:both; + padding-right: 5px; + margin-right:20px; + margin-top:0em; +} +div#top-links a:link, div#top-links a:visited { + text-decoration:none; + margin-left:.5em; + margin-right:.5em; + +} +div#top-links a:focus{ + color:black; + background-color:#F6EAD6; +} +#top-links-text{ + float:right; + clear:right; + margin-left: 2em; + margin-top:-1em; + white-space:nowrap; + background-color:#FFFFFF; + border:thin solid #E5E5E5; + font-weight:500; + border-radius: .3em .3em .3em .3em; + -mox-border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ +} +#top-links-jump{ + float:left; + white-space:nowrap; + margin-top:-1em; + padding-right:.5em; +} + +#jumpmenu{ + background-color:#FFFFFF; + border:thin solid #E5E5E5; + border-radius:.3em .3em .3em .3em; + -moz-border-radius:.3em .3em .3em .3em; +/* font-size:100%;*/ +} +a#editor-link { + background-color: #F7F3ED; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 15px; + padding-right: 8px; + border: 1px solid #EAEAEA; + font-weight: normal; + text-decoration: none; +} + +a#editor-link:hover { + background-color: #F7F3ED; + border: 1px solid #B8AE9C; +} + +a#editor-link.off { + background-image: url(images/pen.gif); + background-repeat: no-repeat; + background-position: 0px 2px; +} +a#editor-link.on { + background-image: url(images/pen2.gif); + background-repeat: no-repeat; + background-position: 0px 2px; +} + + +/* for data tables */ + +table.data { +/* border: 1px solid #685642; */ + width: 100%; + float:left; + clear:both; + margin-left:auto; + margin-right: auto; + margin-bottom:1em; + overflow:scroll; + padding:0; + border-top:1px solid #EAEAEA; + border-left:1px solid #EAEAEA; + border-right:1px solid #EAEAEA; + border-bottom:1px solid #EAEAEA; + border-radius:.2em .2em .2em .2em; +} + +table.data th { + /*background-color: #EAEAEA;*/ + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + padding: 3px; + white-space: nowrap; + border-right: 1px solid #EAEAEA; + border-bottom: 1px solid #EAEAEA; +} +table.data th:first-child, table.data td:first-child { + border-left: 1px solid #EAEAEA; + +} +table.data th a { + color: #595241; + padding-right: 15px; + margin-right: 15px; + background-image: url('images/sort.png'); + background-repeat: no-repeat; + background-position: right; +} +table.data td:last-child{ border-right:0; } +table.data tbody { + border-top: 1px solid #EAEAEA; + border-bottom: 1px solid #EAEAEA; +} + +table.data tbody th { + text-align: left; + background-color: #F3F3F3; + cursor: auto; + border-bottom: 1px solid #EAEAEA; +} + +table.data td { + padding: 3px; + border-right: 1px solid #EAEAEA; + border-bottom: 1px solid #EAEAEA; +} + +table.data tbody tr:hover { + background-color: #F5F9FC; + cursor: pointer; +} + +table.data tbody tr.selected { + background-color: #E9F4F3; + cursor: auto; +} + +table.data tfoot { + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); +} + +table.data tfoot tr:first-child td { + padding: 5px; + background-image: url('images/arrow_ltr.gif'); + background-repeat: no-repeat; + background-position: 4px 5px; + padding-left: 40px; +} + +table.data.static tfoot td, table.data.static tfoot tr:first-child td { + border-top: 1px solid #EAEAEA; + padding: 5px; + background-image: none; + +} + +/*buttons*/ +table.data tfoot input { + font-weight: normal; + border: #AAAAAA solid 1px; +} +table.data tfoot input:focus, table.data tfoot input:hover { + color:#685642; + background-color: #DADADA; + border: #685642 solid 1px; + +} + + +/* used for static tables with no form elements: */ +table.data.static tbody tr:hover { + background-color: transparent; + cursor: auto; +} + +/* course browser: */ + +div#browse { + margin-left: auto; + margin-right: auto; + width: 80%; +} + +div.browse-selected { + background-image: url('images/side_arrow.gif'); + background-repeat: no-repeat; + padding-left: 9px; + background-position: center left; +} + +div.browse-unselected { + padding-left: 9px; +} + +ul.browse-list { + list-style: none; + padding:0px; +} + +/* feedback /errors */ +div#error { + width: 100%; + padding: 1em; + background-color: #fde3d7; + color: #000000; + border-left:.5em #ee500a solid; +/* background-color: #F69E94; */ + font-weight: bold; +} +div#error h4 { + color: black; + margin-left: 0px; +} + +div#error a{ + color:red; + text-decoration:underline; +} +div#error ul, div#feedback ul, div#help ul { + position: relative; + list-style: none; + margin-left: 0px; + padding-left: 0px; + list-style-type:none; + width:90%; +} +#message{ + width:100%; + clear:both; +} +.message_link{ + float:right; + margin-right:1em; + margin-left:1em; +} +#message img{ + float:right; + margin-right:1em; +} +#message img:focus{ + background-color:#cccccc; +} +div#error ul li{ + margin-top: 5px; +} + +div#feedback { + width: 100%; + margin-bottom: 2.8em; + padding: 1em; + background-color: #e9fbe9; + /*background-color: #B7C68B;*/ + color: #000000; + font-weight: bold; + border-left: .5em #52e052 solid; +} +div#confirm { + width: 100%; + padding: 1em; + background-color: #f1fbbe; + border-left:.5em #dbf93f solid; + /*background-color: #B7C68B;*/ + color: #000000; + font-weight: bold; +} +/*div#help { + width: 100%; + border-left: .5em solid #ACCFCC; + padding: 15px; + background-color: #E9F4F3; + color: #000000; +}*/ + +div#info { + width: 100%; + padding: 15px; + background-color: #E4EDF7; + border-left: .5em #4538d0 solid; + color: #000000; + font-weight: bold; +clear: both; +float: left; +margin-bottom: .5em; +} +div#info a{ + color:red; + text-decoration:underline; +} +div#warning { + width: 100%; + padding: 15px; + background-color: #f1fbbe; + border-left:.5em #dbf93f solid; + color: #000000; + font-weight: bold; +} +acronym { + cursor: help; +} + +div.news p { + margin-left: 10px; +} +div.news span.date { + font-family: Verdana, Helevetica, Arial, sans-serif; + color: #B8AE9C; +} + +/* home page links */ + +div.home-link { + padding: 2px; + float: left; + text-align: center; + margin: 2px; + width: 120px; + height: 90px; +} +div.home-link:hover { + padding: 1px; + background-color: #F7F3ED; + border: 1px solid #afafaf; + float: left; + text-align: center; + margin: 2px; +} +div.home-link a { + text-decoration: none; + font-weight: bold; +} + +div.home-link img { + border: 0px; +} +/*div#icon_view{ + display:none; +} +div.detail_switch_back{ + display:none; +} +div.detail_switch{ + display:none; +}*/ +div.detail_switch{ +background-image:url('../../images/detail_view.png'); +height:2em; +width:2em; +background-repeat:no-repeat; +background-position: center; + +} +div.detail_switch a, div.detail_switch_back a{ +text-decoration:none; +font-size:0; +} +div.detail_switch_back{ +background-image:url('../../images/icon_view.png'); +height:2em; +width:2em; +background-repeat:no-repeat; +background-position: center; + +} + +/* sequence links */ +div.sequence-links { + float:right; + font-size:1.5em; +} +div.sequence-links a { + text-decoration: none; +} +#gototop{ +margin:1.5em; +} +#gototop img{ +height:1.8em; +width:2.2em; +} +div.dropdown { + width: 200px; + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #ECFEEA; + border-right: 1px solid #ECFEEA; + border-bottom: 1px solid #ECFEEA; + font-weight: normal; +} + +div.dropdown-heading { + background-color: #ACCFCC; + color: #595241; + border-left: 1px solid #ECFEEA; + border-right: 1px solid #ECFEEA; + border-top: 1px solid #ECFEEA; + font-weight: bold; + padding: 2px; +} + +.required { + font-weight: bold; + color: red; + padding-right: 2px; +} + +div#content_text { + margin-left: 5px; +} + +form { + clear: none; + display:inline; +} + + +optgroup { + font-size: small; +} + +/* packing */ +div.paging { + width: 100%; + text-align: center; + margin: 0.5em auto; +} +div.paging ul { + list-style: none; + display: inline; + padding: 0px; + border: 1px solid #000; +} +div.paging li { + display: inline; + padding-left: 2px; + padding-right: 2px; + padding-top: 0px; + padding-bottom: 0px; +} + +div.paging li a { + text-decoration: none; + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid white; + border-right: 1px solid white; +} + +div.paging li a:hover, div.paging li a.current { + background-color: #DADADA; + border-left: 1px solid #000; + border-right: 1px solid #000; +} + +#header{ +/* background-image: url('images/mesh-pattern.jpg'); + background-repeat: repeat-x;*/ + background-color:#F5F9FC; + /* background: #F5F9FC linear-gradient(#F5F9FC 0, #B0C4DE 100%);*/ + background-image: linear-gradient(to right, #FAFAFA, #EAEAEA); +/* background-position: 99% 99%;*/ +/* background-image: linear-gradient(to right, #FAFAFA, #EAEAEA); */ + height:4.5em; + margin-bottom:-3em; + padding-bottom: 2.2em; + border-left: 1px solid #EAEAEA; +} + +#header a{ + font-weight:600; +} + + +#header a:hover { + color: #595241; + background-color: #F7F3ED; +} +#top-bar{ +background-color:#F3F3F3; +border-bottom: 1px solid #E5E5E5; +height:2.5em; +} +#tl_corner{ + + background-image:url('images/tl_corner.gif'); + background-position: top left; + background-repeat: no-repeat; + padding:0; +} +div.top { + /* Top space */ + background-color: white; + color: #FFF; + margin: 0; + padding: 0; + /* padding-top:9px; */ +} +div.tabs { + /* Navigational Plone Tabs(tm), implemented by customizing the a tag - they are surprisingly elegant. The power of CSS runs strong in these :) */ + background-color: transparent; + border-collapse: collapse; + border-bottom: 1px solid #B8AE9C; + padding: 0.5em 0em 0em 2em; + white-space: nowrap; +} + +div.tabs a { + /* The normal, unselected tabs. They are all links */ + background-color: transparent; + border-color: #B8AE9C; + border-width: 1px; + border-style: solid solid none solid; + color: #595241; + height: 1.2em; + margin-right: 0.5em; + padding: 0em 2em 0em; + +} + +div.tabs a.selected { + /* The selected tab. There's only one of this */ + background-color: white; + border-bottom: #B8AE9C 1px solid; + color: #595241; + font-weight: normal; +} + +div.tabs a:hover, div.tabs a.active { + background-color: #DADADA; + border-bottom: 1px solid #B8AE9C; + color: white; +} +.contentbox{ + border-radius: .0em .0em .5em .5em; + -moz-border-radius: .0em .0em .5em .5em; +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} + +.headingbox{ + border-radius:.5em; + -moz-border-radius: .5em .5em 0em 0em; + background-image: linear-gradient(#FAFAFA, #EAEAEA); +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ +} +.headingbox a{ + color: #A50707; + text-decoration:underline; +} + +h4.box { + font-size:0.85em; + padding: 2px; + border-radius: .5em .5em 0em 0em; + -moz-border-radius: .5em .5em 0em 0em; + padding:.2em; +/* border-top:1px solid #F4F0CB; + border-left:1px solid #F4F0CB; + border-right:1px solid #F4F0CB; + border-bottom:1px solid #F4F0CB; +*/ +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} +h2.box { + font-size:1em; + padding: 2px; + border-radius: .5em .5em 0em 0em; + -moz-border-radius: .5em .5em 0em 0em; + padding:.5em; +/* border-top:1px solid #B7C68B; + border-left:1px solid #B7C68B; + border-right:1px solid #B7C68B; + */ + margin-bottom:-.3em; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + background-color: #EAEAEA; + border-bottom:1px solid #EAEAEA; +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} + +div.box { + padding: .5em; + background-color: #FCFCFC; + color: black; + font-size:0.85em; + font-weight: normal; +/* border-left:1px solid #B7C68B; + border-right:1px solid #B7C68B; + border-bottom:1px solid #B7C68B; + border-radius:.0em .0em .5em .5em; */ + -moz-border-radius: .0em .0em .5em .5em; +/* border-left:1px solid #ccc; + border-right:1px solid #ccc; + border-bottom:1px solid #ccc;*/ +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} + +h5.box { + background-color: #6F7172; + border: 1px solid #B8AE9C; + border-style: solid solid none solid; + color: Black; + padding: 0em 1em 0em 1em; + display: inline; + font-size: 1em; + height: 1em; +} + +div.box a:link { + text-decoration: none; +} + +div.box a:visited { + color: #2A6C28; + text-decoration: none; +} + +div.box a:hover { + text-decoration: underline; +} + +.boxDetails { + text-align: right; +} + +div.box .content { + padding: 1em; +/* font-size: 1em;*/ +} + +div.box a.close { + float: right; + text-transform: none; + border-left: 1pt solid #B8AE9C; + padding: 0em 0.2em; +} + +div.box h1, +div.box h2, +div.box h3, +div.box h4 { + margin: 0; + padding: 0; +} + +div.box .even { + background-color: #F7F3ED; + +} + +div.box .odd { + background-color: transparent; +} + + +/* users/index.php */ + +div.course { + position: relative; + width: 25em; + height: 10.5em; + border: rgb(204, 204, 204) 1px solid; + background-color: #F7F7F7; + float: left; + margin: 3px; + padding: 5px; +} + +div.course.break { + clear: left; +} + +div.course h2 { + border: 0px; + font-weight: normal; + font-size: large; + +} + +div.course:hover { + background-color:#FBF4E9; + border: #B8AE9C 1px solid; +} + +div.course img.icon { + float: left; + margin: 2px; + height:6.8em; + width:6.8em; + margin-right:5px; +} +img.headicon { + float: left; + margin-top:.5em; + margin-left:.5em; + margin-right:.5em; + height:6.45em; + width:6.45em; + vertical-align:top; + text-align: right; + border:1px solid white; +} +div.course div.shortcuts a { + text-align: right; + text-decoration:none; + clear: left; + vertical-align: middle; +} + +div#alternatives_shortcuts { + float: right; + border-radius: .5em .5em .5em .5em;; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ + border:1px solid #EAEAEA; + padding-top: .2em; + padding-left: .2em; + padding-right: .2em; + margin-top:1em; +} + +fieldset#shortcuts { + float: right; + background-color: #FEFDEF; + border: 1pt solid #B8AE9C; + margin: -5pt 5pt 5pt 5pt; + padding-right: 10pt; + padding-bottom: 5pt; + padding-left: 10pt; +} + +fieldset { + margin-bottom: 10pt; + border: 1px solid #EAEAEA; + border-radius: .5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em; + padding:.2em +} +legend{ + border: 1px solid #EAEAEA; + border-radius: .2em .2em .2em .2em; + -moz-border-radius: .2em .2em .2em .2em; + padding: .1em; + background-color:#ffffff; + margin-left:1em; +} +div#shortcuts{ + border-left:thin solid #B7C68B; + border-right:thin solid #B7C68B; + border-bottom:thin solid #B7C68B; + border-radius: 0em 0em .5em .5em; + -moz-border-radius: 0em 0em .5em .5em; + float:right; + +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ + margin-right:2em; + padding:.1em; +} +#shortcuts legend { + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; + padding:.2em +} +#shortcuts ul { +float:right; + margin-bottom: 0em; + margin-left: 0em; + list-style-type: none; + padding-left: 0em; +} +#shortcuts li{ + display: inline; +} +#shortcuts li a{ + height:1.3em; +} + +a#guide { + background-image: url('images/help.png'); + background-repeat: no-repeat; + background-position: 4px 4px; + background-size:1.1em 1.1em; + padding: 3px 10px 5px 30px; + text-decoration:none; + font-size:0.85em; + float:right; +} +div#guide_box{ + border-left:thin solid #EAEAEA; + border-right:thin solid #EAEAEA; + border-bottom:thin solid #EAEAEA; + border-radius: 0em 0em .5em .5em; + box-shadow: 1px 0 0 rgba(255, 255, 255, 0.2) inset; + -moz-border-radius: 0em 0em .5em .5em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ + background-color: #F5F9FC; + float:right; + margin-right:2em; + margin-top:-.1em; + padding-left:.1em; + width:auto; +} +div#guide_box:focus{ + background-color:#DADADA; +} +div#content-text { + padding-right: 5pt; + line-height:150%; + margin-top:1em; + float:left; + width:98%; +} +div#content-text p { + margin-top:1em; + +} +div#content-text li { + margin-left: 15pt; +} + +div#content-test { + float: left; + margin-top: 2em; + padding-right: 5pt; + width: 80%; +} +div#content-test ol{ + margin-right: 5pt; +} + +div#content-test ol ul li{ + list-style-type: none; + padding: 0px 2px 0px 15px; + margin-bottom: 1px; + line-height: 200%; + background-color: #fdfdfd; + border-bottom: 1px solid #efefef; + border: 1px solid #eeeeff; +} +div#content-test li{ + list-style-type: none; +} +div#content-forum { + float: left; + margin-top: 2em; + padding-right: 5pt; + width: 80%; +} +div#content-forum ol{ + margin-right: 5pt; +} + +div#content-forum ol ul li{ + list-style-type: none; + padding: 0px 2px 0px 15px; + margin-bottom: 1px; + line-height: 200%; + background-color: #fdfdfd; + border-bottom: 1px solid #efefef; + border: 1px solid #eeeeff; +} +div#content-forum li{ + list-style-type: none; +} + +div#content-info { + margin: 5pt; + font-size: small; + color: #b8ae9c; + clear: both; +} + +div#container { + text-align: left; + margin: 0px auto; + padding: 0px; + border:0; + width: 95%; + border-radius: .5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ + padding:.2em +} + +div#menutoggle{ + text-align: right; + padding-bottom: 10px; + padding-right: 10px; + float: left; + margin-top: 10px; + padding-right: 5px; + font-size:0.95em; + clear:both; +} +div#menutoggle_open{ +margin-left:23em; +} + +/* login page */ +div.column { + float: left; + width: 45%; + margin: 5px; + min-width: 170px; +} + +div.column h3 { + background-color: #F6EAD6; + border-bottom: .05em solid #6F7172; + font-size: small; + display:block; + color:black; + font-weight:600; + padding-left:0.5em; +} + +div.insidecol { + min-height: 170px; + height: 170px; + padding:5px; +} + + +/* index page */ +ul#home-links, ul#home-detail-links { + list-style: none; +} +ul#home-links li { + + display: inline; + float: left; + padding: 0.8em; + text-align: center; + margin: 0.1em; + width: 8.5em; + height: 7.0em; + padding-left:0px; + +} +ul#home-links li a { + text-decoration: none; + border: 1px transparent; + font-weight: bold; +} +ul#home-links li a img { + border: 0px; + display: block; + padding-left:25px; +} + + +/* tree */ +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + margin-left:-.5em; + margin-bottom:-.2em; + padding:0; + height:1.3em; + width:1.4em; +} +/* profile page */ + +dl#public-profile { + width: 100%; + +} +dl#public-profile dt { + float: left; + font-weight: bold; + width: 30%; + border-right: 1px solid #F7F3ED; + padding: 5px 5px 5px 0px; + vertical-align: middle; + margin-right: 5px; +} +dl#public-profile dd { + margin-bottom: 5px; + padding: 5px 0px 5px 5px; +} + +div.social-right{ + width:65%; + float:right; + clear:right; + margin-left:.5em; +} +div.social-left{ + width:29%; + margin-left:.5em; + float:left; +} +div.social-wrapper{ + padding:5em; + border-radius:.5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ +} +div.social-results{ + width:59% +} + +div#social-search{ + float:right; + clear:right; + width:34%; + padding:1em; + min-height:4.5em; +} +div.social-search{ + float:right; + clear:right; + width:34%; + padding:1em; + min-height:4.5em; +} +/* floating layout */ +#contentwrapper{ + float: left; + width: 100%; + overflow:auto; + margin-top:-.1em; + +} +#contentcolumn { + padding-right: 1.5em; + padding-left: 1.5em; + overflow:hidden; +} + +#leftcolumn{ + float: left; + width:21em; + overflow: hidden; + margin: -10px 5px 0; +} + +#footer{ + font-size:.8em; + border-top: 1px solid #E5E5E5; + width: 100%; + text-align: center; + padding: 0 0 .5em 0; + height:4.5em; + background-color:#F3F3F3; + +} + +/** forum stuff **/ +.forum-thread li { border-bottom: 1px solid #F7F3ED; float:left; width: 97%; list-style: none; } +.forum-thread li.even { background-color: #F5F9FC; border-top: none;} +.forum-thread li.odd { background-color: #fff; } +div.forum-post-author { float:left; width:150px; padding:8px 10px;border:none; } +div.forum-post-author a.title {font-size: 1.1em; line-height: 1.2em; font-weight: bold; text-decoration:none; } +div.forum-post-author img.profile-picture { border: 2px solid #F7F3ED; text-align:right;} +div.forum-post-content { margin-left: 150px; padding: 5px 0px 18px 18px;} +div.forum-post-content h3 { font-weight: 500; margin-top:-.5em; clear:right;} +div.forum-post-ctrl { float: right; padding: 2px; margin-top:-2em;margin-right:.2em;font-size:small;} +div.forum-post-ctrl a { text-decoration: none; } +div.forum-post-ctrl img{ height:1.2em; width:1.2em;} +div.forum_reply {display:none;} +div.forum_edit {display:none;} +div.forum-post-ctrl span { color: black; background-color: #fefdc2; padding: 3px; } +div.forum-post-content p.date { color: #a1a1a1; border-bottom: 1px solid #F7F3ED;font-size:small; margin-top:-1em;} +div.forum-post-content div.body p { margin-bottom:1em; } +div.forum-paginator{ padding:.3em; width:95%;margin:auto;} +span.forum-paginator-active{font-weight:700;text-decoration:underline; height:2em;} + + + +/** inbox stuff - reuses some of the forum layout **/ +#inbox-msg li {border:1px solid #eee; border-bottom: 1px solid #F7F3ED; width: 95%; list-style: none; min-height: 11em;} + + +/* Top navigation tabs / list */ +/*div#topnavlistcontainer { + height:1.8em; + margin-top:-1.8em; + padding-top:1em; + margin-left:1em; + clear:both; + float:left; + overflow-y:scroll; +} +*/ +div#topnavlistcontainer { + height:1.5em; + width:100%; + margin-top:-1.8em; + padding-top:1.8em; + margin-bottom:-.5em; + padding-bottom:.5em; + float:left; + margin-right: -14px !important; + overflow-x:auto; + overflow-y: hidden; + +} +ul#topnavlist { + padding: 0; + padding-bottom: 1em; + margin-right: auto; + margin-left: auto; + margin-bottom: -2px; + margin-top: -.6em; + height:1.8em; + white-space:nowrap; + + } + +ul#topnavlist li { + + list-style: none; + display: inline-block; + height:1.7em; + border-top: 1px solid transparent; + border-left:1px solid transparent; + border-right:1px solid transparent; + border-bottom: 3px solid #eeeeee; + border-radius: .5em .5em 0em 0em; + -moz-border-radius: .5em .5em 0em 0em; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + + +} + + +ul#topnavlist li a:hover, +ul#topnavlist li a:focus, +ul#topnavlist li a.active { + /*background-color: #B7C68B; */ + color: #685642; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + text-decoration:none; + border-radius: .5em .5em 0em 0em; + -moz-border-radius: .5em .5em 0em 0em; + border-top: 1px solid #f3f3f3; + border-left:1px solid #f3f3f3; + border-right:1px solid #f3f3f3; + + +} +ul#topnavlist li a.active, +ul#topnavlist li:hover, +ul#topnavlist li a:focus{ + border-bottom: 3px solid #D26911; + font-weight:bold; +} +ul#topnavlist li a { + /* The normal, unselected tabs. They are all links */ + color: #555; + font-weight:bold; + border-bottom: 3px solid #transparent; + border-top: 1px solid transparent; + border-left:1px solid transparent; + border-right:1px solid transparent; + text-decoration:none; + background-color:white; + border-radius: .5em .5em 0em 0em; + -moz-border-radius: .5em .5em 0em 0em; + padding: .5em 1.8em .5em 1.8em; + margin-bottom:0em; + +} + + +ul#topnavlist li a.selected { + /* The selected tab. There's only one of these */ + color: #555; + font-weight: normal; + border-radius:.3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; + padding: 1em 1.8em 1.1em 1.8em; + margin-bottom:0em; +} + +ol#tools { + margin-right:1.5em; + margin-left:-.5em; + padding:0; +} +ol#tools>li:hover { + border: 1px solid #E5E5E5; + background-color: #F3F3F3; +} + + + +/* tool list on admin home and manage screens */ +/* + li.top-tool { + text-align: top; + list-style: none; + padding: 2px 2px 2px 5px; + margin-bottom: 5px; + width:20%; + min-width:12em; + height:15em; + margin-right:1em; + line-height: 200%; + background-color: #F5F9FC; + border-bottom: 1px solid #efefef; + border: 1px solid #F4F0CB; + display:inline-block; +} +*/ + li.top-tool { + padding:.3em; + display:inline-block; + background-color: #F5F9FC; + border: 1px solid #EAEAEA; + vertical-align:top; + line-height: 200%; + list-style-type:none; + margin-top: .2em; + min-height:7.5em; + width:48%; + margin-left:.1em; + + } +li.top-tool img{ + float:left; + clear:left; + margin-right:1em; + margin-bottom:2em; +} +li.top-tool a { + font-weight: bold; + width:12em; + height:2em; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 1px solid #EAEAEA; +} + +li.child-tool a { + font-weight: normal; + text-decoration:underline; +} + +ul.child-top-tool { + margin-top: -5px; + padding-left: 0px; + margin-left: 0px; +} +ul.child-top-tool:before { +/* content: " : ";*/ +} + +li.child-tool { + list-style: none; + margin-right: 5px; + display:inline; +/* font-size: 80%;*/ +} + +/* to modify tool icons on the course home page */ +/* +#icon-color-filter{ + width:3.9em; + height:3.85em; + background-color:#000000; + -moz-opacity:0.5; + filter:alpha(opacity=10); + opacity:.10; + margin-top:-3.85em; + margin-left:1.90em; + +} +*/ +.img-size-home { + height:3.85em; + width:3.9em; +} + +/* browse courses */ +div.browse-course { + width: 28em; + padding-bottom: 10px; + background-color: #fffaf0; + border:1px #6F7172 solid; +/* font-size:9pt;*/ + min-height:18em; + margin:auto; + margin-left:1em; + margin-top:1em; +} + +dl.browse-course { + width: 90%; + padding-bottom: 10px; + background-color: #fffaf0; + margin:auto; + margin-left:1em; +} +dl.browse-course dt { + float: left; + font-weight: bold; + width: 25%; + text-align: right; + clear: left; + padding: 5px 10px 5px 0px; + vertical-align: middle; +} +dl.browse-course dd { + margin-bottom: 5px; + clear: right; + padding: 5px 0px 5px 10px; + margin-left: 26%; + +} +/* form fields grouping for WCAG 2.0 conformance*/ +fieldset.group_form{ + width:90%; + margin:.5em; + /* border:1px #685642 solid;*/ + min-height: 170px; + padding:.5em; + background-color:#ffffff; + border:1px solid #EAEAEA; + + +} +fieldset.group_form.collapsed{ + border:none; + background-color:inherit; +} +legend.group_form{ + /* border:1px #6D7B8D solid; */ + background-color: #F5F9FC; + font-size:1.2em; + font-weight: 600; + color: black; + padding-left: 1em; + padding-right: 1em; +/* border-radius:.2em; + -moz-border-radius: .2em .2em .2em .2em; */ +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} +/* file storage */ + +#fsfloat1{ + float:right; +} +#fsfloat2{ + float:right; + width:48%; +} + + +/* highlight active links for WCAG 2.0 conformance */ +a:active,a:hover,a:focus{ + background-color:#DADADA; + color:#000000; +} + + +/* menu align right layout, uncomment to enable */ + +/* +h2.page-title { + clear:left +} +h2, h3, h4, h5, h6 { + clear: left; +} +#contentcolumn_shiftright { + margin-right: 17em; +margin-left:1em; +margin-top:1em; +} +#leftcolumn{ + float: right; +} +#home-links{ +clear:left; +} +table.data { + clear:left; +} +div#menutoggle{ + float: right; +} +#fsfloat2{ + float:left; + width:48%; +} + +#fsfloat1{ + float:left; +} +*/ + + + +/* format of "table of contents" on content page */ +div#toc{ + width:95%; + float:left; + clear:both; +} + +#toc a { display:block; margin:3px; } +#toc .h2 { padding:0 0 0 10px;} +#toc .h3 { padding:0 0 0 30px;} +#toc .h4 { padding:0 0 0 40px; } +#toc .h5 { padding:0 0 0 50px; } +#toc .h6 { padding:0 0 0 60px; } + +fieldset#toc { + background-color: #FEFDEF; + border: 1pt solid #B8AE9C; + width:50%; +} + +#side-menu{ + overflow:hidden; + width:20.5em; + padding-bottom:.3em; + /* margin-top:-1em; */ + padding-right:.5em; + margin-bottom:1em; +} + +/* cleans up glossary question mark line spacing*/ +sup{ + border: 1pt solid #B8AE9C; + vertical-align:bottom; + margin-top: 1em; +} + +/* jQuery tooltip styles */ +#tooltip{ + position:absolute; + z-index:2000; + border:3px solid #111; + background-color:#EAEAEA; + padding:5px; +} +#tooltip h3,#tooltip div{ + margin:0; +} +a.tooltip{ + color:blue; +/* font-size:100%;*/ + padding-left:.2em; + padding-right:.2em; + padding-bottom:.2em; + text-decoration:none; + border-bottom:1px dashed; + +} +/* style for home page modules "detail view" */ + +div.home_box { + width: 25em; + height: 10em; + margin-top: 1em; + padding: 3px; + padding-bottom: .4em; + float: left; +} + +.outside_box{ + border:1px solid #B7C68B; + background: #F5F9FC; + padding:.2em; + margin-left:.4em; + width:24.5em; + height:9.8em; + -moz-border-radius:.3em .3em .3em .3em; + border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.1em .1em .2em #999999; + box-shadow: .1em .1em .2em #999999;*/ + padding:.2em; + +} + +.inside_box{ + border:1px solid #EAEAEA; + background: #ffffff; + padding:.3em; + width:95%; + margin:auto; + height:50%; + margin-bottom:.2em; + font-size:80%; + border-radius:.5em; + -moz-border-radius:.5em; + padding:.2em; +} + +.home-title{ + font-size:90%; + font-weight:bold; +} +.buttonbox{ + float:right; +} +.details_text{ + margin-left:1em; + +} +.draggable_selected { + background-color: lightgray; + cursor: move; +} +div#subnavlistcontainer { + width:100%; + margin:auto; + height:auto; + padding-left:1.5em; +} + +.show_hide { + display:none !important; +} +.hide_show { + display:inline !important; +} +div#subnavbacktopage { + /* padding-top:5px; */ + float:left; + clear:left; +} + +div.toolcontainer{ + width:100%; + margin:auto; + /*border:1px solid #EAEAEA; */ + padding-top:1em; + padding-bottom:1em; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; +} + +ul#subnavlist_i { + font-family: Verdana,Helvetica,Arial,serif; + float:right; + clear:both; + margin-right:2em; + /* background-image:url("images/wand.png");*/ + background-position: 1em .3em; + background-repeat:no-repeat; + margin-top: -2em; + /* padding-top:2em; */ +} +ul#subnavlist_i { + font-family: Verdana,Helvetica,Arial,serif; + float:right; + clear:right; + margin-right:2em; + /* background-image:url("images/wand.png");*/ + background-position: 1em .3em; + background-repeat:no-repeat; +} +ul#subnavlist, ul#navlist { + margin-top: 0px; + font-family: Verdana,Helvetica,Arial,serif; + /* margin-bottom: 1px;*/ +} +ul#subnavlist_i li { + list-style: none; + display: inline-block; + color: black; + text-decoration: none; + background-color: #F3F3F3; + border-top: 1px solid white; + border-left: 1px solid white; + border-right: 1px solid white; + border-bottom: 3px solid #D26911; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + padding: .2em .0em .2em .0em; + border-bottom: 3px solid blue; +} +ul#subnavlist li, +ul#subsubnavlist li, +ul#navlist li{ + list-style: none; + display: inline-block; + text-align:center; + background-color:#ffffff; + /*border-bottom: 3px solid #f3f3f3;*/ + cursor:pointer; +} + +ul#subnavlist li:hover, +ul#subsubnavlist li a:hover, +ul#subnavlist li a:hover, +ul#subnavlist_i li a:hover, +ul#navlist li a:hover, +ul#navlist li:hover{ + color: black; + text-decoration: none; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 3px solid #D26911; +} +ul#navlist li:focus, +ul#navlist li a:focus, +ul#subnavlist_i li a:focus, +ul#subnavlist li a:focus, +ul#subsubnavlist li a:focus{ + color: black; + text-decoration: none; + background-color: #F3F3F3; + border-bottom: 3px solid #D26911; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + +} +ul#subsubnavlist li.active, +ul#subnavlist li.active, +ul#subnavlist_i li.active, +ul#navlist li.active { + color: black; + text-decoration:none; + background-color: #F3F3F3; + border-top: 1px solid white; + border-left:1px solid white; + border-right:1px solid white; + border-bottom: 3px solid #D26911; + border-radius: .3em .3em 0em 0em; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + padding: .2em .5em .2em .5em; + font-weight:bold; +} + +ul#subnavlist li a, +ul#subsubnavlist li a, +ul#subnavlist_i li a, +ul#navlist_i li a { + /* The normal, unselected tabs. They are all links */ + color: #555; + padding: .2em .3em .2em .2em; + border-radius: .3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; + text-decoration:none; + font-weight:500; + margin-bottom:-.2em; +} +ul#subnavlist li a{ +margin-bottom:-.3em; + +border-top: 1px solid #f3f3f3; +border-left: 1px solid #f3f3f3; +border-right: 1px solid #f3f3f3; +border-bottom: 3px solid #f3f3f3; +} +ul#subnavlist span#hidesubnav{ + background-image: url('images/mswitch_minus.gif'); + background-position: right center; + background-repeat: no-repeat; + width:2em; + cursor:pointer; + display:none; +} +ul#subnavlist span#showsubnav{ + background-image: url('images/mswitch_plus.gif'); + background-position: right center; + background-repeat: no-repeat; + width:2em; + cursor:pointer; + display:none; +} +.tablist { + list-style: outside none none; + margin: 0; + padding: 0; +} +.tablist li { + border-top: 1px solid #f3f3f3; + border-left: 1px solid #f3f3f3; + border-right: 1px solid #f3f3f3; + border-bottom: 3px solid #f3f3f3; +} +.tab { + background: #dddddd none repeat scroll 0 0; + border-top-left-radius: 0.2em; + border-top-right-radius: 0.2em; + border-bottom: 3px solid #D26911; + border: none; + text-decoration:none; + display: inline; + float: left; + height: 1em; + margin: 0.1em 1px 0 0; + padding: .2em 0em .4em 0em; + cursor:pointer; + margin-left:.2em; +} + +#gamify > ul#subnavlist>li { + border-bottom: 3px solid #eeeeee; +} +#gamify > ul#subnavlist>li:hover { + border-bottom: 3px solid #D26911; +} +#gamify > ul#subnavlist>li:focus { + border-bottom: 3px solid #D26911; +} +#gameme_points{ + width:80%; + font-size:2em; + text-align:center; + margin-top:.5em; + margin-left:auto; + margin-right:auto; + border: 1px solid green; + box-shadow: .1em .1em .1em;#666666; + background-color: #e9fbe9; + border-radius:.3em; + padding:.2em; +} + .tabactive { + color: black; + text-decoration:none; + background-color: #F3F3F3; + border-top: 1px solid white; + border-left:1px solid white; + border-right:1px solid white; + border-bottom: 3px solid #D26911 !important; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + font-weight:bold; +} +div.menuedit{ + float:right; + margin-top:-1.8em; + padding: .2em .2em 0em .2em; + border-bottom:1px solid #EAEAEA; + border-left:1px solid #EAEAEA; + border-right:1px solid #EAEAEA; + box-shadow: 1px 1px 2px #888888; +} +/* NEW IN ATUTOR 2.0 */ +/* alternate colours in the My Course list */ +tr.even { + background-color: #F3F3F3; +} + +tr.odd { + + background-color: transparent; +} + +/* Content editor wrapper div */ + +.editor_wrapper{ +/* border:1px solid #685642; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; + padding: .5em .5em .1em .5em ; + */ +} +/* Content editor tabs */ +input[type=submit].editor_buttontab { + color:#685642; +/* font-size:10pt;*/ + border: thin solid transparent; + white-space: nowrap; + margin: 0px; + font-weight:500; + text-align:center; + -moz-box-shadow:0; + box-shadow: none; + text-align: center; + white-space: nowrap; + padding: 0em .3em 0em .2em; + height: 1.4em; +} + +input[type=submit].editor_buttontab:focus { + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 3px solid #D26911; + color: #000000; + text-decoration: none; + margin:0; + background-color: #EAEAEA; + text-align: center; + white-space: nowrap; + text-decoration: none; + padding: .2em .6em 1.7em .5em + border-radius: .3em 0em 0em 0em !important; + -moz-border-radius: .3em .3em 0em 0em; + height:2.2em; + margin-bottom:-.4em; +} +input[type=submit].editor_buttontab:hover { + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + color: #000000; + text-decoration: none; + padding: .2em .5em .2em .5em + background-color: #EAEAEA; + text-align: center; + white-space: nowrap; + text-decoration: none; + border-radius: .3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; + height:2.2em; + margin:0; +} +.editor_tab{ + margin-bottom:-.5em; + margin-top:1.5em; + text-align: center; + white-space: nowrap; + background-color: #ffffff; + border-top: 1px solid #f3f3f3; + border-left: 1px solid #f3f3f3; + border-right: 1px solid #f3f3f3; + border-bottom: 3px solid #f3f3f3; + height:1.4em; +} +.editor_tab:hover, .editor_tab:focus { + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 3px solid #D26911; + border-radius:.3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; +} +.editor_tab input[type="submit"] { + background-color:transparent; +} +.editor_tab_selected{ + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 3px solid #D26911; + color: #000000; + text-decoration: none; + padding: 0.4em 0.5em 0.2em; + background-color: #EAEAEA; + font-weight:bold; + text-align:center; + white-space: nowrap; + text-decoration:none; + border-radius:.3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; + height:1.4em; +} +.editor_tab input[type=submit]{ + height:2.2em; + padding: .2em .5em .2em .5em +} +/* 1pxgs current box on My Start */ +.current_box{ + float:left; + margin-left:1.5em; + margin-bottom:1em; + width:30%; + padding-left:.2em; + border-bottom: 1px solid #E5E5E5; +/* border: 1px solid #EAEAEA; + border-radius: .5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em;*/ +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .2em #999999;*/ +} +.current_head{ + padding-left:.3em; + margin-top:-1.3em; + font-size:.8em; + background-color:#F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); +} +.current_head h3{ + +} +ul.current_list{ + line-height:2em; + list-style-type:none; + +} +.current_list img{ + vertical-align:middle; +} + +.logoutbar{ + /* background-color: #B7C68B; */ + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + font-size:0.85em; + border-bottom:1px solid #EAEAEA; + height:2.5em; + text-align:right; + padding-right:1em; + padding-top:.9em; + clear:both; +} + +.select { + margin-left: .2em; + background-color:#EAEAEA; + border: 1px solid #EAEAEA; + padding-right:.1em; +} + +/* Preference Editor tabs */ +/* Preferences tabs */ + +table.etabbed-table { + padding-left:5em; + margin-top:1em; + +/* font-size:10pt;*/ +} +/* Preference Editor tabs */ +.etabbed-list-container { +/* font-size:10pt;*/ + width:90%; + + +} +.etabbed-list{ + margin-bottom:-.2em; + height:1.8em; + width:80%; + +} +.prefs-tab-spacer { + background-color: transparent; + width: 1em; +} + +.prefs_buttontab { + background:0; + border-left:0; + border-right:0; + border-bottom:0; + border-top:0; +} +.prefs_buttontab input[type="submit"]:active, .prefs_buttontab:hover, .prefs_buttontab input[type="submit"]:focus{ + border-bottom: 1px solid #E5E5E5; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + +} + +.prefs_tab{ + border-bottom: 0; + text-align: center; + font-weight:700; + white-space: nowrap; + padding: .2em .2em .15em .3em; + border-radius: 0.3em 0.3em 0 0; + display: inline; + margin-left:.5em; + font-weight:bold; + text-decoration:none; +} +.prefs_tab:active, .prefs_tab:hover,.prefs_tab:focus{ + border-bottom: 1px solid #E5E5E5; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-bottom: 3px solid #D26911; + font-weight:700; +} + +.prefs_tab_selected{ + +/* border-top: 1px solid #685642; + border-left: 1px solid #685642; + border-right: 1px solid #685642; + */ + border-radius: 0.3em 0.3em 0 0; + border-bottom: 3px solid #D26911; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + text-align:center; + white-space: nowrap; + background-color: #EAEAEA; + padding: .5em .5em .3em .5em; + display: inline; + margin-left:.5em; + font-weight:bold; + text-decoration:none; + +} + +a.pref_wiz_launcher{ + cursor:pointer; +} + +.wizscreen{ + background-color:#ffffff; + padding:2em; + line-height:2em; +} + +.wizscreen > legend{ + padding-left:2em; + padding-right:2em; + border:1px solid black; + background-color:#ffffff; + color:#0000FF; + font-weight:bold; +} + +.wizscreen .buttons { + padding-top: 2em; +} + +.wizscreen .button { + margin: 0em 0.25em; +} + +.navlist{ + list-style: none; + display: inline; +} +.crumbcontainer{ + padding:0; + width:100%; + height:1em; + clear:both; +/* font-size: 0.85em;*/ + padding:.1em; + float:left; + +} +#course_title_container{ + float:left; + clear:both; + left:1em; + +} +#my_courses_container{ + width:58%; + min-width:20em; + margin-left:1em; + border:none; + float:left; + border-radius: .5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} +.shortcut_icon{ + border:0; + vertical-align:middle; + height:1.15em; + width:1.15em; +} +ul#content-tool-links { + list-style: none outside none; +} +ul#content-tool-links li{ + display: inline; + float: left; + width: 5em; + padding: 0 3em 0 0; + text-align: center; + font-size: 0.7em; + font-weight:bold; + color: #1A4A72; + line-height:120%; +} +ul#content-tool-links img{ + border: 0 none; + display: block; + padding-left: 10px; +} +.hidden { + display: none; +} +.show{ + display: inline-block; +} +.clickable { + cursor: pointer; +} +.nowrap { + white-space: nowrap; +} +.flowplayerholder{ + clear:right; +} + + +/* Transformable repository search */ + +.browse-result{ + border:thin solid #EAEAEA; + padding:.5em; + width:95%; + margin-left:auto; + margin-right:auto; + border-radius: .3em .3em .3em .3em; + -moz-border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} + +.tr_results_tools{ + float:right; + padding-left:.2em; + padding-right:.2em; + padding-top:.2em; + border:thin solid #EAEAEA; + border-radius: .3em .3em .3em .3em; + -moz-border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.1em .1em .1em #999999; + box-shadow: .1em .1em .1em #999999;*/ +} + +div.pageinator_box{ + width:95%; + margin-left:auto; + margin-right:auto; + margin-bottom: -.5em; + border-top:thin solid #EAEAEA; + border-left:thin solid #EAEAEA; + border-right:thin solid #EAEAEA; + border-radius: .3em .3em 0em 0em; + -moz-border-radius: .3em .3em 0em 0em; +} + +#previewText{ + font-family: monospace; + border: 2px solid rgb(0, 0, 0); + padding:1em; + color: rgb(255, 255, 255); + background-color: rgb(0, 0, 0); +} +#previewArea{ + padding: 0em; + border-bottom-width: 0px; + margin-left: auto; + margin-right: auto; + font-weight: normal; + float:left; + clear:right; + line-height:1.5; + +} +#display-settings-preview{ + width:60%; + float:left; +} +#feedback{ + width: 90%; +} +#defaultfontsize-wrapper{ + width:25%; + float:left; +} + +/* ATutor Social Styles */ + +div .profile_container { + background-color:#eee; + border: 1px solid #8e8e8e; + width:80%; + padding:0.5em; + margin-bottom: 0.5em; +} + +div .profile_container .top_right { + float: right; +} + +dl.public-profile dd{ + margin-left:0px; +} +dl.public-profile dt { + float: left; + font-weight: bold; + min-width:12em; +} + +/* Search form */ +div .search_form { + margin-bottom: 1em; +} + +div .search_form .row{ +/* background-color: #DEDEC0;*/ + background-color: #ffffff; + padding: 8px; +} +div .button { + color:#000000; + background-color: #EAEAEA; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border: 1px solid #DADADA; + box-shadow: 1px 0 0 rgba(255, 255, 255, 0.2) inset; +} +div .button:hover, div .button:hover{ + background-color: #DADADA; + background-image: linear-gradient(#EAEAEA, #FAFAFA); + color: #685642; + + + +} + +/* Side menu */ + + +ul.social_side_menu { + padding-left: 2em; +} +ul.social_side_menu li { + padding-bottom: 0.2em; + list-style: circle; +} + +div .divider { + border-bottom:1px solid #C1C157; + padding-bottom:0.5em; + margin-bottom:0.5em; +} + +.activity{ + line-height:18pt; + font-size:.8em; +} + +div.headingbox, h3.headingbox, a.headingbox{ + + padding:.2em; + background-color: #EAEAEA; + text-decoration:none; + line-height:1em; + font-size:.7em; +} + +div.contentbox, input-form{ + margin-left:.2em; + margin-right:.2em; + border-left:1px #EAEAEA solid; + border-right:1px #dddddd solid; + border-bottom:1px #EAEAEA solid; + padding:.5em; + background-color: #ffffff; + overflow:hidden; +} + +div.suggestions{ + border:1px solid #a50707; + margin-left:10px; + width:50%; +} +li.inlinelist{ + display: inline; + padding-right: 1em; +} +ul.social_inline_menu{ + background-color: #EAEAEA; + border:thin #EAEAEA solid; + padding:.5em; + width:90%; + margin:auto; +} +div.social-wrapper{ + + width:95%; + padding:.5em; + margin:auto; +} + +.network-activity{ + float:left; + width:60%; +} +.my-contacts{ + float:right; + width:38%; + min-width:38%; +} +.my-network-groups{ + float:right; + clear:right; + width:38%; + max-width:38%; +} +.people-you-may-know{ + padding-top:1em; + float:right; + clear:right; + width:38%; + min-width:38%; + } +.contentbox-a{ + width: 100%; +} +.contentbox-b{ + padding-bottom:0.2em; +} +.logo{ +width:19%; +margin-left:0em; +float:left; + +} +.content-settings{ + width: 30%; + float: left; +} +.current-content{ + color:#685642; +} +.del-content-icon{ +margin-left:.5em; +border:0; +height:.9em; +width:.9em; +/*font-size:100%;*/ +} +div.bypass{ +height:1px; +float:left; +} +div.bypass a{ + font-size:0px; +} +div.bypass a:focus{ + font-size:.8em; +} +div#bypass-links{ + width:3px; +} +/* relative image size styles */ + +input.img1616{ +cursor:pointer; +border:0; +} + +input.img1616, img.img1616{ +height:1.6em; +width:1.6em; +border:0; +} +input.img2222, img.img2222{ +height:2.2em; +width:2.2em; +border:0; +} +img.img1111{ +height:.8em; +width:.8em; +} +img.imggoback{ +height:1.9em; +width:1.9em; +margin-right:1em; +} +input[type=image].fl-force-right{ +/*height:.9em; +width:.9em; +font-size:100%; */ +} + +.fl-force-right{ +float:right; + +} +img.fl-col{ +height:3.5em; +width:3.5em; +/*font-size:100%;*/ +} + +/* Chat styles */ +#chat_launch{ + border:1px solid #EAEAEA; + width:10em; + text-align:center; + padding:1em; + border-radius: 1em; + background-color:#cccccc; + background-image:linear-gradient(#FAFAFA, #EAEAEA); + margin-left:auto; + margin-right:auto; + margin-top:1em; + box-shadow:2px 2px #cccccc; +} +#chat_launch:hover, #chat_launch:focus{ + background-image:linear-gradient(#EAEAEA, #FAFAFA); + box-shadow:0 2px 2px #cccccc; +} +#chat_launch a{ + text-decoration:none; + +} +#chat_launch a:hover{ + text-decoration:underline; + background-image:linear-gradient(#EAEAEA, #FAFAFA); + color:#555555; +} + +/* Photo Album Styles + * + * + * + * + */ +div.topbar{ + float:left; + width: 95%; + height:auto; +} +div.paginator{ + float: right; + margin: 0px; +} +.paginator ul li{ + list-style: none; +} +.paginator li{ + padding-right: 0.5em; + float: left; +} + +div.summary{ + float: left; + margin-top: 0.5em; + width:70%; +} + +div.album_panel{ + float: left; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + width: 95.5%; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.2em .2em .1em #999999; + box-shadow: .2em .2em .1em #999999;*/ + padding:.3em; +} +div.album_panel div.photo_wrapper { + /* This class is to fix the problem where the images shift + * to the right when there is a border upon selection + */ + height: 150px; + float: left; +} +div.album_panel .photo_frame{ + float: left; + margin: 0.2em; + min-height: 140px; + min-width: 140px; + text-align: center; +} +div.album_panel .photo_frame a:focus, div.album_panel .photo_frame a:hover{ + cursor: pointer; + float:left; + min-width: 140px; + min-height: 140px; + background: #FCE6C9; +} +div.album_panel .photo_frame img{ + background: #FFFFFF; + border: 1px solid #D2D2D2; + padding: 0.2em; +} +div.album_panel .album_description{ + margin: 0.5em; + width: 95%; + float: left; +} + +div.search_bar { + /* background-image: url('images/search_bg.png'); + background-repeat: no-repeat; */ + background-color:#ffffff; + border:thin solid #EAEAEA; + margin-left: 0.5em; + margin-top: 0.5em; + height: 27px; + width: 180px; + float: left; + border-radius:.5em; + -moz-border-radius:.8em .8em .8em .8em; +/* -moz-box-shadow:.2em .2em .1em #999999; + box-shadow: .2em .2em .1em #999999;*/ +} +div.search_bar .s{ + float: left; + border: 0px; + margin-top: 0.3em; + margin-left: 0.5em; + width: 148px; +} +div.search_bar .s_img{ + float: right; + border: 0px; + margin-top: 0.375em; + margin-right: 0.4em; +} + +div.album { + background: #FFFFFF; + padding:1em; + border: 1px solid #EAEAEA; + width: 95%; + margin: 0.5em; + float: left; + border-radius:.5em .5em .5em .5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.2em .2em .1em #999999; + box-shadow: .2em .2em .1em #999999;*/ +} +div.album .image{ + float: left; + margin: 0.5em; + min-width: 140px; +} +div.album img{ + border-width: 0px; +} +div.album .image img.no-image { + float: left; + width: 130px; + height: 97px; + background-color: #EFEFEF; +} +div.album .info{ + float: left; + width: 70%; +} +div.album .info span{ + float: left; + color: #666666; +} +div.album .info p{ + font-size: 0.85em; + margin: 0; +} +div.album .search_photo_frame{ + float: left; + margin: 0.2em; + min-height: 160px; + max-height: 160px; + max-width: 140px; + text-align: center; + border: 1px solid #d3d3d3; + overflow: hidden; +} +div.album .search_slider{ + float: left; + overflow: hidden; + position: relative; /* ie7 */ +} +div.album .search_slider_left{ + float: left; + width: 10%; +} +div.album .search_slider_right{ + float: right; + text-align: right; + width: 10%; +} +div.album .search_slider ul { + list-style-type: none; + margin: 0; + padding: 0; + width: 99999px; + position: relative; +} +div.album .search_slider ul li{ + float: left; +} +div.album .search_slider_a{ + width: 80%; +} +div.album .search_slider_p{ + width: 730px; /* 146 per frame, 5 frame per row */ +} +div.album .search_slider_p ul li{ +/* height: 576px; /* 144 per frame, 4 row */ + width: 730px; /* 146 per frame, 5 frame per row */ +} +div.album .search_paginator { + width: 100%; +} + +div.add_photo{ + float: left; + clear:left; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + width: 96%; + border-radius:.5em; + -moz-border-radius: .3em .3em .3em .3em; + margin-bottom:.2em; +} +div.add_photo ul{ + margin: 0px; + padding: 0px; +} +div.add_photo .toggle_uploader{ + width: 95%; + margin: 0.5em; +} +div.add_photo div#ajax_uploader{ + display: none; + margin-top: 0.5em; +} +div.add_photo .files .tn { + max-height: 30px; +} +div.add_photo img{ + border: 0; +} +div.add_photo ul li{ + float: left; + padding: 0.2em; + list-style: none; + width: 100%; + height: 100%; + border-bottom: 1px solid #ddd; +/* display: inline; */ +} +div.add_photo p.memory_usage { + float: right; + font-size: 0.9em; + color: #5B5B5B; +} + +div.add_profile_photo{ + float: left; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + width: 96.5%; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; +/* -moz-box-shadow:.2em .2em .1em #999999; + box-shadow: .2em .2em .1em #999999;*/ + margin-bottom:.2em; + +} +div.add_profile_photo .profile_photo{ + float: left; + padding: 0.5em; + +} +div.add_profile_photo .uploader{ + float: left; + width: 50%; + padding: 0.5em; + border-bottom: 1px solid #ddd; +} + +div.photo_panel{ + float: left; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + text-align: center; + width: 95%; + padding: 0.5em; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; +} +div.photo_panel img{ + background: #FFFFFF; + border: 1px solid #D2D2D2; + padding: 0.2em; +} +div.photo_panel div.ordering{ + float:left; +} +div.photo_panel div.paginator{ + float:right; +} +div.photo_panel .flc-inlineEditable{ + width: 604px; + margin: 0 auto; + padding-top: 0.5em; + padding-bottom: 0.5em; +} +div.comment_panel{ +float:left; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + width: 95%; + padding:.5em; + border-radius: .3em .3em .3em .3em; + -moz-border-radius: .3em .3em .3em .3em; +/* -moz-box-shadow:.2em .2em .1em #999999; + box-shadow: .2em .2em .1em #999999;*/ + margin-top:.2em; +} +div.comment_panel .comment_feeds{ + float: left; + width: 50%; +} +div.comment_panel .photo_actions{ + margin: 0.5em; + max-width: 49%; + background-color: #f5f9fc; + border: 1px solid #EAEAEA; + float:right; + padding:1em; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; +} +.row textarea#comment_template, textarea#comment_template active{ + border:thin solid #EAEAEA; + border:thin solid #EAEAEA; + padding:.2em; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; +} +.row textarea#comment{ + background-color:#ffffff; + border:thin solid #EAEAEA; + border:thin solid #EAEAEA; + padding:.2em; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; +} +div.comment_panel textarea{ + width:100%; +} + +div.comment_box{ + float:left; + width:100%; + margin: 0.5em; + padding-top: 0.5em; + padding-bottom: 0.5em; + background: #EAEAEA; +} +div.comment_box .comment_actions{ + float: left; + margin-top: 1em; + font-size: 0.8em; + color: #666666; +} + +div.edit_photo_frame{ + width: 95%; + float: left; + padding: 0.2em; + background: #F7F7F7; + border:thin solid #EAEAEA; + border-radius:.5em; + -moz-border-radius: .5em .5em .5em .5em; +} +div.edit_photo_box{ + float: left; + border: 1px solid #D2D2D2; + background: white; + margin: 0.2em; + margin-bottom: 0.8em; + padding: 0.8em; + width: 97%; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; +} +div.edit_photo_box .info{ + float: left; + width: 60%; +} + +.info textarea{ + border:thin solid #EAEAEA; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; + margin-top:.2em; +} +div.edit_photo_box .info textarea.alt_text{ + height: 2.5em; +} +div.edit_photo_box .info textarea{ + width: 100%; +} +div.edit_photo_box .action{ + float: right; + background: #F7F7F7; + min-width: 140px; + padding:.2em; + border:thin solid #EAEAEA; + border-radius:.3em; + -moz-border-radius: .3em .3em .3em .3em; +} + + +/* FLUID Image Reorderer */ +.fl-imageReorderer-item { +} +.fl-reorderer-movable-hover a{ + cursor: pointer; + background-color: #ECEECC; +} +.fl-reorderer-movable-dragging a{ + background-color: #ECEECC; +} +.fl-reorderer-dropMarker { + border: 2px solid red; + min-height: 100px; + float: left; +} +.fl-reorderer-avatar { + opacity: 0.6; +} + +/* FLUID Simple Inline Editor */ +.fl-inlineEdit-invitation { + background-color: #FFECB3 !important; + border: 1px solid #CCC !important; +} +.fl-inlineEdit-focus { + border: 2px solid #777777; +} + + +.pa_tool_link{ + +text-decoration:none; +} + +.pa_tool_image{ +vertical-align:middle; +margin-right:.5em; +} +/*social networking box on admin page */ +#social_networking{ +padding: .2em; + +} + +/* End Photo Album Styles + * + * + * + * + */ + +/* Test template styles */ + +ul.likert-question{ + padding: 0px; + margin: 0px; + list-style-type: none; +} +li.likert-question{ + padding: 4px; + display: inline; +} +table.matching-question{ + width:100% +} +ul.matching-question{ + padding: 0px; + margin: 0px; + list-style-type: none; +} +li.matching-question{ + padding: 4px; +} +ul.multianswer-question{ + padding: 0px; + margin: 0px; + list-style-type: none; +} +li.multianswer-question{ + padding: 4px; +} +ul.multichoice-question{ + padding: 0px; + margin: 0px; + list-style-type: none; +} +li.multichoice-question{ + padding: 4px; +} +ul.ordering-question{ + padding: 0px; + margin: 0px; + list-style-type: none; +} +li.ordering-question{ + padding: 4px; +} +div.dd-question{ + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +ul.dd-question{ + position: absolute; + top: 10px; + left: 5px; +} + +ol.dd-question{ + position: absolute; + list-style-type: upper-alpha; + top: 10px; + left: 310px; +} + +/* File Storage */ +.fs_tools .input-form { + float: left; + margin-left: 1em; + width: 40%; +} +div.fs_tools{ + width:95%; + margin-left:auto; + margin-right:auto; + +} +.fl-uploader-browse-instructions { + background-color: #EAEAEA !important; + color: #666666; + padding: 6px; + text-align: center; +} +.fl-uploader-queue-footer { + background-color: #EAEAEA !important; + border-top: 1px solid #685642 !important; + color: #4D4D4D; + font-size: 1.07em; + font-weight: bold; + padding: 8px 6px; + position: relative; + vertical-align: middle; + z-index: 6; +} + +.flc-uploader-button-upload .fl-uploader-button-upload .fl-uploader-dim{ + +} +.group-selected{ +background-color:#EAEAEA; +} + +a.hideAllRemedialLink { + font-size: 0.8em; +} +div.onRight { + float: right; + font-size: smaller; +} +div.input-form.remedialContent { + overflow: auto; +} + + +/* BELOW ARE NEW STYLES INTRODUCED IN ATUTOR 2.2 */ +.fc-state-active, .fc-state-active .fc-button-inner { + background: none repeat scroll 0 0 #B7C68B !important; + border-color: #555555; + font-weight:700; +} + +.wide{ + width:90% !important; +} +#sm_topnav{ + display:none; + z-index:4000 !important; +} +#lrg_topnav{ + padding-top:0em; + padding-bottom:0em; + display:inline; + width:100%; + height:auto; + float:left; +} +#lrg_subnav{ + background:0 !important; + padding-top:1em; + z-index:1 !important; +} +.scroll-to-fixed-fixed{ + background:0 !important; + background-image:none !important; + background-color:#F3F3F3 !important; +} +.scroll-to-fixed-fixed #subnavlistcontainer{ + background-color: #F3F3F3 !important; + background-image: linear-gradient(#FAFAFA, #EAEAEA) !important; + position:relative !important; + top:.6em !important; +} +.scroll-to-fixed-fixed div#topnavlistcontainer{ + background-color: #F3F3F3 !important; + background-image: linear-gradient(#FAFAFA, #EAEAEA) !important; +} +.scroll-to-fixed-fixed div#topnavlistcontainer ul{ + white-space:nowrap; + overflow-y:hidden; +} +.scroll-to-fixed-fixed ul#subnavlist{ + border:none; +} +.scroll-to-fixed-fixed ul#subnavlist_i{ + margin-top: -2.2em; +} + + + + +#sm_content{ + display:none; +} + +#content_link{ + display:none; +} +select#admin_switch { + /* display: inline !important; */ +} +#mobile_switch{ +float:right; +margin-top:.3em; +margin-right:.5em; +font-weight:700; + +} +#mobile_switch li{ +display:inline; +padding:.3em; +} +#mobile_switch a:hover{ +background-color:#ADF7D8; +padding:.3em; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); +} +#mobile_switch a{ +padding:.3em; +color:black; +} +#mobile_switch li.disabled a{ +opacity:0.4; +color:#555555; +} +#mobile_switch li.disabled a:hover{ +opacity:1; +color:#555555; +} +#mobile_switch .left{ +margin-right:-0.1em; +border-top: 1px solid #EAEAEA; +border-left: 1px solid #EAEAEA; +border-bottom: 1px solid #EAEAEA; +border-radius: .3em 0em 0em .3em ; +} +#mobile_switch .right{ +margin-left:-.3em; +border-top: 1px solid #EAEAEA; +border-right: 1px solid #EAEAEA; +border-bottom: 1px solid #EAEAEA; +border-radius: 0em .3em .3em 0em ; +} +#mobile_switch li.active{ +/*background-color:#ADF7D8;*/ + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); +} +#mobile_switch li.disabled{ +background-color:#C5C9C8; +} + +#detail_switch{ + margin-top:.3em; + cursor: pointer; +} +#subnavlist_menu{ + display:none; +} + +.admin_container{ + width:54%; + float:left; +} +.admin_container_r{ + width: 44%; + float: right; + padding-top: 1em; + padding-left: .2em; +} + +.ui-widget-header{ + border: 1px solid #AAAAAA !important; + color: #222222 !important; + background-image: url("images/mesh-pattern.jpg") !important; +} +#calendar{ +float:left; +clear:left; +} +.calendar-side{ + width:18em; + float:left; + clear:right; + background-color: #F7F3ED; + padding: .5em; + background-color: #FCFCFC; + color: black; + font-size:0.85em; + font-weight: normal; + -moz-border-radius: .0em .0em .5em .5em; +} +.calendar-side fieldset legend{ + height:2em; + width:100%; + margin-left:.2em; +} +.calendar-side legend h4{ + margin-top:-.5em; +} +#topnavlist_sm{ + display:none; +} +#manage_off{ + display:none; +} +#manage_on{ + display:none; +} +#icon_to_detailed{ + display:none; +} +#detailed_to_icon{ + display:none; +} +#langdiv{ + margin-top:-1em; + width:79%; + margin-left:auto; + margin-right: auto; +} +#footer-right{ + width:79%; + float:left; + text-align:center; +} +#side_bar_on{ + display:none; +} +#side_bar_off{ + display:none; +} +#subnav-hide{ + display:none; + height:1px; +} +#subnav-open{ + display:none; + height:1px; +} +#copyright{ + width:79%; + margin-left:auto; + margin-right: auto; +} +h3.already_registered{ + width:80%; + margin-left:auto; + margin-right:auto; + margin-top: -2em; + height:2em;; +} +a#already_registered{ + background-color: #EAEAEA; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + border-radius: 0.3em 0.3em 0 0; + padding:.5em 5em .5em 5em; + +} +a#already_registered:hover, #already_registered:focus{ + background-image: linear-gradient(#EAEAEA, #FAFAFA); +} +#gototop img{ + border:0; +} +.top-tool img{ + border:0; +} +.imggoback{ + border:0; +} +.shortcut_icon{ + border:0; +} +.img1616{ + border:0; +} +.img-size-tree{ + border:0; +} +#message img{ + border:0; +} +/******* + +Responsive elements + +*******/ +@media screen and (max-width: 1600px) { + +} +@media screen and (max-width: 1280px) { + +} +/* iPad screen width */ +@media screen and (max-device-width: 1024px) { + body{ +/* font-size: 1.5em !important; */ + } + .page_wrapper{ + /* width:100%;*/ + } + #jumpmenu{ + font-size:.8em !important; + } + .button{ + font-size:.8em !important; + } + +/* div#content_link{ + margin-left: 1em; + } + */ + .content_link_tablet content_link{ + margin-left:1em; + } + div#subnavlistcontainer{ + border:0; + margin-top:.5em; + } +} +@media screen and (max-width: 1024px) { + .page_wrapper{ + /* width:100%; */ + } + .scroll-to-fixed-fixed #subnavlistcontainer { + margin-top:1em; + /* display:none !important;*/ + } + .scroll-to-fixed-fixed { + background-color:transparent !important; + padding:0 !important; + margin-left:-2em !important; + /*margin-top:-1.8em !important; */ + } + .scroll-to-fixed-fixed img{ + background-color:#eeeeee !important; + box-shadow: .1em .2em .2em #cccccc; + padding:1em !important; + } +/* .detail_switch{ + display:none; + } +*/ + .my-contacts{ + float:left; + width:100%; + } + .network-activity { + float: left; + width: 100%; + } + div.social-wrapper{ + clear:both; + } + div.social-results{ + float:left; + width:100% + } + + div#social-search{ + float:left; + width:100%; + padding:1em; + min-height:4.5em; + } + div.social-search{ + float:left; + width:100%; + padding:1em; + min-height:4.5em; + } + div.social-left{ + width:100%; + } + div.social-right{ + float:left; + width:100%; + } + .my-network-groups{ + float: left; + max-width: 100%; + width: 100%; + } + #contentwrapper{ +/* padding-left:.5em; + padding-right:.5em; */ + } + .content_link_tablet content_link{ + margin-left:1em; + } + + #contentcolumn{ + padding-left:0; + padding-right:0; + } + div#contentwrapper{ + /* margin-top:1.5em; */ + } + h2.page-title{ + clear:none; + /* float:left; + clear:both; + margin-top:-2em; */ + } + h3.page-title{ + float:left; + clear:both; + + } + .narrow{ + width:100%; + } + .wide{ + width:100%; + } + #admin_switch{ + margin-left:0em; + font-weight:700; + + } + .logo{ + display:none; + } + div.input-form { + border:0; + } + div#subnavlistcontainer { + clear:left; + border:0; + } + div#subnavlist { + } + div#subnavbacktopage { + float: left; + padding-left: 0px !important; + padding-top: 0px; + } + #subnavlist_i{ + clear:both; + } + #topnavlistcontainer_sm{ + margin-bottom:-1.6em; + height:auto; + } + ul#topnavlist_sm li{ + border:0; + float:left; + clear:both; + margin-left:0; + display: block; + width:100%; + height:1.8em; + background-color: #F3F3F3; + background: url("images/listmenu_arrow.png") no-repeat scroll right 5px top -.2em rgba(0, 0, 0, 0); + + } + + ul#topnavlist_sm li a { + background-color:transparent; + width:100%; + color: #685642; + font-weight:700; + text-decoration: none; + } + ul#topnavlist_sm li, ul#topnavlist_sm li a:hover, ul#topnavlist_sm li a:focus, ul#topnavlist_sm li a.active { + /*background-color: #B7C68B; */ + color: #685642; + background: url("images/listmenu_arrow.png") no-repeat scroll right 5px top -.2em rgba(0, 0, 0, 0); + text-decoration:none; + border:0; + + } + ul#topnavlist_sm li a.active{ + border-bottom: 3px solid #D26911; + } + + a.topnavlist-link{ + background-color: #ffffff; + border: 1px solid #EAEAEA; + border-radius: 0.2em; + clear: left; + color: #685642; + float: left; + font-weight: 700; + margin-left: 0.5em; + margin-top: -2.7em; + padding: 0.2em; + text-decoration: none; + + } + + #navigation-column{ + width:100%; + margin-top:-1em; + } + + div.box, div.box ul{ + border:none; + } + + #leftcolumn br{ + display:none; + border:1px; + } + div#content_link{ + /* + margin-right: -21em; + margin-top:-1em; + margin-bottom:2em; + width:5.5em; + */ + } + a.content_link{ + /* float:left; + clear:both; + width:5em; + color: #685642; + font-weight:700; + text-decoration: none; + border-bottom: 3px solid #EAEAEA; + padding: .5em .3em .2em .5em; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + margin-bottom:.5em; + z-index:5000; + */ + margin-left:.2em; + margin-top:2em; + } + #menu_ContentNavigation{ + width:100%; + margin-bottom: 2em; + clear:both; + height:auto; + } + #menu_ContentNavigation br{ + display:inline; + } + div.menuedit{ + display:none; + } + div#menutoggle{ + /* display:none;*/ + } + #content_link{ + margin-top:-2em; + display:inline; + z-index:998; + } + #lrg_content{ + + } + .img-size-tree{ + font-size:.8em; + } + #lrg_subnav{ + display:inline; + } + .crumbcontainer{ + height:auto; + } + #contentcolumn{ + /* margin-top:2em; */ + } + /* #sm_content{ + display:inline; + }*/ + #shortcuts{ + /* font-size:2em; */ + float:right; + } + /* + .img1616{ + font-size:1.5em; + }*/ + .img-size-tree{ + /* font-size:1.5em; */ + } + li.top-tool{ + width:95%; + margin-left:auto; + margin-right:auto; + } + ol#tools{ + margin-top:2em; + margin-left:1em; + } + .fs_tools .input-form { + width: 90%; + } + + .calendar-side{ + width:100%; + float:left; + clear:both; + } + #calendar{ + width:100% !important; + } + .child-top-tool{ + display:none; + } +} +@media screen and (max-device-width: 820px) { + .current_box{ + width:100%; + margin-left:0; + } + #my_courses_container{ + margin-left:0; + width:100%; + float:none; + } + div.input-form { + line-height:1em; + } + .hidecol700{ + display:none; + } + div.admin_switch, #admin_switch, div.ui-switch{ + display:none; + } + a.pref_wiz_launcher{ + display:none; + } + #sm_topnav{ + display:inline; + height:1.6em; + z-index:4000; + margin-top:-2em; + } + .logoutbar{ + clear:both; + } + #lrg_topnav{ + display:none; + } + #lrg_subnav{ + display:inline; + } + div.column { + float: left; + width: 100%; + margin: -.5em; + min-width: 170px; + } + +} +/********** for 640px or less *********/ +@media screen and (max-device-width: 1000px) { + ul#subnavlist li{ + float:left; + display: block; + width:90%; + height:auto; + text-align:left; + padding: 1em 0em 1em .5em; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + } + div#subnavlistcontainer { + clear:left; + } + scroll-to-fixed-fixed #subnavlistcontainer { + display:none !important; + } + +} +/********** for 640px or less *********/ +@media screen and (max-device-width: 640px) { +.admin_container_r{ + width: 90%; + float: left; + padding-top: 4px; + padding-left: 10px; +} +.scroll-to-fixed-fixed #subnavlistcontainer { +display:none; +} +.admin_container_r{ + width: 90%; + float: left; + padding-top: 4px; + padding-left: 10px; +} + body{ + /* font-size:2.2em !important; */ + width:100%; + } + div#subnavlistcontainer { + clear:both; + } + h2.page-title{ + clear:both; + margin-bottom:2em; + } + #topnavlist-link{ + font-size:1.2em; + height:auto; + } + .page_wrapper{ + /* width:100%; */ + } + + #header{ + margin-right:-1em; + } + #footer{ + display:none; + } + .site-name{ + font-size:1.5em; + } + #jumpmenu{ + margin-top:0em; + width:auto; + margin-left:auto; + margin-right:auto; + margin-bottom:.3em; + font-size:1.1em !important; + } + .logoutbar{ + margin-bottom:-.5em; + height:2em; + width:100%; + float:left; + } + #topnavlistcontainer_sm{ + margin-top:3em; + } + +ul#topnavlist_sm li{ + background-size:2em 3em; + background-color:#eeeeee; + border-bottom:1px solid #cccccc; + +} + #navigation-column{ + margin-top:-2em; + border:0; + } + div#guide_box { + display:none; + } + #lrg_content{ + width:100%; + float:left; + clear:both; + } + .button{ + font-size:1.2em !important; + } + div#top-links-jump{ + + margin-top:.2em; + } + div#top-links-text{ + display:none; + float:left; + margin-left:2em; + } + #top-bar{ + display:inline; + height:2em; + margin-bottom:1em; + + } + .site-name{ + display:none; + } + + #breadcrumbs{ + display:none + } + + div.news{ + width:90%; + } + div.home_box, div.outside_box { + width: 20em; + height: 8em; + margin-top: 1em; + padding: 3px; + padding-bottom: .4em; + float: left; + } + .hidecol480{ + display:none; + } + .current_box{ + width:95%; + margin-left:1em; + font-size:.8em; + border:thin solid black; + } + ul.current_list { + margin-left: 0; + } + #navigation-bar-button{ + display:inline; + margin-top:-2em; + } + #lrg_topnav{ + display:none; + visibility:hidden; + } + a.topnavlist-link{ + margin-top:-1.4em; + float:left; + clear:both; + border: 1px solid #EAEAEA !important; + border-bottom: 3px solid #EAEAEA; + border-radius:.3em .3em .0em .0em; + padding: .2em .2em .2em .2em; + color: #685642; + font-weight:700; + background-color:#FFFFFF !important; + /* background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + */ + } + + #mobile_switch{ + margin-top:2.6em; + margin-left:1em; + font-size:1.2em; + } + div#subnavlistcontainer{ + margin-top:-2em; + background:0; + width:100%; + } + + ul#subnavlist{ + margin-left:2em; + border-bottom:none; + width:80% !important; + display:inline-block; + } + ul#subnavlist li{ + padding:.4em; + margin-right:1em; + margin-bottom:1em; + display:inline-block; + margin: 0 -1px; + + } + ul#subnavlist span#hidesubnav { + background-size:40px 40px; + float:right; + } + ul#subnavlist span#showsubnav { + background-size:40px 40px; + float:right; + } + + div#subnavbacktopage { + margin-left:1em; + margin-bottom:-2em; + } + fieldset.group_form{ + border:0; + margin:0; + } + fieldset legend{ + display:none; + } + select{ + font-size:1em; + } + input[type=radio]{ + vertical-align:middle; + height:1.5em; + width:1.5em; + } + textarea{ + height:12em; + width:98%; + font-size:1.2em; + } + table.data tfoot tr:first-child td { + background-size:1.5em 1.5em; + } + table.data tfoot input { + margin-left: .5em; + } + table.data th a{ + background-size:1em 1em; + margin-right: .2em; + padding-right: 1.5em; + } + #header{ + height:4em; + background-color:#eeeeee; + } + h1#section-title{ + width:auto; + margin-left:.5em; + margin-right:auto; + margin-top:.3em; + margin-bottom:.9em; + padding-bottom:0em; + padding-top:0em; + } + #sm_content { + display: inline; + } + #lrg_content{ + display:none; + width:100%; + } + .content_link{ + margin-top:-1.2em; + } + #leftcolumn{ + width:100%; + clear:both; + } + #detail_switch{ + font-size:2em; + } + .sequence-links{ + margin-top:-1em; + } + div#detail_switch { + margin:0; + border:0; + } + div.crumbcontainer{ + display:none; + border:thin solid black; + } + div#contentwrapper{ + background-color:#FFFFFF; + margin-top:-.2em; + } + #contentcolumn{ + margin-top:1.5em; + padding-left:0; + padding-right:0; + padding-top:0; + width:100%; + } + #detail_switch{ + margin-top:-4.3em; + } + #my_courses_container{ + width:100%; + float:none; + margin-left:0; + } + table.data{ + width:95%; + } + li.top-tool img { + height:3em; + width:3em; + } + .message_link img{ + height:1.5em; + width:1.5em; + } + a.message_link { + margin-right:1em; + margin-left:1em; + float:right; + } + #message ul{ + width:90%; + } + h2.box input{ + height:1.2em; + width:1.2em; + } + .prefs_tab { + clear:both; + float:left; + display:inline-block; + } + .prefs_tab_selected { + clear:both; + float:left; + display:inline-block; + } + .etabbed-list-container { + width: 90%; + height:5em; + } + .content-settings { + float: left; + width: 100%; + } + div#help { + font-size:1.0em; + } + #previewText { + font-size:1em; + } + #previewArea { + float:right; + width:80%; + } + input[type="checkbox"] { + height:1.8em; + width:1.8em; + } + + .calendar-side{ + float:left; + width:90%; + } + .fc-header-center{ + width:1%; + } + .fc-header-title{ + margin-top:-3em; + margin-left:-10em; + font-size:1.2em; + } + #calendar{ + float:none; + width:100%; + } + div.home_box, div.outside_box { + width:98%; + padding:.5em; + font-size:1.2em; + margin-bottom:1em; + } + #details_view{ + margin-bottom:1em; + } + .bypass{ + display:none; + } +} +@media screen and (max-width: 640px) { + .outside_box{ + width:95% !important; + } + .inside_box{ + width:95% !important; + } + .home_box{ + width:95% !important; + } + .admin_container{ + width: 100%; + float: left; + padding-top: 4px; + padding-left: 2px; + } + .admin_container_r{ + width: 90%; + float: left; + padding-top: 4px; + padding-left: 10px; + } + ol#tools{ + width: 90%; + } + .page_wrapper{ + /* width:100%; */ + } + #jumpmenu{ + font-size:1.2em !important; + } + .button{ + font-size:1.2em !important; + } + #top-bar{ + /* height:auto; */ + + } + #leftcolumn{ + margin-left:-.5em; + } + #side-menu{ + margin-top:2em; + width:100%; + } + + .sequence-links{ + } + .site-name{ + margin-top:0; + float:left; + clear:both; + font-size:1em; + } + .news{ + margin-top:-1em; + } + div#top-links-jump{ + float:left; + margin-top:1.3em; + margin-left:1em; + } + div#top-links-text{ + display:inline; + float:left; + clear:both; + margin-top:-4em; + } + h1#section-title{ + float:left; + margin-left:0; + font-size:1em; + margin-bottom:.5em; + } + + .logoutbar{ + margin-top:.5em; + + } + div.column { + float: left; + width: 100%; + margin: -.5em; + min-width: 170px; + } + #my_courses_container{ + width:95%; + float:none; + margin-left:0; + } + .current_box{ + width:95%; + margin-left:0; + } + .hidecol700{ + display:none; + } + #contentcolumn{ + margin-top:0em; + padding-left:0; + padding-right:0; + padding-top:0; + } + .hidecol480{ + display:none; + } + .narrow{ + width:100%; + } + .wide{ + width:90%; + margin-left:auto; + margin-right:auto; + } + div#topnavlistcontainer_sm { + float:left; + clear:both; + margin-left:0; + width:100%; + } + ul#topnavlist_sm{ + margin-top: -.5em; + } + ul#topnavlist_sm li{ + border:0; + float:left; + clear:both; + margin-left:0; + display: block; + width:100%; + height:2em; + background-color: #F3F3F3; + background: url("images/listmenu_arrow.png") no-repeat scroll right 5px top 2px rgba(0, 0, 0, 0); + border-bottom: 1px solid #EAEAEA; + } + ul#topnavlist_sm li a { + background-color:transparent; + box-shadow: 0px 2px 1px #888888; + width:100% + } + ul#topnavlist_sm li a:hover, ul#topnavlist_sm li a:focus, ul#topnavlist_sm li a.active { + /*background-color: #B7C68B; */ + color: #685642; + background-color: #F3F3F3; + text-decoration:none; + border:0; + box-shadow: 1px 1px 2px #888888; + background: url("images/listmenu_arrow.png") no-repeat scroll right 5px top 2px rgba(0, 0, 0, 0); + } + ul#topnavlist_sm li a.active{ + border-bottom: 3px solid #D26911; + } + .fl-listmenu, .fl-list-menu { + border:0; +} + #sm_topnav{ + display:inline; + z-index: 4000 !important; + } + #lrg_topnav{ + display:none; + } + #lrg_subnav{ + display:inline; + + } + #topnavlist-link{ + border:thin solid #EAEAEA; + border-radius:.3em .3em .3em .3em; + padding: .2em .2em .0em .2em; + color: #685642; + font-weight:700; + background-color: #F3F3F3; + margin-top:.1em; + + } + #topnavlist-link img{ + height:.9em; + width:.9em; + } + #topnavlist-link:hover, #topnavlist-link:focus{ + background-image: linear-gradient(#EAEAEA, #FAFAFA); + + } + #topnavlistcontainer_sm{ + margin-top:-2em; + } + div#subnavlistcontainer { + height:auto; + /* float:left; + clear:both; + */ + margin: 0; + width: 100%; + padding:0 0 0 0; + background-color: #eeeeee; + background-image: none !important; + background:none !important; + } + ul#subnavlist{ + margin-left:2em; + border-bottom:none; + width:80% !important; + display:inline-block; + } + ul#subnavlist li{ + text-align:left; + height:2.1em; + background-color:transparent; + border-bottom:3px solid #EAEAEA; + border-radius:0; + } + ul#subnavlist li.active{ + + } + ul#subnavlist_i { + display:none; + } + + ul#subnavlist_i li { + display: inline; + text-align:left; + + } + ul#subnavlist li a { + + } + div#subnavbacktopage { + /* display:none; */ + } + .logo{ + display:none; + } + #details_view{ + float:left; + clear:both; + width:70%; + margin-left:auto; + margin-right:auto; + margin-bottom:5em; + + } + .home-box{ + margin-left:auto; + margin-right:auto; + } + .detail_switch{ + margin-top:.5em; + } + div#menutoggle { + display:none; + float:left; + } + + a.content_link{ +/* width:5em; + border-bottom: 3px solid #EAEAEA; + padding: .5em .3em .5em .5em; + background-color: #F3F3F3; + background-image: linear-gradient(#FAFAFA, #EAEAEA); + margin-bottom:.5em; + margin-left: 1em; + z-index:999; + */ + margin-top:1em; + background:transparent; + } + a.content_link img{ + margin-top:2em; + background:transparent; + } + + a.content_link:hover, a.content_link:focus{ + background-image: linear-gradient(#EAEAEA, #FAFAFA); + } + #content{ + float:left; + clear:both; + padding-top: .313em; + background-color: white; + } + #contentwrapper{ + margin-top:-2em; + } + #navigation-column{ + display:none; + width:100%; + padding-top:1em; + } + .menuedit{ + display:none; + } + div.box{ + display:none; + } + #leftcolumn{ + width:100%; + } + #leftcolumn br{ + display:none; + border:1px; + } + + #menu_ContentNavigation{ + display:inline !important; + box-shadow: .2em .2em .0em; + width:100%; + margin-top:2em; + margin-bottom: 2em; + float:left; + clear:both; + height:auto; + } + #menu_ContentNavigation br{ + display:inline; + } + #menu_ContentNavigation a{ + font-size:1.5em; + } + div#side-menu{ + margin-top:-.5em; + clear:both; + } + div#contentwrapper{ + margin-top:0em; + } + #breadcrumbs{ + display:none; + } + #lrg_content{ + display:none; + width:100%; + clear:both; + } + #sm_content{ + display:inline; + margin-top:1em; + } + img { + max-width: 100%; + height: auto; + width: auto; + } + div.news{ + width:90%; + } + div.home_box, div.outside_box { + width: 20em; + height: 8em; + margin-top: 1em; + padding: 3px; + padding-bottom: .4em; + float: left; + } + #my_courses_container{ + min-width:0; + } + div.admin_switch, #admin_switch, div.ui-switch{ + display:none; + } + a.pref_wiz_launcher{ + display:none; + } + .crumbcontainer{ + display:none; + } + .img1616{ + font-size:1.0em; + } + .img-size-tree{ + font-size:1.0em; + } + .editable_table span{ + font-size:3em; + } + .data h3{ + font-size:.8em; + } + fieldset.group_form{ + border:0; + margin:0; + } + ul#subnavlist_i{ + + } + ul#subnavlist{ + margin-left:0; + } + .hidecol360{ + display:none; + } + .scroll-to-fixed-fixed{ + background:0 !important; + background-image:none !important; + background-color:#F3F3F3 !important; + margin-top:-2em !important; + } + .scroll-to-fixed-fixed #subnavlistcontainer { + display:none; + } +} \ No newline at end of file diff --git a/themes/modern/test_questions/footer.tmpl.php b/themes/modern/test_questions/footer.tmpl.php new file mode 100644 index 000000000..7f5eaa32e --- /dev/null +++ b/themes/modern/test_questions/footer.tmpl.php @@ -0,0 +1 @@ +
    \ No newline at end of file diff --git a/themes/modern/test_questions/header.tmpl.php b/themes/modern/test_questions/header.tmpl.php new file mode 100644 index 000000000..bb2503db3 --- /dev/null +++ b/themes/modern/test_questions/header.tmpl.php @@ -0,0 +1,16 @@ +
    + weight): ?> +
    + score=='' && $this->score !== FALSE) echo ''._AT('unmarked').''; ?> + score !== FALSE && $this->question_id): ?> + / + score !== FALSE): ?> + score; ?> / + + weight; ?> +
    + + +

    number; ?>: type; ?>

    +
    +
    \ No newline at end of file diff --git a/themes/modern/test_questions/likert.tmpl.php b/themes/modern/test_questions/likert.tmpl.php new file mode 100644 index 000000000..ee41688f4 --- /dev/null +++ b/themes/modern/test_questions/likert.tmpl.php @@ -0,0 +1,12 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + num_choices; $i++): ?> +
    • + response == $i): ?>checked="checked"/> +
    • + +
    • + response == -1): ?>checked="checked"/> +
    • +
    \ No newline at end of file diff --git a/themes/modern/test_questions/likert_qti_1p2.tmpl.php b/themes/modern/test_questions/likert_qti_1p2.tmpl.php new file mode 100644 index 000000000..bb9d160ba --- /dev/null +++ b/themes/modern/test_questions/likert_qti_1p2.tmpl.php @@ -0,0 +1,50 @@ + + + + + + qmd_itemtype + Logical Identifier + + + qmd_questiontype + Multiple-choice + + + cc_profile + cc.mutliple_choice.v0p1 + + + + + + + row['question']; ?> + + + + + num_choices; $i++): ?> + + + row['choice_'.$i]; ?> + + + + + + + + + + + num_choices; $i++): ?> + + + Choice + + row['weight']))?$this->row['weight']:1; ?> + + + + diff --git a/themes/modern/test_questions/likert_qti_2p1.tmpl.php b/themes/modern/test_questions/likert_qti_2p1.tmpl.php new file mode 100644 index 000000000..16b3443c2 --- /dev/null +++ b/themes/modern/test_questions/likert_qti_2p1.tmpl.php @@ -0,0 +1,24 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + \ No newline at end of file diff --git a/themes/modern/test_questions/likert_result.tmpl.php b/themes/modern/test_questions/likert_result.tmpl.php new file mode 100644 index 000000000..9681a25b9 --- /dev/null +++ b/themes/modern/test_questions/likert_result.tmpl.php @@ -0,0 +1,16 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + + row['choice_'.$i] != ''): ?> +
    • + answer == $i): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + row['choice_'.$i], 'tests_answers.answer'); ?> +
    • + + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/likert_stats.tmpl.php b/themes/modern/test_questions/likert_stats.tmpl.php new file mode 100644 index 000000000..c151ca369 --- /dev/null +++ b/themes/modern/test_questions/likert_stats.tmpl.php @@ -0,0 +1,28 @@ +
    + + + + + + + num_choices; $i++): ?> + + + + + + + + + num_choices; $j++): ?> + + + + + + + num_choices; $j++): ?> + + + +
    row['question']; ?>num_blanks;?> / num_results; ?>average;?> / num_choices; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%
    num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/modern/test_questions/long.tmpl.php b/themes/modern/test_questions/long.tmpl.php new file mode 100644 index 000000000..d0bda838e --- /dev/null +++ b/themes/modern/test_questions/long.tmpl.php @@ -0,0 +1,15 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +row['properties'] == 1): /* one word */ ?> + + +row['properties'] == 2): /* sentence */ ?> + + +row['properties'] == 3): /* paragraph */ ?> + + +row['properties'] == 4): /* page */ ?> + + + \ No newline at end of file diff --git a/themes/modern/test_questions/long_qti_1p2.tmpl.php b/themes/modern/test_questions/long_qti_1p2.tmpl.php new file mode 100644 index 000000000..91e2d77dd --- /dev/null +++ b/themes/modern/test_questions/long_qti_1p2.tmpl.php @@ -0,0 +1,62 @@ + + + + + + qmd_itemtype + String + + + qmd_questiontype + FIB-string + + + cc_profile + cc.fib.v0p1 + + + cc_weighting + weight; ?> + + + + + + + row['question']; ?> + + + row['properties'] == 1){ + $fib_columns = 5; + } elseif ($this->row['properties'] == 2){ + $fib_rows = 1; + } elseif ($this->row['properties'] == 3){ + $fib_rows = 3; + } elseif ($this->row['properties'] == 4){ + $fib_rows = 8; + } + ?> + + + + + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + diff --git a/themes/modern/test_questions/long_qti_2p1.tmpl.php b/themes/modern/test_questions/long_qti_2p1.tmpl.php new file mode 100644 index 000000000..6b07f8504 --- /dev/null +++ b/themes/modern/test_questions/long_qti_2p1.tmpl.php @@ -0,0 +1,31 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + row['feedback']): ?> + + + + + + + + row['question']; ?> + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/long_result.tmpl.php b/themes/modern/test_questions/long_result.tmpl.php new file mode 100644 index 000000000..1a5fd20f1 --- /dev/null +++ b/themes/modern/test_questions/long_result.tmpl.php @@ -0,0 +1,3 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +

    answer, 'tests_answers.answer'); ?>

    diff --git a/themes/modern/test_questions/long_stats.tmpl.php b/themes/modern/test_questions/long_stats.tmpl.php new file mode 100644 index 000000000..a19848b10 --- /dev/null +++ b/themes/modern/test_questions/long_stats.tmpl.php @@ -0,0 +1,21 @@ +
    + + + + + + + + + + + + + +
    row['question']; ?>num_blanks; ?> / num_results; ?> + answers) - (isset($this->answers[''])?1:0)) > 0): ?> + (answers) - (isset($this->answers[''])?1:0)); ?>) + + + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/manifest_qti_1p2.tmpl.php b/themes/modern/test_questions/manifest_qti_1p2.tmpl.php new file mode 100644 index 000000000..29678d28c --- /dev/null +++ b/themes/modern/test_questions/manifest_qti_1p2.tmpl.php @@ -0,0 +1,28 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + IMS Question and Test Interoperability + 1.2.1 + + + + <?php echo strip_tags(stripslashes($this->title)); ?> + + <?php echo strip_tags(stripslashes($this->title)); ?> + + + + + + + + + + dependencies as $dependency_href): ?> + + + + + diff --git a/themes/modern/test_questions/manifest_qti_2p1.tmpl.php b/themes/modern/test_questions/manifest_qti_2p1.tmpl.php new file mode 100644 index 000000000..4b196f4e4 --- /dev/null +++ b/themes/modern/test_questions/manifest_qti_2p1.tmpl.php @@ -0,0 +1,29 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + IMS Content + 1.2 + + + + + + resources as $resource): ?> + + + + + + + + + + + dependencies as $dependency_href): ?> + + + + + + + \ No newline at end of file diff --git a/themes/modern/test_questions/matching.tmpl.php b/themes/modern/test_questions/matching.tmpl.php new file mode 100644 index 000000000..ab93dc54b --- /dev/null +++ b/themes/modern/test_questions/matching.tmpl.php @@ -0,0 +1,28 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + + + + + + +
    +
      + num_choices; $i++): ?> +
    • + + row['choice_'. $i], 'tests_questions.choice_'.$i); ?> +
    • + +
    +
    +
      + num_options; $i++): ?> +
    • letters[$i]; ?>. row['option_'. $i], 'tests_questions.option_'.$i); ?>
    • + +
    +
    \ No newline at end of file diff --git a/themes/modern/test_questions/matching_qti_1p2.tmpl.php b/themes/modern/test_questions/matching_qti_1p2.tmpl.php new file mode 100644 index 000000000..e9229e18c --- /dev/null +++ b/themes/modern/test_questions/matching_qti_1p2.tmpl.php @@ -0,0 +1,77 @@ + + + + + + qmd_itemtype + Logical Groups + + + qmd_questiontype + Drag-and-drop + + + cc_profile + cc.pattern_match.v0p1 + + + cc_weighting + weight; ?> + + + + + + + row['question']; ?> + + num_choices; $i++): ?> + + + row['choice_'.$i]; ?> + + + num_options; $j++): ?> + + + + row['option_'.$j]; ?> + + + + + + + + + + + + + + + num_choices; $i++): ?> + row['answer_'.$i] > -1): ?> + + + Optionrow['answer_'.$i]; ?> + + row['weight']))?$this->row['weight']:1; ?> + + + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + diff --git a/themes/modern/test_questions/matching_qti_2p1.tmpl.php b/themes/modern/test_questions/matching_qti_2p1.tmpl.php new file mode 100644 index 000000000..cb4ce1c95 --- /dev/null +++ b/themes/modern/test_questions/matching_qti_2p1.tmpl.php @@ -0,0 +1,54 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + num_choices; $i++): ?> + row['answer_'.$i] > -1): ?> + Choice Optionrow['answer_'.$i]; ?> + + + + + num_choices; $i++): ?> + row['answer_'.$i] > -1): ?> + + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + num_options; $i++): ?> + row['option_'.$i]; ?> + + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/matching_result.tmpl.php b/themes/modern/test_questions/matching_result.tmpl.php new file mode 100644 index 000000000..94d2487ee --- /dev/null +++ b/themes/modern/test_questions/matching_result.tmpl.php @@ -0,0 +1,37 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + + + + + + +
    +
      + + row['choice_'. $i] != ''): ?> +
    • + row['answer_'.$i] == $this->answers[$i]): ?> + <?php echo _AT('correct_answer'); ?> + + <?php echo _AT('wrong_answer'); ?> + row['answer_'.$i] >= 0): ?> + (letters[$this->row['answer_'.$i]]; ?>) + + + answers[$i] != '' && $this->answers[$i] >= 0): ?> + letters[$this->answers[$i]]; ?>. + + -. + + row['choice_'. $i]); ?> +
    • + + +
    +
    +
      + num_options; $i++): ?> +
    • letters[$i]; ?>. row['option_'. $i]); ?>
    • + +
    +
    \ No newline at end of file diff --git a/themes/modern/test_questions/matching_stats.tmpl.php b/themes/modern/test_questions/matching_stats.tmpl.php new file mode 100644 index 000000000..f3dcab2e6 --- /dev/null +++ b/themes/modern/test_questions/matching_stats.tmpl.php @@ -0,0 +1,23 @@ +
    + + + + + num_choices; $i++): ?> + row['choice_'.$i] = validate_length($this->row['choice_'.$i], 15, VALIDATE_LENGTH_FOR_DISPLAY); ?> + + + + + + + num_choices; $j++): ?> + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i], ENT_COMPAT, "UTF-8"); ?>
    row['question']; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/modern/test_questions/matchingdd.tmpl.php b/themes/modern/test_questions/matchingdd.tmpl.php new file mode 100644 index 000000000..320e00990 --- /dev/null +++ b/themes/modern/test_questions/matchingdd.tmpl.php @@ -0,0 +1,9 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +response); ?> +row['question_id']] = 1; ?> + +num_choices; $i++): ?> + + + \ No newline at end of file diff --git a/themes/modern/test_questions/matchingdd_qti_1p2.tmpl.php b/themes/modern/test_questions/matchingdd_qti_1p2.tmpl.php new file mode 100644 index 000000000..06585b181 --- /dev/null +++ b/themes/modern/test_questions/matchingdd_qti_1p2.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/matchingdd_qti_2p1.tmpl.php b/themes/modern/test_questions/matchingdd_qti_2p1.tmpl.php new file mode 100644 index 000000000..dff8d9b43 --- /dev/null +++ b/themes/modern/test_questions/matchingdd_qti_2p1.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/matchingdd_result.tmpl.php b/themes/modern/test_questions/matchingdd_result.tmpl.php new file mode 100644 index 000000000..0054a6d6d --- /dev/null +++ b/themes/modern/test_questions/matchingdd_result.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/matchingdd_stats.tmpl.php b/themes/modern/test_questions/matchingdd_stats.tmpl.php new file mode 100644 index 000000000..2006efded --- /dev/null +++ b/themes/modern/test_questions/matchingdd_stats.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/multianswer.tmpl.php b/themes/modern/test_questions/multianswer.tmpl.php new file mode 100644 index 000000000..17427d7c8 --- /dev/null +++ b/themes/modern/test_questions/multianswer.tmpl.php @@ -0,0 +1,10 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + + + +
      + num_choices; $i++): ?> +
    • + response)): ?>checked="checked"/>
    • + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/multianswer_qti_1p2.tmpl.php b/themes/modern/test_questions/multianswer_qti_1p2.tmpl.php new file mode 100644 index 000000000..d78383000 --- /dev/null +++ b/themes/modern/test_questions/multianswer_qti_1p2.tmpl.php @@ -0,0 +1,71 @@ + + + + + + qmd_itemtype + Logical Identifier + + + qmd_questiontype + Multiple-response + + + cc_profile + cc.mutliple_response.v0p1 + + + cc_weighting + weight; ?> + + + + + + + row['question']; ?> + + + + num_choices; $i++): ?> + + + + row['choice_'.$i]; ?> + + + + + + + + + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + + + Choice + + row['weight']))?$this->row['weight']:1; ?> + + + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + diff --git a/themes/modern/test_questions/multianswer_qti_2p1.tmpl.php b/themes/modern/test_questions/multianswer_qti_2p1.tmpl.php new file mode 100644 index 000000000..857e242ca --- /dev/null +++ b/themes/modern/test_questions/multianswer_qti_2p1.tmpl.php @@ -0,0 +1,46 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + Choice + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/multianswer_result.tmpl.php b/themes/modern/test_questions/multianswer_result.tmpl.php new file mode 100644 index 000000000..d5203213e --- /dev/null +++ b/themes/modern/test_questions/multianswer_result.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/multianswer_stats.tmpl.php b/themes/modern/test_questions/multianswer_stats.tmpl.php new file mode 100644 index 000000000..140367f61 --- /dev/null +++ b/themes/modern/test_questions/multianswer_stats.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/modern/test_questions/multichoice.tmpl.php b/themes/modern/test_questions/multichoice.tmpl.php new file mode 100644 index 000000000..adc6c6211 --- /dev/null +++ b/themes/modern/test_questions/multichoice.tmpl.php @@ -0,0 +1,13 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + num_choices; $i++): ?> +
    • + response[0] + if (is_numeric($this->response[0]) && $i == $this->response[0]): ?>checked="checked"/>
    • + +
    • + response[0]) && -1 == $this->response[0]): ?>checked="checked" /> +
    • +
    \ No newline at end of file diff --git a/themes/modern/test_questions/multichoice_qti_1p2.tmpl.php b/themes/modern/test_questions/multichoice_qti_1p2.tmpl.php new file mode 100644 index 000000000..aa312dacc --- /dev/null +++ b/themes/modern/test_questions/multichoice_qti_1p2.tmpl.php @@ -0,0 +1,71 @@ + + + + + + qmd_itemtype + Logical Identifier + + + qmd_questiontype + Multiple-choice + + + cc_profile + cc.mutliple_choice.v0p1 + + + cc_weighting + weight; ?> + + + + + + + row['question']; ?> + + + + num_choices; $i++): ?> + + + + row['choice_'.$i]; ?> + + + + + + + + + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + + + Choice + + row['weight']))?$this->row['weight']:1; ?> + + + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + \ No newline at end of file diff --git a/themes/modern/test_questions/multichoice_qti_2p1.tmpl.php b/themes/modern/test_questions/multichoice_qti_2p1.tmpl.php new file mode 100644 index 000000000..624201cfb --- /dev/null +++ b/themes/modern/test_questions/multichoice_qti_2p1.tmpl.php @@ -0,0 +1,39 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + Choice + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/multichoice_result.tmpl.php b/themes/modern/test_questions/multichoice_result.tmpl.php new file mode 100644 index 000000000..717810846 --- /dev/null +++ b/themes/modern/test_questions/multichoice_result.tmpl.php @@ -0,0 +1,24 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + + row['choice_'.$i] != ''): ?> +
    • + row['answer_'.$i] == 1) && in_array($i, $this->answers)): ?> + <?php echo _AT('correct_answer'); ?> + row['weight'] > 0) && (($this->row['answer_'.$i] == 0) || in_array($i, $this->answers))): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers)): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + row['choice_'.$i], 'tests_questions.choice_'.$i); ?> +
    • + + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/multichoice_stats.tmpl.php b/themes/modern/test_questions/multichoice_stats.tmpl.php new file mode 100644 index 000000000..9322500cf --- /dev/null +++ b/themes/modern/test_questions/multichoice_stats.tmpl.php @@ -0,0 +1,30 @@ +
    + + + + + + num_choices; $i++): ?> + row['choice_'.$i] = validate_length($this->row['choice_'.$i], 15, VALIDATE_LENGTH_FOR_DISPLAY); ?> + row['answer_'.$i]): ?> + + + + + + + + + + + num_choices; $j++): ?> + + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i]); ?>row['choice_'.$i], ENT_COMPAT, "UTF-8"); ?>
    row['question']; ?>num_blanks; ?> / num_results; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%
    num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/modern/test_questions/ordering.tmpl.php b/themes/modern/test_questions/ordering.tmpl.php new file mode 100644 index 000000000..f3bdbf884 --- /dev/null +++ b/themes/modern/test_questions/ordering.tmpl.php @@ -0,0 +1,14 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + num_choices; $i++): ?> +
    • + +
    • + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/ordering_qti_1p2.tmpl.php b/themes/modern/test_questions/ordering_qti_1p2.tmpl.php new file mode 100644 index 000000000..3b51ac018 --- /dev/null +++ b/themes/modern/test_questions/ordering_qti_1p2.tmpl.php @@ -0,0 +1,57 @@ + + + + + + qmd_itemtype + Logical Identifier + + + + + + + row['question']; ?> + + + + num_choices; $i++): ?> + + + + row['choice_'.$i]; ?> + + + + + + + + + + + + + num_choices; $i++): ?> + + + Choice + + row['weight']))?$this->row['weight']/$this->num_choices:1; ?> + + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + diff --git a/themes/modern/test_questions/ordering_qti_2p1.tmpl.php b/themes/modern/test_questions/ordering_qti_2p1.tmpl.php new file mode 100644 index 000000000..82a961444 --- /dev/null +++ b/themes/modern/test_questions/ordering_qti_2p1.tmpl.php @@ -0,0 +1,37 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + + num_choices; $i++): ?> + Choice + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/ordering_result.tmpl.php b/themes/modern/test_questions/ordering_result.tmpl.php new file mode 100644 index 000000000..91bf04ec3 --- /dev/null +++ b/themes/modern/test_questions/ordering_result.tmpl.php @@ -0,0 +1,14 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +
      + num_choices; $i++): ?> +
    1. + right_answers[$i] == $this->answers[$i]): ?> + <?php echo _AT('correct_answer'); ?> + + <?php echo _AT('wrong_answer'); ?> + + answers[$i] == -1 ? '-' : $this->answers[$i]+1; ?>. row['choice_'.$i], 'tests_questions.choice'); ?> +
    2. + +
    \ No newline at end of file diff --git a/themes/modern/test_questions/ordering_stats.tmpl.php b/themes/modern/test_questions/ordering_stats.tmpl.php new file mode 100644 index 000000000..d02a465b3 --- /dev/null +++ b/themes/modern/test_questions/ordering_stats.tmpl.php @@ -0,0 +1,23 @@ +
    + + + + + num_choices; $i++): ?> + row['choice_'.$i] = validate_length($this->row['choice_'.$i], 15, VALIDATE_LENGTH_FOR_DISPLAY); ?> + + + + + + + num_choices; $j++): ?> + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i], ENT_COMPAT, "UTF-8"); ?>
    row['question']; ?>answers[$j]; ?> / num_results; ?>
    num_results ? round($this->answers[$j]/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/modern/test_questions/truefalse.tmpl.php b/themes/modern/test_questions/truefalse.tmpl.php new file mode 100644 index 000000000..ed666cd7c --- /dev/null +++ b/themes/modern/test_questions/truefalse.tmpl.php @@ -0,0 +1,7 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +

    response == 1):?>checked="checked"/>

    + +

    response == 2):?>checked="checked"/>

    + +

    response < 1):?>checked="checked"/>

    \ No newline at end of file diff --git a/themes/modern/test_questions/truefalse_qti_1p2.tmpl.php b/themes/modern/test_questions/truefalse_qti_1p2.tmpl.php new file mode 100644 index 000000000..320957581 --- /dev/null +++ b/themes/modern/test_questions/truefalse_qti_1p2.tmpl.php @@ -0,0 +1,80 @@ + + + + + + qmd_itemtype + Logical Identifier + + + qmd_questiontype + True/false + + + cc_profile + cc.true_false.v0p1 + + + cc_weighting + weight; ?> + + + + + + + row['question']; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + row['answer_0'] == 1) { + echo 'ChoiceT'; + } else { + echo 'ChoiceF'; + } + ?> + + + row['weight']))?$this->row['weight']:1; ?> + + + row['feedback']): ?> + + + + + + row['feedback']; ?> + + + + + + + diff --git a/themes/modern/test_questions/truefalse_qti_2p1.tmpl.php b/themes/modern/test_questions/truefalse_qti_2p1.tmpl.php new file mode 100644 index 000000000..94d386cbd --- /dev/null +++ b/themes/modern/test_questions/truefalse_qti_2p1.tmpl.php @@ -0,0 +1,38 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + + row['answer_0'] == 1): ?> + ChoiceT + + ChoiceF + + + row['feedback']): ?> + + + + + + + row['question']; ?> + + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/modern/test_questions/truefalse_result.tmpl.php b/themes/modern/test_questions/truefalse_result.tmpl.php new file mode 100644 index 000000000..649af1fe4 --- /dev/null +++ b/themes/modern/test_questions/truefalse_result.tmpl.php @@ -0,0 +1,36 @@ +

    row['question'], 'tests_questions.quotesNotConverted'); ?>

    + +

    + row['answer_0'] == 1) && ($this->answers == 1)): ?> + <?php echo _AT('correct_answer'); ?> + row['answer_0'] == 2 && $this->answers == 1): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers == 1): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + + +

    + +

    + row['answer_0'] == 2) && ($this->answers == 2)): ?> + <?php echo _AT('correct_answer'); ?> + row['answer_0'] == 1 && $this->answers == 2): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers == 2): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + +

    diff --git a/themes/modern/test_questions/truefalse_stats.tmpl.php b/themes/modern/test_questions/truefalse_stats.tmpl.php new file mode 100644 index 000000000..9db08944e --- /dev/null +++ b/themes/modern/test_questions/truefalse_stats.tmpl.php @@ -0,0 +1,31 @@ +
    + + + + + +row['answer_0'] == 1): ?> + + +row['answer_0'] == 2): ?> + + + + + + + + + + + + + + + + + + + +
    Correct checkmarkCorrect checkmark
    row['question']; ?>num_blanks; ?> / num_results; ?>num_true; ?> / num_results; ?>num_false; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%
    num_results ? round($this->num_true/$this->num_results*100) : 0; ?>%
    num_results ? round($this->num_false/$this->num_results*100) : 0; ?>%
    + diff --git a/themes/modern/test_questions/wrapper.tmpl.php b/themes/modern/test_questions/wrapper.tmpl.php new file mode 100644 index 000000000..34fceb0df --- /dev/null +++ b/themes/modern/test_questions/wrapper.tmpl.php @@ -0,0 +1,63 @@ +<xml version="1.0" encoding="encoding; ?>"> + + + + use_cc): + $this->num_takes = intval($this->num_takes); + $this->num_takes = ($this->num_takes==0)?'unlimited':$this->num_takes; + ?> + + + cc_profile + cc.exam.v0p1 + + + qmd_assessmenttype + Examination + + + qmd_scoretype + Percentage + + + qmd_feedbackpermitted + No + + + qmd_hintspermitted + Yes + + + qmd_solutionspermitted + Yes + + + qmd_timelimit + 120 + + + cc_allow_late_submission + No + + + cc_maxattempts + num_takes; ?> + + + + +
    + xml_content; ?> +
    +
    +
    diff --git a/themes/modern/theme.cfg.php b/themes/modern/theme.cfg.php new file mode 100644 index 000000000..20ca73847 --- /dev/null +++ b/themes/modern/theme.cfg.php @@ -0,0 +1,44 @@ + diff --git a/themes/modern/theme_info.xml b/themes/modern/theme_info.xml new file mode 100644 index 000000000..b1eb5456d --- /dev/null +++ b/themes/modern/theme_info.xml @@ -0,0 +1,12 @@ + + + + + + Modern (Bootstrap 5) + 1.1 + Desktop + 2026-07-01 + A modern, responsive theme for ATutor 2.2 built on Bootstrap 5 (bundled locally under themes/modern/lib). Layered over the default theme markup so legacy tools keep working. + + diff --git a/themes/modern/tile_search/index.tmpl.php b/themes/modern/tile_search/index.tmpl.php new file mode 100644 index 000000000..a68e94b90 --- /dev/null +++ b/themes/modern/tile_search/index.tmpl.php @@ -0,0 +1,191 @@ + +
    +
    + +
    + +
    + + + + + + + +
    + +
    + +
    +
    +
    + +result_list)) +{ + if ($this->result_list['status'] == 'fail') // failed, display error + { + echo '
    '._AT('error').':
    '; + if (is_array($this->result_list['error'])) + { + foreach ($this->result_list['error'] as $error) + echo $error."
    "; + } + echo ""; + } + else // success, display results + { + if (is_array($this->result_list)) + { + $num_results = $this->result_list["summary"]["numOfTotalResults"]; + $num_pages = max(ceil($num_results / $this->results_per_page), 1); + + echo '
    '; + echo "

    ". _AT('results')." (".$this->startRecNumber. " - " .$this->result_list["summary"]["lastResultNumber"]." out of ".$num_results.")

    "; + + print_paginator($page, $num_results, htmlspecialchars($this-> page_str), $this->results_per_page); + + foreach ($this->result_list as $key=>$result) + { + if (is_int($key)) + { + ?> + +
    +instructor_role)) { ?> +
      + + <?php echo _AT('download_content_package'); ?>" border="0"> +   + + <?php echo _AT('import'); ?>" border="0"> +   + + + <?php echo _AT('link_alc'); ?>" border="0"> +   + +
    + +
    +

    + +

    +
    +
    +
    + +
    +
    + +
    +
    120) echo substr(htmlspecialchars($result['description']), 0, 120). "..."; else echo htmlspecialchars($result['description']); ?>
    + +
    +
    + +
    + +
    + +
    +
    +
    + + <?php echo _AT('folder'); ?>" border="0" />  + Folder name + +
    + +
    + <?php echo _AT('file'); ?>" border="0" /> + + <?php echo _AT('file'); ?>" border="0" />  + File name + +
    +
    + <?php echo _AT('file'); ?>" border="0" /> + + <?php echo _AT('file'); ?>" border="0" />  + File name + +
    + +
    + + <?php echo _AT('folder'); ?>" border="0" />  + Folder name + +
    + +
    + <?php echo _AT('file'); ?>" border="0" /> + + <?php echo _AT('file'); ?>" border="0" />  + File name + +
    +
    + +
    + '; + } + } +} + +?> diff --git a/themes/modern/users/browse.tmpl.php b/themes/modern/users/browse.tmpl.php new file mode 100644 index 000000000..a48cdc5e0 --- /dev/null +++ b/themes/modern/users/browse.tmpl.php @@ -0,0 +1,126 @@ + +
    +
    +
    + +
    +

    num_results); ?>

    +
    +
    + : + /> + + /> + + /> + + /> +
    + + has_categories): ?> +
    + + +
    + + +
    +
    + + +
    + : + checked_include_all; ?> /> + checked_include_one; ?> /> +
    + +
    + + +
    + +
    +
    +
    +
    + + + + + + + + + + +courses_rows)){ + $counter = ''; +?> + courses_rows as $row){ ?> + + + + + + + + + + + + + +
     
    + + + <?php echo  htmlentities_utf8($row['title']); ?> + + +

    +
    + +
    150){ + echo "..."; + } + ?> 
    + +
     
    + +
    + cats) && $row['cat_id'] != 0): ?> + cats[$row['cat_id']]; ?> + + + + + + + + - + +
    +
    + + \ No newline at end of file diff --git a/themes/modern/users/email_change.tmpl.php b/themes/modern/users/email_change.tmpl.php new file mode 100644 index 000000000..820b2cf46 --- /dev/null +++ b/themes/modern/users/email_change.tmpl.php @@ -0,0 +1,40 @@ + + + + + + +
    + + +
    +
    +
    + *
    +
    +
    + +
    + *
    + +
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/themes/modern/users/index.tmpl.php b/themes/modern/users/index.tmpl.php new file mode 100644 index 000000000..916a0b5c6 --- /dev/null +++ b/themes/modern/users/index.tmpl.php @@ -0,0 +1,143 @@ + +
    > + + + + + + + +courses as $row): + static $counter; + $counter++; +?> + + + + + + + + +
    + + <?php echo htmlentities_utf8($row['title']); ?> + icon[$row['course_id']]; + if (file_exists($path)) { + if (defined('AT_FORCE_GET_FILE')) { + $dir = 'get_course_icon.php?id='.$row['course_id']; + } else { + $dir = 'content/' . $_SESSION['course_id'] . '/'.$row['icon']; + } + } else { + $dir = "images/courses/".$row['icon']; + } + ?> + <?php echo htmlentities_utf8($row['title']); ?> + + + + + '.htmlentities_utf8($row['title']).'' ?> +
    : +
    '. get_display_name($row['member_id']).''; ?> + + + + + + + +
    + + + +
    + + + + + + +
    + <?php echo _AT('resume'); ?> +
    + + + +
    +
    + +
    +

    + all_news); + $p = 1; + }else{ + $perpage = 10; + } + + $newscount = count($this->all_news); + $num_pages = ($perpage==0)?0:(ceil($newscount/$perpage)); + $start = ($p-1)*$perpage; + $end = ($p*$perpage); + $page = isset($$page) ? $page : $p; + + print_paginator($page, $num_pages, '', 1); + + for($i=$start;$i<=$end; $i++){ + $count = $i; + if (isset($this->all_news)) { + echo '
      '."\n"; + if(isset($this->all_news[$i]['thumb'])){ + $alt = isset($this->all_news[$i]['alt']) ? $this->all_news[$i]['alt'] : ''; + $link = isset($this->all_news[$i]['link']) ? $this->all_news[$i]['link'] : ''; + + echo '
    • '.$alt.' ' .$link.'
      '."\n"; + if(isset($this->all_news[$i]['object']['course_id'])){ + echo '('.$this->all_news[$i]['course'].')|'."\n"; + } + echo '('.AT_DATE('%F %j, %g:%i',$this->all_news[$i]['time']).')
    • '."\n"; + } + echo '
    '; + } + } + if($perpage == count($this->all_news)){ ?> + + 0){ ?> + + +

    +
    + + \ No newline at end of file diff --git a/themes/modern/users/password_change.tmpl.php b/themes/modern/users/password_change.tmpl.php new file mode 100644 index 000000000..0c18390d3 --- /dev/null +++ b/themes/modern/users/password_change.tmpl.php @@ -0,0 +1,68 @@ + + + + + + +
    + + + + + +
    +
    + +
    + *
    +
    +
    + +
    + *
    +
    + ·
    + ·
    +
    + +
    + *
    + +
    + +
    + + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/themes/modern/users/pref_wizard/index.tmpl.php b/themes/modern/users/pref_wizard/index.tmpl.php new file mode 100644 index 000000000..0d384b1c7 --- /dev/null +++ b/themes/modern/users/pref_wizard/index.tmpl.php @@ -0,0 +1,73 @@ + + + + + + <?php echo SITE_NAME; ?> : <?php echo _AT('preferences'); ?> + + + + + + + + + +

    + + +

    + printAll(); ?> + +
    +start_template != null) { + $savant->display($this->start_template); + } + else if ($this->pref_template != null) { + echo '
    '; + include_once($this->pref_template); + + + foreach ($this->pref_wiz as $pref => $template) { + echo ''; + } + echo ''; + echo ''; + + echo '
    '; + echo ''; + if ($this->pref_index < count($this->pref_wiz) - 1) echo ''; + else echo ''; + echo '
    '; + echo '
    '; + } +?> +
    + + + + \ No newline at end of file diff --git a/themes/modern/users/pref_wizard/initialize.tmpl.php b/themes/modern/users/pref_wizard/initialize.tmpl.php new file mode 100644 index 000000000..69259d565 --- /dev/null +++ b/themes/modern/users/pref_wizard/initialize.tmpl.php @@ -0,0 +1,47 @@ +pref_wiz);?> + +
    +
    + +
    +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + pref_wiz)) echo checked ?> /> + +
    + +
    + /> + +
    + +
    +
    + " accesskey="d" /> + + +
    \ No newline at end of file diff --git a/themes/modern/users/preferences.tmpl.php b/themes/modern/users/preferences.tmpl.php new file mode 100644 index 000000000..93e80b02e --- /dev/null +++ b/themes/modern/users/preferences.tmpl.php @@ -0,0 +1,289 @@ +"; + $onload = "setPreviewFace(); setPreviewSize(); setPreviewColours();"; +} + +// desktop theme is passed from main script since in the case of mobile theme, +// $_SESSION['prefs']['theme'] is using the default mobile theme instead of the desktop. +$desktop_theme = $this->desktop_theme; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if($_SESSION['course_id'] == "-1"){ +echo '

    '; +} + +?> + +
    + +
    + +
    + +
    + +'."\n\r"; + + if (isset($_POST['mnot'])) + echo ' '."\n\r"; + else if (isset($this->notify)) + echo ' '."\n\r"; + + if (isset($_POST['time_zone'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_TIMEZONE'])) + echo ' '."\n\r"; + + if (isset($_POST['numbering'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_NUMBERING'])) + echo ' '."\n\r"; + + if (isset($_POST['use_jump_redirect'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_JUMP_REDIRECT'])) + echo ' '."\n\r"; + + if (isset($_POST['hide_feedback'])) { + echo ' '."\n\r"; + echo ' '."\n\r"; + } + else if (isset($_SESSION['prefs']['PREF_HIDE_FEEDBACK'])) + echo ' '."\n\r"; + + if (isset($_POST['auto'])) + echo ' '."\n\r"; + else if (isset($this->is_auto_login)) + echo ' '."\n\r"; + + if (isset($_POST['form_focus'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_FORM_FOCUS'])) + echo ' '."\n\r"; + + if (isset($_POST['show_guide'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_SHOW_GUIDE'])) + echo ' '."\n\r"; + + if (isset($_POST['content_editor'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_CONTENT_EDITOR'])) + echo ' '."\n\r"; + } + + if ($current_tab != 1) + { + // save selected options on tab 1 (display settings) + if (isset($_POST['fontface'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_FONT_FACE'])) + echo ' '."\n\r"; + + if (isset($_POST['font_times'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_FONT_TIMES'])) + echo ' '."\n\r"; + + if (isset($_POST['fg'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_FG_COLOUR'])) + echo ' '."\n\r"; + + if (isset($_POST['bg'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_BG_COLOUR'])) + echo ' '."\n\r"; + + if (isset($_POST['hl'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_HL_COLOUR'])) + echo ' '."\n\r"; + } + + if ($current_tab != 2) + { + // save selected options on tab 2 (content settings) + if (isset($_POST['use_alternative_to_text'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_USE_ALTERNATIVE_TO_TEXT'])) + echo ' '."\n\r"; + + if (isset($_POST['preferred_alt_to_text'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_TEXT'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_to_text_append_or_replace'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_TEXT_APPEND_OR_REPLACE'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_text_prefer_lang'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TEXT_PREFER_LANG'])) + echo ' '."\n\r"; + + if (isset($_POST['use_alternative_to_audio'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_USE_ALTERNATIVE_TO_AUDIO'])) + echo ' '."\n\r"; + + if (isset($_POST['preferred_alt_to_audio'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_AUDIO'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_to_audio_append_or_replace'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_AUDIO_APPEND_OR_REPLACE'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_audio_prefer_lang'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_AUDIO_PREFER_LANG'])) + echo ' '."\n\r"; + + if (isset($_POST['use_alternative_to_visual'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_USE_ALTERNATIVE_TO_VISUAL'])) + echo ' '."\n\r"; + + if (isset($_POST['preferred_alt_to_visual'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_VISUAL'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_to_visual_append_or_replace'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_TO_VISUAL_APPEND_OR_REPLACE'])) + echo ' '."\n\r"; + + if (isset($_POST['alt_visual_prefer_lang'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ALT_VISUAL_PREFER_LANG'])) + echo ' '."\n\r"; + } + + if ($current_tab != 3) + { + // save selected options on tab 3 (tool settings) + if (isset($_POST['dictionary_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_DICTIONARY'])) + echo ' '."\n\r"; + + if (isset($_POST['thesaurus_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_THESAURUS'])) + echo ' '."\n\r"; + + if (isset($_POST['encyclopedia_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ENCYCLOPEDIA'])) + echo ' '."\n\r"; + + if (isset($_POST['atlas_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ATLAS'])) + echo ' '."\n\r"; + + if (isset($_POST['note_taking_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_NOTE_TAKING'])) + echo ' '."\n\r"; + + if (isset($_POST['calculator_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_CALCULATOR'])) + echo ' '."\n\r"; + + if (isset($_POST['abacus_val'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_ABACUS'])) + echo ' '."\n\r"; + } + + if ($current_tab != 4) + { + // save selected options on tab 4 (control settings) + if (isset($_POST['show_contents'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_SHOW_CONTENTS'])) + echo ' '."\n\r"; + + if (isset($_POST['show_next_previous_buttons'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_SHOW_NEXT_PREVIOUS_BUTTONS'])) + echo ' '."\n\r"; + + if (isset($_POST['show_bread_crumbs'])) + echo ' '."\n\r"; + else if (isset($_SESSION['prefs']['PREF_SHOW_BREAD_CRUMBS'])) + echo ' '."\n\r"; + } + + echo '
    '; + include(AT_INCLUDE_PATH .'../users/'.$tabs[$current_tab][1]); + echo '
    '; +// include(getcwd().'/'.$tabs[$current_tab][1]); + +?> +
    + + + + + + + +
    +
    +
    +'; + +} + + +require(AT_INCLUDE_PATH.'footer.inc.php'); ?> diff --git a/themes/modern/users/profile.tmpl.php b/themes/modern/users/profile.tmpl.php new file mode 100644 index 000000000..0b8583e55 --- /dev/null +++ b/themes/modern/users/profile.tmpl.php @@ -0,0 +1,132 @@ + + +
    + +
    +
    +
    +

    +
    + +
    +
    + + + +
    +
    +
    + + /> +
    +
    + *
    + +
    + +
    +
    + +
    + +
    + *
    + +
    + + + +
    + *
    + + /> + + /> + + + /> + + /> + + +
    + +
    +
    +
    +

    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    + /> /> /> +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/modern/warningmessage.tmpl.php b/themes/modern/warningmessage.tmpl.php new file mode 100644 index 000000000..84f1c7e3c --- /dev/null +++ b/themes/modern/warningmessage.tmpl.php @@ -0,0 +1,20 @@ + + \ No newline at end of file diff --git a/themes/simplified_desktop/admin/system_preferences/add_feed.tmpl.php b/themes/simplified_desktop/admin/system_preferences/add_feed.tmpl.php index 9dfc9ef16..a9e4fd59c 100644 --- a/themes/simplified_desktop/admin/system_preferences/add_feed.tmpl.php +++ b/themes/simplified_desktop/admin/system_preferences/add_feed.tmpl.php @@ -34,7 +34,7 @@

    title_file)) { readfile($this->title_file); } else { - echo htmlspecialchars($_POST['title'], ENT_QUOTES) + echo htmlspecialchars($_POST['title'], ENT_QUOTES); }?>

    diff --git a/users/password_change.php b/users/password_change.php index bdebfa66e..64e92603d 100644 --- a/users/password_change.php +++ b/users/password_change.php @@ -72,7 +72,7 @@ $result = queryDB($sql, array(TABLE_PREFIX, $password, $_SESSION['member_id'])); if ($result == 0) { - $msg->addError('DB_NOT_UPDATED');\ + $msg->addError('DB_NOT_UPDATED'); header('Location:'. $_SERVER['PHP_SELF']); exit; }