diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b2db50320 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +.DS_Store +fuel/application/cache/ \ No newline at end of file diff --git a/assets/css/blog.css b/assets/css/blog.css index cb9606a85..c21281246 100755 --- a/assets/css/blog.css +++ b/assets/css/blog.css @@ -38,7 +38,7 @@ input.search_btn { background-color: #eee; height: 22px; line-height: 12px; marg /* for form */ .success { background-color: #cc0; padding: 2px 5px; } -.error { background-color: #c30; color: #fff; padding: 2px 5px; margin: 0; } +.error, .comment_error { background-color: #c30; color: #fff; padding: 2px 5px; margin: 0; } span.error_highlight input, span.error_highlight textarea, span.error_highlight select { border: 2px solid #c30; } diff --git a/fuel/application/libraries/MY_Typography.php b/fuel/application/libraries/MY_Typography.php new file mode 100644 index 000000000..a5dacebfa --- /dev/null +++ b/fuel/application/libraries/MY_Typography.php @@ -0,0 +1,3 @@ +<?php +// to simplify updates, we post the main files in the fuel module +require_once(FUEL_PATH.'libraries/MY_Typography.php'); \ No newline at end of file diff --git a/fuel/application/views/_docs/index.php b/fuel/application/views/_docs/index.php index 26bbb8b27..9f44291a1 100644 --- a/fuel/application/views/_docs/index.php +++ b/fuel/application/views/_docs/index.php @@ -1,3 +1,7 @@ +<?php +$CI = get_instance(); +$CI->load->library('form_builder'); +?> <h1>Site Documentation for <?=$this->config->item('site_name', 'fuel')?></h1> <p>The following contains documentation regarding your FUEL CMS website. This site is running FUEL CMS <?=FUEL_VERSION?>. Additional FUEL documentation can be found at <a href="http://docs.getfuelcms.com" target="_blank">docs.getfuelcms.com</a>.</p> <ul> @@ -18,14 +22,14 @@ <h2 id="what">What is FUEL CMS?</h2> <p><a href="http://getfuelcms.com" target="_blank">FUEL CMS</a> is a hybrid of a CMS and a framework. -At it's core, FUEL is a PHP/MySQL, modular-based development platform built on top of the popular <a href="http://www.codeigniter.com" target="_blank">CodeIgniter</a> framework. </p> +At its core, FUEL is a PHP/MySQL, modular-based development platform built on top of the popular <a href="http://www.codeigniter.com" target="_blank">CodeIgniter</a> framework. </p> <p>Learn more at <a href="http://getfuelcms.com" target="_blank">getfuelcms.com</a>.</p> <h2 id="modules">Modules</h2> <p>The <?=$this->fuel->config('site_name')?> website contains the following modules.</p> -<h3>Core Modules</h3> +<h3 id="core_modules">Core Modules</h3> <ul> <li><strong>Site</strong> - The following modules are part of the core functionality of FUEL CMS: <ul> @@ -52,12 +56,15 @@ </li> </ul> -<h3>Installed Modules</h3> -<p>The following modules are currently installed for your website:</p> +<h3 id="installed_modules">Installed Modules</h3> +<p>The following modules are currently installed for your website with the corresponding fields:</p> <?php $modules = $this->fuel->modules->advanced();?> <ul> -<?php foreach($modules as $mod) : ?> - <li> +<?php foreach($modules as $mod) : + $i = 0; + ?> + <?php if ($this->fuel->auth->has_permission($mod->name())) : ?> + <li id="adv_module_<?=$mod->name()?>"> <strong><?=$mod->friendly_name()?></strong> <?php if ($mod->install_info('description')) : ?> - <?=$mod->install_info('description')?> <?php endif; ?> <?php @@ -65,15 +72,40 @@ if (!empty($submodules)) : ?> <ul> - <?php foreach($submodules as $sub) : ?> - <li><?=$sub->info('module_name')?></li> + <?php foreach($submodules as $sub) : ?> + <li id="sub_module_<?=$sub->info('module_name')?>"> + <?php + $sub_model = $sub->model(); + if (empty($sub_model)) : ?> + <?=$sub->info('module_name')?> + <?php else: ?> + <a href="#" class="show_fields" class="show_fields"><?=$sub->info('module_name')?></a> + <ul style="display: none;"> + <?php + $form_fields = $sub_model->form_fields(); + foreach($sub_model->form_fields() as $field => $field_params) : ?> + <?php if ($field != 'id') : + $label = (!empty($field_params['label'])) ? $field_params['label'] : $CI->form_builder->create_label($field_params); + $label = ucfirst(str_replace('_', ' ', $field)); + ?> + <li><strong><?=$label?></strong><?php if (!empty($field_params['comment'])) : ?> - <?=$field_params['comment']?><?php endif; ?></li> + <?php endif; ?> + <?php endforeach;?> + </ul> + <?php endif; ?> + + </li> <?php endforeach;?> </ul> <?php endif; ?> </li> +<?php $i++; endif; ?> <?php endforeach; ?> </ul> +<?php if ($i === 0) : ?> +<p>You currently don't have access to any modules</p> +<?php endif; ?> <h2 id="dashboard" class="ico ico_dashboard"><img src="<?=img_path('icons/ico_dashboard.png', 'fuel')?>" alt="Dashboard" /> <a href="<?=fuel_url('dashboard')?>">Dashboard</a></h2> @@ -94,7 +126,7 @@ <?php $layouts = $this->fuel->layouts->get(); ?> <?php foreach($layouts as $layout) : ?> <?php if (!$layout->is_hidden()) : ?> - <li><strong><?=$layout->name()?></strong><?php if ($layout->description()) : ?> - <?=$layout->description()?><?php endif; ?></li> + <li id="layout->name()"><strong><?=$layout->label()?></strong><?php if ($layout->description()) : ?> - <?=$layout->description()?><?php endif; ?></li> <?php endif; ?> <?php endforeach; ?> </ul> @@ -118,7 +150,7 @@ <p>When inputting content, you can use special template functions to help insert things such as page URLS and image paths. The most common are:</p> <ul> - <li><strong>{site_url('my_page')}</strong> - inserts a link path relative to the site (e.g. http://www.marchex.com/my_page)/z.</li> + <li><strong>{site_url('my_page')}</strong> - inserts a link path relative to the site (e.g. http://www.mysite.com/my_page)/z.</li> <li><strong>{img_path('my_image.jpg')}</strong> - inserts the image path based (e.g. /assets/images/my_image.jpg)/.</li> <li><strong>{pdf_path('my_pdf.pdf')}</strong> - inserts the pdf path based (e.g. /assets/pdf/my_pdf.pdf). Extension (.pdf) is optional.</li> <li><strong>{docs_path('my_doc.doc')}</strong> - inserts the pdf path based (e.g. /assets/pdfs/my_doc.doc).</li> @@ -218,3 +250,19 @@ <h2 id="settings" class="ico ico_settings"><img src="<?=img_path('icons/ico_table_gear.png', 'fuel')?>" alt="Layouts" /> <a href="<?=fuel_url('settings')?>">Settings</a></h2> <p>Although it's unlikely you'll need to worry too much about this, some modules have extra configuration settings you can manage in the CMS. For example, you may have a blog settings area if the blog is installed.</p> + + +<?=jquery()?> +<script type="text/javascript"> + $(function(){ + $('.show_fields').on('click', function(e){ + e.preventDefault(); + $ul = $(this).next('ul'); + if ($ul && $ul.is(':hidden')){ + $ul.show(); + } else { + $ul.hide(); + } + }) + }) +</script> \ No newline at end of file diff --git a/fuel/codeigniter/language/english/upload_lang.php b/fuel/codeigniter/language/english/upload_lang.php index 4de9e9e74..bdc7dfc28 100755 --- a/fuel/codeigniter/language/english/upload_lang.php +++ b/fuel/codeigniter/language/english/upload_lang.php @@ -10,7 +10,7 @@ $lang['upload_no_file_selected'] = "You did not select a file to upload."; $lang['upload_invalid_filetype'] = "The filetype you are attempting to upload is not allowed."; $lang['upload_invalid_filesize'] = "The file you are attempting to upload is larger than the permitted size."; -$lang['upload_invalid_dimensions'] = "The image you are attempting to upload exceedes the maximum height or width."; +$lang['upload_invalid_dimensions'] = "The image you are attempting to upload doesn't fit into the allowed dimensions."; $lang['upload_destination_error'] = "A problem was encountered while attempting to move the uploaded file to the final destination."; $lang['upload_no_filepath'] = "The upload path does not appear to be valid."; $lang['upload_no_file_types'] = "You have not specified any allowed file types."; diff --git a/fuel/modules/fuel/assets/css/colorpicker.css b/fuel/modules/fuel/assets/css/colorpicker.css index 1e679931f..95767cd3f 100755 --- a/fuel/modules/fuel/assets/css/colorpicker.css +++ b/fuel/modules/fuel/assets/css/colorpicker.css @@ -4,7 +4,7 @@ overflow: hidden; position: absolute; background: url(images/colorpicker_background.png); - font-family: Arial, Helvetica, sans-serif; + font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; display: none; z-index: 10; } @@ -74,7 +74,7 @@ border: 1px solid transparent; position: absolute; font-size: 10px; - font-family: Arial, Helvetica, sans-serif; + font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; color: #898989; top: 4px; right: 11px; diff --git a/fuel/modules/fuel/assets/css/datepicker.css b/fuel/modules/fuel/assets/css/datepicker.css index cebc4b519..8c03a2c4f 100644 --- a/fuel/modules/fuel/assets/css/datepicker.css +++ b/fuel/modules/fuel/assets/css/datepicker.css @@ -52,7 +52,7 @@ div.dp-popup { position: relative; background: #fff; font-size: 10px; - font-family: arial, sans-serif; + font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; padding: 2px; width: 171px; line-height: 1.2em; diff --git a/fuel/modules/fuel/assets/css/fuel.css b/fuel/modules/fuel/assets/css/fuel.css index 0285a5851..2d8f62076 100644 --- a/fuel/modules/fuel/assets/css/fuel.css +++ b/fuel/modules/fuel/assets/css/fuel.css @@ -11,7 +11,7 @@ IMPORT CSS HERE SO THAT REQUIRE.JS CAN OPTIMIZE IT * { margin: 0; padding: 0; outline-style: none; } html, body { height: 100%; overflow: hidden; } -body { background-color: #333; font-family: 'Lucida Grande', 'Gill Sans', Arial, Helvetica, Sans-serif; margin: 0; padding: 0; font-size: 11px; color: #333; } +body { background-color: #333; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; margin: 0; padding: 0; font-size: 11px; color: #333; } h1 { font-size: 20px; margin-bottom: 10px; } h2 { font-size: 16px; margin-bottom: 10px; } h3 { font-size: 12px; margin: 15px 0 3px 0; } @@ -21,7 +21,7 @@ a:hover { text-decoration: underline; } a:visited { color: #4679bd;} p { margin: 5px 0 15px 0; } option { margin: 0 2px; } -input,select,textarea { font-size: 11px; font-family: 'Lucida Grande', 'Gill Sans', Arial, Helvetica, Sans-serif; } +input,select,textarea { font-size: 11px; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; } textarea { min-height: 40px; overflow: auto; resize: vertical; /*width: 100%;*/ } diff --git a/fuel/modules/fuel/assets/css/fuel.min.css b/fuel/modules/fuel/assets/css/fuel.min.css index 84dddd0c9..7e92eb25c 100644 --- a/fuel/modules/fuel/assets/css/fuel.min.css +++ b/fuel/modules/fuel/assets/css/fuel.min.css @@ -1 +1 @@ -.jqmWindow{display:none;position:fixed;top:50px;left:50%;margin-left:-202px;color:#333;width:400px;border:2px solid #666;z-index:300000;background-color:#fff;word-wrap:break-word;border:1px solid #ccc;display:none;-moz-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);}.jqmOverlay{background-color:#000;}* iframe.jqm{position:absolute;top:0;left:0;z-index:-1;width:expression(this.parentNode.offsetWidth+'px');height:expression(this.parentNode.offsetHeight+'px');}* html .jqmWindow{position:absolute;top:expression((document.documentElement.scrollTop || document.body.scrollTop) + Math.round(8 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px');}#__fuel_tooltip__{position:absolute;z-index:1000000;border:1px solid #ccc;background-color:#ffffcc;padding:3px;font-size:10px !important;font-weight:normal;width:200px;color:#333;}#__fuel_tooltip__ h3,#__fuel_tooltip__ div{margin:0;font-size:11px !important;font-weight:bold;}.treeview,.treeview ul{padding:0;margin:0;list-style:none;}.treeview ul{background-color:white;margin-top:4px;}.treeview .hitarea{background:url(../images/treeview/treeview-default.gif) -64px -25px no-repeat;height:16px;width:16px;margin-left:-16px;float:left;cursor:pointer;}* html .hitarea{display:inline;float:none;}.treeview li{margin:0;padding:3px 0pt 3px 16px;}.treeview a.selected{background-color:#eee;}#treecontrol{margin:1em 0;display:none;}.treeview .hover{cursor:pointer;}.treeview li{background:url(../images/treeview/treeview-default-line.gif) 0 0 no-repeat;}.treeview li.collapsable,.treeview li.expandable{background-position:0 -176px;}.treeview .expandable-hitarea{background-position:-80px -3px;}.treeview li.last{background-position:0 -1766px}.treeview li.lastCollapsable,.treeview li.lastExpandable{background-image:url(../images/treeview/treeview-default.gif);}.treeview li.lastCollapsable{background-position:0 -111px}.treeview li.lastExpandable{background-position:-32px -67px}.treeview div.lastCollapsable-hitarea,.treeview div.lastExpandable-hitarea{background-position:0;}.treeview-red li{background-image:url(../images/treeview/treeview-red-line.gif);}.treeview-red .hitarea,.treeview-red li.lastCollapsable,.treeview-red li.lastExpandable{background-image:url(../images/treeview/treeview-red.gif);}.treeview-black li{background-image:url(../images/treeview/treeview-black-line.gif);}.treeview-black .hitarea,.treeview-black li.lastCollapsable,.treeview-black li.lastExpandable{background-image:url(../images/treeview/treeview-black.gif);}.treeview-gray li{background-image:url(../images/treeview/treeview-gray-line.gif);}.treeview-gray .hitarea,.treeview-gray li.lastCollapsable,.treeview-gray li.lastExpandable{background-image:url(../images/treeview/treeview-gray.gif);}.treeview-famfamfam li{background-image:url(../images/treeview/treeview-famfamfam-line.gif);}.treeview-famfamfam .hitarea,.treeview-famfamfam li.lastCollapsable,.treeview-famfamfam li.lastExpandable{background-image:url(../images/treeview/treeview-famfamfam.gif);}.filetree li{padding:3px 0 2px 16px;}.filetree span.folder,.filetree span.file{padding:1px 0 1px 16px;display:block;}.filetree span.folder{background:url(../images/treeview/folder.gif) 0 0 no-repeat;}.filetree li.expandable span.folder{background:url(../images/treeview/folder-closed.gif) 0 0 no-repeat;}.filetree span.file{background:url(../images/treeview/file.gif) 0 0 no-repeat;}.supercomboselect_wrapper{position:relative;width:655px;height:220px;float:left;}.supercomboselect_left,.supercomboselect_right{position:absolute;top:0px;z-index:2;width:300px;}.supercomboselect_left{left:0px;}.supercomboselect_right{right:0px;}.supercomboselect_btns{position:absolute;left:50%;top:30%;margin-left:-20px !important;width:40px;text-align:center;z-index:1;}.supercomboselect_btns input{display:block;width:40px;margin:auto;margin-top:3px;}.supercomboselect{height:180px;overflow-y:auto;overflow-x:hidden;border:1px solid #ccc;background-color:#fff;}.supercomboselect ul{margin:0;padding:0;cursor:pointer;}.supercomboselect li{-moz-user-select:none;background-color:#fff;margin:0;padding:3px 20px 3px 10px;border-bottom:1px solid #ddd;list-style:none;display:block;overflow:hidden;text-overflow:ellipsis;}.supercomboselect li.selected{background-color:#ffc;}.supercomboselect_search{margin-top:3px;}.supercomboselect_search_text{width:294px;}.supercomboselect_empty_msg{padding:80px 5px 5px 5px;text-align:center;font-weight:bold;color:#ccc;}.supercomboselect_search_highlight{background-color:#ffff99;}.supercomboselect li.ui-sortable-helper{border:1px solid #ddd;}.supercomboselect ul.ui-sortable li{background-image:url(../images/icons/ico_sortable.png);background-repeat:no-repeat;background-position:left center;padding-left:16px;}.supercomboselect li.option_disabled{background-color:#eee;color:#999;}.supercomboselect li.optgrp{background:#DDD;cursor:default;font-weight:bold;padding-left:5px;}.markItUpButton a{background:transparent url(../images/markitup/markitup_icons.png) no-repeat;}.markItUp .bold a{background-position:0 0;}.markItUp .italic a{background-position:0 -456px;}.markItUp .stroke a{background-position:0 -906px;}.markItUp .p a{background-position:0 -792px;}.markItUp .h1 a{background-position:0 -152px;}.markItUp .h2 a{background-position:0 -190px;}.markItUp .h3 a{background-position:0 -228px;}.markItUp .h4 a{background-position:0 -266px;}.markItUp .h5 a{background-position:0 -304px;}.markItUp .h6 a{background-position:0 -342px;}.markItUp .ol a{background-position:0 -570px;}.markItUp .ul a{background-position:0 -1010px;}.markItUp .li a{background-position:0 -532px;}.markItUp .image a{background-position:0 -830px;}.markItUp .link a{background-position:0 -494px;}.markItUp .mailto a{background-position:0 -114px;}.markItUp .clean a{background-position:0 -38px;}.markItUp .preview a{background-position:0 -868px;}.markItUp .help a{background-position:0 -380px;}.markItUp .fuel_var a{background-position:0 -717px;}.markItUp .blockquote a{background-position:0 -76px;}.markItUp .hr a{background-position:0 -976px;}.markItUp .maximize a{background-position:0 -608px;}.markItUp .minimize a{background-position:0 -679px;}.markItUp *{margin:0px;padding:0px;outline:none;}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none;}.markItUp{min-width:550px;margin:5px 0 5px 0;}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif;}.markItUpEditor{font:11px 'Courier New',Courier,monospace;padding-left:5px;width:520px;height:230px;clear:both;display:block;line-height:18px;overflow:auto;border:1px solid #ccc;}.markItUpPreviewFrame{overflow:auto;background-color:#FFFFFF;width:100%;height:280px;margin:5px 0;border:1px solid #ccc;}.markItUpFooter{width:100%;}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin:0 auto 0px auto !important;background-image:url(../images/markitup/handle.png);cursor:n-resize;}.markItUpHeader ul li{list-style:none;float:left;position:relative;padding-top:5px;}.markItUpHeader ul li:hover > ul{display:block;}.markItUpHeader ul .markItUpDropMenu{background:transparent url(../images/markitup/menu.png) no-repeat 115% 50%;margin-right:5px;}.markItUpHeader ul .markItUpDropMenu li{margin-right:0px;}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0px;background:#FFF;border:1px solid #000;}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000;}.markItUpHeader ul ul .markItUpDropMenu{background:#FFF url(../images/markitup/submenu.png) no-repeat 100% 50%;}.markItUpHeader ul .markItUpSeparator{margin:0 10px;width:1px;height:16px;overflow:hidden;background-color:#CCC;}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0px;}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px;}.markItUpHeader ul ul ul li{float:none;}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0px;}.markItUpHeader ul ul a{display:block;padding-left:0px;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%;}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000;}.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute !important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;}.ui-helper-clearfix:after{clear:both;}.ui-helper-clearfix{zoom:1;}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default !important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#222222;}.ui-widget-content a{color:#222222;}.ui-widget-header{border:1px solid #aaaaaa;background:#cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222222;font-weight:bold;}.ui-widget-header a{color:#222222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget:active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0 !important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0 !important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none !important;}.ui-datepicker{width:15em;padding:.1em .1em 0;display:none;z-index:999999 !important;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.8em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .4em .3em .4em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker-trigger{cursor:pointer;margin:0 3px -2px 0;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none; display:block; position:absolute; z-index:-1; filter:mask(); top:-4px; left:-4px; width:200px; height:200px;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}.jqmWindow{display:none;position:fixed;top:50px;left:50%;margin-left:-202px;color:#333;width:400px;border:2px solid #666;z-index:300000;background-color:#fff;word-wrap:break-word;border:1px solid #ccc;display:none;-moz-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);}.jqmOverlay{background-color:#000;}* iframe.jqm{position:absolute;top:0;left:0;z-index:-1;width:expression(this.parentNode.offsetWidth+'px');height:expression(this.parentNode.offsetHeight+'px');}* html .jqmWindow{position:absolute;top:expression((document.documentElement.scrollTop || document.body.scrollTop) + Math.round(8 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px');}#__fuel_tooltip__{position:absolute;z-index:1000000;border:1px solid #ccc;background-color:#ffffcc;padding:3px;font-size:10px !important;font-weight:normal;width:200px;color:#333;}#__fuel_tooltip__ h3,#__fuel_tooltip__ div{margin:0;font-size:11px !important;font-weight:bold;}.treeview,.treeview ul{padding:0;margin:0;list-style:none;}.treeview ul{background-color:white;margin-top:4px;}.treeview .hitarea{background:url(../images/treeview/treeview-default.gif) -64px -25px no-repeat;height:16px;width:16px;margin-left:-16px;float:left;cursor:pointer;}* html .hitarea{display:inline;float:none;}.treeview li{margin:0;padding:3px 0pt 3px 16px;}.treeview a.selected{background-color:#eee;}#treecontrol{margin:1em 0;display:none;}.treeview .hover{cursor:pointer;}.treeview li{background:url(../images/treeview/treeview-default-line.gif) 0 0 no-repeat;}.treeview li.collapsable,.treeview li.expandable{background-position:0 -176px;}.treeview .expandable-hitarea{background-position:-80px -3px;}.treeview li.last{background-position:0 -1766px}.treeview li.lastCollapsable,.treeview li.lastExpandable{background-image:url(../images/treeview/treeview-default.gif);}.treeview li.lastCollapsable{background-position:0 -111px}.treeview li.lastExpandable{background-position:-32px -67px}.treeview div.lastCollapsable-hitarea,.treeview div.lastExpandable-hitarea{background-position:0;}.treeview-red li{background-image:url(../images/treeview/treeview-red-line.gif);}.treeview-red .hitarea,.treeview-red li.lastCollapsable,.treeview-red li.lastExpandable{background-image:url(../images/treeview/treeview-red.gif);}.treeview-black li{background-image:url(../images/treeview/treeview-black-line.gif);}.treeview-black .hitarea,.treeview-black li.lastCollapsable,.treeview-black li.lastExpandable{background-image:url(../images/treeview/treeview-black.gif);}.treeview-gray li{background-image:url(../images/treeview/treeview-gray-line.gif);}.treeview-gray .hitarea,.treeview-gray li.lastCollapsable,.treeview-gray li.lastExpandable{background-image:url(../images/treeview/treeview-gray.gif);}.treeview-famfamfam li{background-image:url(../images/treeview/treeview-famfamfam-line.gif);}.treeview-famfamfam .hitarea,.treeview-famfamfam li.lastCollapsable,.treeview-famfamfam li.lastExpandable{background-image:url(../images/treeview/treeview-famfamfam.gif);}.filetree li{padding:3px 0 2px 16px;}.filetree span.folder,.filetree span.file{padding:1px 0 1px 16px;display:block;}.filetree span.folder{background:url(../images/treeview/folder.gif) 0 0 no-repeat;}.filetree li.expandable span.folder{background:url(../images/treeview/folder-closed.gif) 0 0 no-repeat;}.filetree span.file{background:url(../images/treeview/file.gif) 0 0 no-repeat;}.supercomboselect_wrapper{position:relative;width:655px;height:220px;float:left;}.supercomboselect_left,.supercomboselect_right{position:absolute;top:0px;z-index:2;width:300px;}.supercomboselect_left{left:0px;}.supercomboselect_right{right:0px;}.supercomboselect_btns{position:absolute;left:50%;top:30%;margin-left:-20px !important;width:40px;text-align:center;z-index:1;}.supercomboselect_btns input{display:block;width:40px;margin:auto;margin-top:3px;}.supercomboselect{height:180px;overflow-y:auto;overflow-x:hidden;border:1px solid #ccc;background-color:#fff;}.supercomboselect ul{margin:0;padding:0;cursor:pointer;}.supercomboselect li{-moz-user-select:none;background-color:#fff;margin:0;padding:3px 20px 3px 10px;border-bottom:1px solid #ddd;list-style:none;display:block;overflow:hidden;text-overflow:ellipsis;}.supercomboselect li.selected{background-color:#ffc;}.supercomboselect_search{margin-top:3px;}.supercomboselect_search_text{width:294px;}.supercomboselect_empty_msg{padding:80px 5px 5px 5px;text-align:center;font-weight:bold;color:#ccc;}.supercomboselect_search_highlight{background-color:#ffff99;}.supercomboselect li.ui-sortable-helper{border:1px solid #ddd;}.supercomboselect ul.ui-sortable li{background-image:url(../images/icons/ico_sortable.png);background-repeat:no-repeat;background-position:left center;padding-left:16px;}.supercomboselect li.option_disabled{background-color:#eee;color:#999;}.supercomboselect li.optgrp{background:#DDD;cursor:default;font-weight:bold;padding-left:5px;}.markItUpButton a{background:transparent url(../images/markitup/markitup_icons.png) no-repeat;}.markItUp .bold a{background-position:0 0;}.markItUp .italic a{background-position:0 -456px;}.markItUp .stroke a{background-position:0 -906px;}.markItUp .p a{background-position:0 -792px;}.markItUp .h1 a{background-position:0 -152px;}.markItUp .h2 a{background-position:0 -190px;}.markItUp .h3 a{background-position:0 -228px;}.markItUp .h4 a{background-position:0 -266px;}.markItUp .h5 a{background-position:0 -304px;}.markItUp .h6 a{background-position:0 -342px;}.markItUp .ol a{background-position:0 -570px;}.markItUp .ul a{background-position:0 -1010px;}.markItUp .li a{background-position:0 -532px;}.markItUp .image a{background-position:0 -830px;}.markItUp .link a{background-position:0 -494px;}.markItUp .mailto a{background-position:0 -114px;}.markItUp .clean a{background-position:0 -38px;}.markItUp .preview a{background-position:0 -868px;}.markItUp .help a{background-position:0 -380px;}.markItUp .fuel_var a{background-position:0 -717px;}.markItUp .blockquote a{background-position:0 -76px;}.markItUp .hr a{background-position:0 -976px;}.markItUp .maximize a{background-position:0 -608px;}.markItUp .minimize a{background-position:0 -679px;}.markItUp *{margin:0px;padding:0px;outline:none;}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none;}.markItUp{min-width:550px;margin:5px 0 5px 0;}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif;}.markItUpEditor{font:11px 'Courier New',Courier,monospace;padding-left:5px;width:520px;height:230px;clear:both;display:block;line-height:18px;overflow:auto;border:1px solid #ccc;}.markItUpPreviewFrame{overflow:auto;background-color:#FFFFFF;width:100%;height:280px;margin:5px 0;border:1px solid #ccc;}.markItUpFooter{width:100%;}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin:0 auto 0px auto !important;background-image:url(../images/markitup/handle.png);cursor:n-resize;}.markItUpHeader ul li{list-style:none;float:left;position:relative;padding-top:5px;}.markItUpHeader ul li:hover > ul{display:block;}.markItUpHeader ul .markItUpDropMenu{background:transparent url(../images/markitup/menu.png) no-repeat 115% 50%;margin-right:5px;}.markItUpHeader ul .markItUpDropMenu li{margin-right:0px;}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0px;background:#FFF;border:1px solid #000;}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000;}.markItUpHeader ul ul .markItUpDropMenu{background:#FFF url(../images/markitup/submenu.png) no-repeat 100% 50%;}.markItUpHeader ul .markItUpSeparator{margin:0 10px;width:1px;height:16px;overflow:hidden;background-color:#CCC;}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0px;}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px;}.markItUpHeader ul ul ul li{float:none;}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0px;}.markItUpHeader ul ul a{display:block;padding-left:0px;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%;}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000;}.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute !important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;}.ui-helper-clearfix:after{clear:both;}.ui-helper-clearfix{zoom:1;}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default !important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#222222;}.ui-widget-content a{color:#222222;}.ui-widget-header{border:1px solid #aaaaaa;background:#cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222222;font-weight:bold;}.ui-widget-header a{color:#222222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget:active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0 !important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0 !important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none !important;}.ui-datepicker{width:15em;padding:.1em .1em 0;display:none;z-index:999999 !important;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.8em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .4em .3em .4em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker-trigger{cursor:pointer;margin:0 3px -2px 0;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none; display:block; position:absolute; z-index:-1; filter:mask(); top:-4px; left:-4px; width:200px; height:200px;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}*{margin:0;padding:0;outline-style:none;}html,body{height:100%;overflow:hidden;}body{background-color:#333;font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;margin:0;padding:0;font-size:11px;color:#333;}h1{font-size:20px;margin-bottom:10px;}h2{font-size:16px;margin-bottom:10px;}h3{font-size:12px;margin:15px 0 3px 0;}a{color:#0e3e7e;text-decoration:none;}img{border:0;max-width:100%;}a:hover{text-decoration:underline;}a:visited{color:#4679bd;}p{margin:5px 0 15px 0;}option{margin:0 2px;}input,select,textarea{font-size:11px;font-family:'Lucida Grande','Gill Sans',Arial,Helvetica,Sans-serif;}textarea{min-height:40px;overflow:auto;resize:vertical;}ul{margin-bottom:10px;}ul ul{margin:10px;}optgroup{color:#000;font-style:normal;font-weight:normal;}optgroup option{padding-left:10px;}fieldset{border-top:5px solid #eee;border-left:none;border-right:none;border-bottom:none;margin:0;padding:20px 0 10px 0;}legend{padding:5px 30px 5px 5px;font-size:12px;background-color:#eee;font-weight:bold;text-align:left;}iframe{border:none;}::-moz-focus-inner{border:0;padding:0;}input[type="search"]::-webkit-search-decoration{display:none;}input,button,select,textarea{margin:0;}input[type="radio"],input[type="checkbox"]{position:relative;top:1px; top:0\0; *top:-3px;}button,input[type="reset"],input[type="submit"],input[type="button"]{-webkit-appearance:none;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;background:#ddd url(../images/btn.png) repeat-x;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whitesmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,whitesmoke 0%,#cfd1cf 100%);border:1px solid;border-color:#ddd #bbb #999;cursor:pointer;color:#333; font-weight:bold;outline:0;overflow:visible;padding:3px 10px;text-shadow:#fff 0 1px 1px;width:auto; *padding-top:2px;*padding-bottom:0px;}button{ *padding-top:1px;*padding-bottom:1px;}textarea,select,input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;background-color:#fff;border:1px solid;border-color:#aaa #c1c1c1 #e1e1e1;outline:0;padding:5px 3px 4px 3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px; *padding-top:2px;*padding-bottom:1px;*height:auto;-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);}select{height:25px;line-height:16px;max-width:525px;}::-webkit-input-placeholder{color:#888;}input:-moz-placeholder,textarea:-moz-placeholder{color:#888;}input.placeholder_text,textarea.placeholder_text{color:#888;}:invalid{ -moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}button:focus,button:active,input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active{outline:0;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6); z-index:1;}input[type="file"]:focus,input[type="file"]:active,input[type="radio"]:focus,input[type="radio"]:active,input[type="checkbox"]:focus,input[type="checkbox"]:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}select[disabled],textarea[disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled]{background-color:#eee;}button[disabled],input[disabled],select[disabled],select[disabled] option,select[disabled] optgroup,textarea[disabled]{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#888;cursor:default;}input[readonly],textarea[readonly],select[readonly]{background-color:transparent;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}textarea,select[size],select[multiple]{height:auto;}input[type="file"]{border:1px dashed #ccc;border-radius:3px;padding:10px;}@media (-webkit-min-device-pixel-ratio:0) {select{background-image:url(../images/select_arrow.gif);background-repeat:no-repeat;background-position:right center;padding-right:20px;}select[size],select[multiple]{background-image:none;padding:0;}::-webkit-validation-bubble-message{box-shadow:rgba(0,0,0,0.5) 0 0 5px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#666),color-stop(1,#000));border:1px solid;border-color:#747474 #5e5e5e #4f4f4f;color:#fff;font:13px/17px 'Lucida Grande',Arial,'Liberation Sans',FreeSans,sans-serif;overflow:hidden;padding:15px 15px 17px;text-shadow:#000 0 0 1px;height:16px;}::-webkit-validation-bubble-arrow,::-webkit-validation-bubble-top-outer-arrow,::-webkit-validation-bubble-top-inner-arrow{-webkit-box-shadow:none;box-shadow:none;background:#666;border:0;}}::-webkit-scrollbar{width:12px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.4);border-radius:10px;}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 3px rgba(140,140,140,0.9);}p.instructions{font-size:14px;line-height:18px;}ul.nobullets{list-style:none;}ul.nobullets li{margin-bottom:2px;}.tooltip{cursor:help;text-decoration:none;border-bottom:1px dotted #0e3e7e;}.fillin{color:#aaa;}.clear{clear:both;height:0;font-size:0px;line-height:0px;}.clearfix:before,.clearfix:after{content:"";display:table;}.clearfix:after{clear:both;}.clearfix{zoom:1;}span.required{color:#c30;}.datepicker_hh{margin-right:2px;}.datepicker_mm{margin:0 5px 0 2px;}.unpublished{color:#b30 !important;}.published{color:#690;}.div_vert{background:transparent url(../images/div_vert.png) repeat-y center center;width:2px;height:36px;padding:0 15px;}.search{padding-left:3px;}.show{padding-left:15px;}.loader{margin:auto;width:32px;height:32px;text-align:center;background:#fff url(../images/spinner.gif) no-repeat center center;}.loader_sm{margin:auto;width:16px;height:16px;text-align:center;background:#fff url(../images/spinner_sm.gif) no-repeat center center !important;}.hidden{display:none;}.float_left{float:left;}.float_right{float:right;}.tiny{font-size:9px;}tr.drag{border:1px solid #ccc !important;background-color:#ffe !important}tr.drag td{cursor:move !important;background-color:#ffe !important;}a.editor_viewsource,a.editor_preview{margin:4px 4px 4px 0;display:block;float:left;height:14px;line-height:14px !important;}td.vtop{vertical-align:top;}body .success{background-color:#6ec461;background-repeat:no-repeat;}body .warning{background-color:#ff1;background-repeat:no-repeat;}body .error{background-color:#c30;background-repeat:no-repeat;}body .error li{color:#fff;}body .error li p,body .error li li{margin:0;padding:0;}span.error,span.success,strong.error,strong.success{color:#fff;padding:1px 5px;}span.error a{color:#fff;}span.warning{padding:2px 5px;}span.error_highlight input,span.error_highlight textarea,span.error_highlight select{border:2px solid #c30;}.change{background:#ffe;}.delete{color:#c30;font-weight:bold;}a.delete{color:#c30;display:block;float:left;margin-top:10px;border:1px solid #ccc;padding:5px;}a.btn{border:1px solid #ccc;height:27px;line-height:27px;display:block;padding:0 15px 0 15px;float:left;}div.btn{border:1px solid #ccc;float:left;list-style:none;margin:0;padding:0 15px 0 0px;line-height:27px;}.btn input,.btn .button{border:none;height:19px;}a.btn,div.btn,.btn input,.btn .button{background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whitesmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,whitesmoke 0%,#cfd1cf 100%);}.update_notice{background:#FFFBCC;border:1px solid #E6DB55;margin-bottom:10px;padding:4px 5px;}.update_notice a{font-style:italic;text-decoration:underline;}.update_notice a:hover{text-decoration:none;}.repeatable{background-color:#fdfdfd;position:relative;padding:10px;border:1px solid #eee;margin:0 10px 10px 0;min-width:300px;}.repeatable .grabber{min-height:10px;overflow:hidden;margin:0 auto 10px auto !important;padding-right:60px !important;background:transparent url(../images/markitup/handle.png) no-repeat center center;cursor:move;}.repeatable .remove{position:absolute;top:15px;right:15px;}.repeatable td>.remove{position:static;}.add_another{padding:10px;float:left;}.repeatable.ui-sortable-helper{-moz-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);-webkit-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);}.repeatable_container.repeatable_container_condensed .repeatable{margin:0;padding:1px 5px;}.repeatable_container.repeatable_container_condensed .repeatable .grabber{float:left;}.repeatable_container.non_sortable .grabber{display:none;}.MultiFile-remove{line-height:22px;padding:0 3px;border:1px solid #ccc;background-color:#f9f9f9;}.tDnD_whileDrag{background-color:#ff1 !important;}.overwrite_field{margin-top:3px;}.overwrite_field input{margin-top:6px;}fieldset.tab{display:none;}fieldset.tab fieldset{display:block;}fieldset.collapsible legend{cursor:pointer;}div#fuel_footer{font-size:9px;position:absolute;left:0px;bottom:0px;right:0px;text-align:center;color:#ccc;padding:3px;height:14px;}div#fuel_footer a{color:#fff;}div#fuel_boilerplate{line-height:12px;}div#fuel_body{}div#fuel_top{z-index:2;line-height:28px;height:30px;background-color:#393939;color:#fff;padding:0 10px;color:#fff;text-shadow:#444 0px 1px 0px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#5d5d5d),color-stop(1,#393939));background:-moz-linear-gradient(top center,#5d5d5d 0%,#393939 100%);}div#fuel_top a:hover{text-decoration:underline;}h1#fuel_site_name{float:left;font-size:18px;width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}h1#fuel_site_name a{color:#999;text-shadow:#111 0px -1px 0px;text-decoration:none;}h1#fuel_site_name a:hover{color:#aaa;text-decoration:none;}div#fuel_left_panel{z-index:1;position:absolute;top:30px;left:0px;bottom:0px;width:200px;background-color:#333;overflow:auto;border-right:1px solid #292929;overflow-x:hidden;-moz-box-shadow:inset -5px 5px 20px 5px #2f2f2f;-webkit-box-shadow:inset -5px 5px 20px 5px #2f2f2f;box-shadow:inset -5px 5px 20px 5px #2f2f2f;}div#fuel_left_panel a{color:#999;text-decoration:none;text-shadow:#000 0px 1px 0px;display:block;overflow:hidden;text-overflow:ellipsis;width:130px;}div#fuel_left_panel a:hover{color:#bbb;text-decoration:underline;}div#fuel_left_panel_inner{padding:10px;text-shadow:#000 0px 1px 0px;}div#fuel_left_panel_inner h3{margin:0;cursor:pointer;font-size:11px;color:#999;text-transform:uppercase;background:transparent url(../images/toggle_arrow_down.png) no-repeat 0px 3px;padding-left:15px;margin-bottom:2px;}div#fuel_left_panel_inner h3.closed{background-image:url(../images/toggle_arrow_right.png);background-position:1px 3px;}div#fuel_left_panel_inner li{list-style:none;margin:0 -15px 0 -20px;padding:0 30px 0 30px;width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}div#fuel_left_panel_inner li.active{background:transparent url(../images/leftnav_on.png) repeat-x;color:#fff;}div#fuel_left_panel_inner li.active a{color:#fff;text-shadow:#555 0px 1px 0px;}div#fuel_left_panel_inner li ul li a{margin-left:15px;}div#fuel_left_panel_inner li.active ul li.active{background:none;}div#fuel_left_panel_inner li.active ul li a{color:#333;text-decoration:none;text-shadow:#fff 0px 1px 0px;background:none;}div#fuel_left_panel_inner li.active ul li.active a{text-decoration:underline;}.ico{display:block;padding-left:24px;list-style:none;background-position:5px 2px;background-repeat:no-repeat;line-height:20px;background-image:url(../images/fuel_icons.png);min-width:16px;min-height:16px;}h2.ico{margin-top:5px;line-height:21px !important;}.ico_activate,.ico_publish{background-position:5px -1071px;}.ico_assets{background-position:5px -1478px;}.ico_blocks{background-position:5px -109px;}.ico_cancel,.ico_error,.ico_no,.ico_remove_line{background-position:5px -220px;}.ico_categories{background-position:5px -553px;}.ico_create{background-position:5px -923px;}.ico_dashboard{background-position:5px -664px;}.ico_deactivate,.ico_unpublish{background-position:5px -1145px;}.ico_delete{background-position:5px -997px;}.ico_duplicate{background-position:5px -960px;}.ico_export{background-position:5px -1034px;}.ico_fuel{background-position:5px -590px;}.ico_info{background-position:15px -737px;}.ico_logs{background-position:5px -183px;}.ico_manage_cache{background-position:5px -1108px;}.ico_menu{background-position:5px -2014px;}.ico_module,.ico_other{background-position:5px -368px;}.ico_navigation{background-position:5px -1515px;}.ico_navigation_download{background-position:5px -1997px;}.ico_navigation_group{background-position:5px -294px;}.ico_notes{background-position:5px -886px;}.ico_pages{background-position:5px -812px;}.ico_pages_upload,.ico_navigation_upload,.ico_blocks_upload{background-position:5px -1293px;}.ico_permissions{background-position:5px -775px;}.ico_precedence{background-position:5px -1737px;}.ico_refresh{background-position:5px -146px;}.ico_remove_line{float:right;}.ico_replace{background-position:5px -1182px;}.ico_save{background-position:5px -442px;}.ico_select_all{background-position:5px -1330px;}.ico_settings{background-position:5px -1700px;}.ico_sitevariables{background-position:5px -1219px;}.ico_success,.ico_yes{background-position:5px -332px;}.ico_table{background-position:5px -1663px;width:16px;height:16px;}.ico_tags{background-position:5px -1774px;}.ico_tools{background-position:5px -1959px;}.ico_tree{background-position:5px -1885px;}.ico_view{background-position:5px -849px;}.ico_view_all{background-image:none;line-height:22px;padding-left:5px;}.ico_users{background-position:5px -1589px;}.ico_users_send_email{background-position:5px -482px;}.ico_warn{background-position:15px -516px;}.notification .ico_success,.notification .ico_yes{background-position:15px -330px;}.notification .ico_error{background-position:15px -220px;}div#fuel_main_panel{position:absolute;top:0;left:201px;right:0px;bottom:0px;background-color:#fff;-webkit-transition:all 0.2s cubic-bezier(0.445,0,0,1);-moz-transition:all 0.2s cubic-bezier(0.445,0,0,1);-ms-transition:all 0.2s cubic-bezier(0.445,0,0,1);-o-transition:all 0.2s cubic-bezier(0.445,0,0,1);transition:all 0.2s cubic-bezier(0.445,0,0,1);}#nav_toggle{opacity:0.9;}#nav_toggle{position:absolute;left:182px;top:0;font-size:1.3em;color:#fff;opacity:0.5;cursor:pointer;display:block;padding-left:25px;background:url(../images/icons/ico_nav_list.png) no-repeat left center;background-size:50%;text-indent:-10000px;}.nav_hide div#fuel_main_panel,div#fuel_left_panel{top:30px;left:0px;}body.nav_hide{overflow:hidden;width:100%;display:block;position:relative;}body.nav_hide,div#fuel_main_panel{min-width:700px;}.nav_hide div#fuel_top{height:30px;line-height:30px;}.nav_hide div#fuel_left_panel{left:-201px;z-index:50;-webkit-transform:translateX(201px);-moz-transform:translateX(201px);-ms-transform:translateX(201px);-o-transform:translateX(201px);transform:translateX(201px);}.nav_hide div#fuel_main_panel{left:0px;z-index:100;}.nav_hide h1#fuel_site_name{width:auto;display:block;float:none;padding:0 100px 0 85px;text-align:center;}.nav_hide div#fuel_left_panel_inner li.active{-webkit-background-size:auto 100%;background-size:auto 100%;}.nav_hide #nav_toggle{position:absolute;left:15px;top:0;font-size:1.3em;color:#fff;opacity:0.5;cursor:pointer;display:block;padding-left:20px;background-size:27%;text-indent:0;}.nav_hide div#fuel_main_panel{-webkit-transform:translateX(0px);-moz-transform:translateX(0px);-ms-transform:translateX(0px);-o-transform:translateX(0px);transform:translateX(0px);}@media only screen and (min-device-width:768px) and (max-device-width:1024px) {div#fuel_left_panel a{font-size:1.2em;line-height:2em;}}@media only screen and (min-device-width:320px) and (max-device-width:480px) {div#fuel_left_panel a{font-size:1.2em;line-height:2em;}}div#fuel_main_top_panel{height:29px;font-size:13px;color:#fff;background-color:#e7e7e7;border-bottom:1px solid #ccc;overflow:hidden;}div#fuel_main_top_panel h2{color:#333;text-shadow:#fff 0px 1px 0px;line-height:30px;margin-left:11px;}div#fuel_main_top_panel h2 a{color:#0E3E7E;}div#fuel_main_top_panel li{float:left;display:block;list-style:none;line-height:29px;font-weight:bold;border-right:1px solid #6e6e6e;}div#fuel_main_top_panel li a{display:block;color:#fff;text-shadow:#555 0px 1px 0px;background:#6d6d6d url(../images/tab.png) repeat-x;padding:0 15px;}div#fuel_main_top_panel li a:hover{background:#7c7c7c url(../images/tab.png) repeat-x 0 -29px;}div#fuel_main_top_panel li.active a{background:#e7e7e7 url(../images/tab.png) repeat-x 0 -58px;color:#113556;text-shadow:#fff 0px 1px 0px;}div#fuel_login_logout{position:absolute;top:8px;right:15px;font-size:11px;color:#333;background-color:#e7e7e7;height:21px;text-shadow:#fff 0px 1px 0px;}div#fuel_actions{height:46px;border-bottom:1px solid #b6b6b6;position:relative;min-width:680px;background:#eee;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whiteSmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,#f6f6f6 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6',endColorstr='#dddddd');}div#fuel_main_content{overflow:auto;position:absolute;top:99px;left:0px;right:0px;bottom:0px;}div#fuel_main_content .buttonbar li,#fuel_main_content_compact .buttonbar li{margin-right:15px;}div#fuel_main_content_inner h3{background-color:#f6f6f6;padding:5px;margin-bottom:10px;}div#fuel_main_content_inner{padding:15px 37px;}div#fuel_main_content_inner .bullets{margin-left:15px;}div.noactions{top:51px !important;}div.notitlebar{top:69px !important;}div.noactions_notitlebar{top:22px !important;}div.noactions_nonotification{top:30px !important;}div#fuel_main_panel_compact{position:absolute;top:0px;left:0px;right:0px;bottom:0px;background-color:#fff;}div#fuel_main_content_compact{background-color:#fff;overflow:auto;position:absolute;top:99px;left:0px;right:0px;bottom:0px;}div.dashboard_pod{float:left;margin-right:10px}div.dashboard_module{float:left;margin-right:10px;margin-top:10px;}div#filters{position:absolute;right:15px;top:12px;}a#multi_delete{display:block;}.adv_search{position:absolute;min-width:360px;background:white;border:1px solid #b6b6b6;z-index:1000;left:-120px;padding:10px 15px;display:none;-moz-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.3);box-shadow:2px 2px 10px 1px rgba(0,0,0,0.3);}}.adv_search .more_filters{max-height:500px;overflow-y:auto;}.adv_search .more_filters div div{float:none;overflow:hidden;margin-bottom:7px;}.adv_search .label{width:100px;}.adv_search input[type="text"]{max-width:217px;}.search_input{position:relative;}#search_term.advanced{padding-right:15px;}.search_input #adv-search-btn{position:absolute;right:4px;top:5px;padding-top:5px;height:10px;background-color:#fff;}div#other_items{float:left;margin:2px 20px 0px 20px;}div#other_items select{max-width:250px;}div#action_btns{position:absolute;top:9px;left:15px;height:29px;overflow:hidden;}div.buttonbar ul{height:27px;float:left;}div.buttonbar li{border-top:1px solid #ccc;border-left:1px solid #b9b9b9;border-bottom:1px solid #b9b9b9;float:left;list-style:none;margin:0;background:#e6e6e6 url(../images/btn.png) repeat-x;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#ddd));background:-moz-linear-gradient(top center,#fff 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#dddddd');}div.buttonbar li:hover{background-position:0 -27px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#eee));background:-moz-linear-gradient(top center,#fff 0%,#eee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#eeeeee');-moz-box-shadow:inset 0 0 5px #ddd;-webkit-box-shadow:inset 0 0 5px #ddd;box-shadow:inner 0 0 5px #ddd;}div.buttonbar li.active{background-position:0 -54px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ddd),color-stop(1,#fff));background:-moz-linear-gradient(top center,#ddd 0%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dddddd',endColorstr='#ffffff');}div.buttonbar li.active a{color:#000;}div.buttonbar li a{color:#0e3e7e;height:22px;line-height:20px;display:block;padding:0 11px 1px 26px;margin-top:4px;}div.buttonbar li.spacer,li.unattached{margin-left:10px;}div.buttonbar li:last-child,li.unattached{border-right:1px solid #b9b9b9;}div.buttonbar li.end{border-right:1px solid #b9b9b9;}div.buttonbar li:first-child,div.buttonbar li.unattached{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px;}div.buttonbar li:last-child,div.buttonbar li.unattached{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;}div.buttonbar li.start{border-left:1px solid #b9b9b9;}div.save_cancel{height:35px;}div.save_cancel li{margin:5px 3px;}div.form_tabs li{padding:5px 15px;list-style:none;margin:0 3px 0 0;border-left:1px solid #eee;border-right:1px solid #eee;border-top:1px solid #eee;text-align:center;float:left;font-weight:bold;background-color:#ffffff;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}div.form_tabs li.active{background-color:#eee;}div.form_tabs li.active a{color:#333;}div.boxbuttons li{float:left;display:block;list-style:none;width:110px;height:60px;border:1px solid #ccc;margin-bottom:15px;margin-right:15px;}div.boxbuttons li a{display:block;text-align:center;padding:10px 5px 5px 5px;width:100px;height:45px;background-color:#fff;}div.boxbuttons li a:hover{background-color:#f6f6f6;}div.boxbuttons li i{display:block;padding:0;margin:auto;width:21px;height:22px;padding-right:5px;}div#fuel_notification{height:21px;border-bottom:1px solid #ccc;background-color:#ecf1f5;text-overflow:ellipsis;overflow:hidden;position:relative;}div.notification p,div.notification div,div.notification ul{margin:0;min-height:15px;line-height:15px;padding:3px 0 3px 35px;list-style:none;background-repeat:no-repeat;list-style:none;}div.notification .ico{line-height:15px;}div#pagination{position:absolute;z-index:1;right:0px;top:-3px;text-align:right;padding-right:25px;}div#pagination a{line-height:21px;padding:0 3px;border:1px solid #ccc;background-color:#f9f9f9;}div#pagination a:hover{background-color:#fdfdfd;}div#pagination b{color:#fff;background-color:#4f7193;line-height:21px;padding:0 3px;border:1px solid #ccc;}div#module_description{border-bottom:1px solid #ccc;background-color:#f6f6f6;padding:15px;}div#module_description p{margin:0;}div#table_loader{position:absolute;top:20px;left:50%;margin-left:-25px;z-index:2;}div#data_table_container{padding:6px 0;}#data_table .publish_hover:hover .publish_action{display:inline;}#data_table .publish_hover:hover .publish_text{display:none;}table#data_table.rearrange tr:hover td{cursor:move !important;background-color:#ffe !important;}table.data{width:98%;margin:0px auto;}table.data th{padding:0 20px 0 0;white-space:nowrap;}table.data td{padding:5px 20px;border-top:1px solid #fff;white-space:nowrap;max-width:300px;text-overflow:ellipsis;overflow:hidden;}table.data th.on,table.data th.on a{color:#4f7193;}table.data th a{text-decoration:underline;}table.data th a,table.data th span{color:#333;display:block;line-height:22px;padding:0 0 0 20px;width:100%;border-left:1px solid #fff;}table.data th.asc a{background:transparent url(../images/th_arrow_asc.png) no-repeat 5px center;}table.data th.desc a{background:transparent url(../images/th_arrow_desc.png) no-repeat 5px center;}table.data th{text-align:left;}table.data td.next_last{width:100%;}table.data td.actions{text-align:right;white-space:nowrap;padding-left:5px;}table.data tr.rowaction:hover td{background-color:#edf2f7 !important;cursor:pointer;}table.data th.col1{min-width:200px;}table.data tr.alt{background-color:#f3f3f3;}div.nodata{text-align:center;padding:10px 0 15px 0;}span.publish_col{width:100px;display:block;cursor:pointer !important;}.form{border:none;border-spacing:0;display:table;}.form td.label{padding:6px 15px 0 0;font-weight:bold;vertical-align:top;}.form td.value{padding:3px 0;white-space:nowrap;}.form td.required{padding-top:10px;}div.more_filters{padding-left:10px;}div.more_filters span.label{float:left;padding-top:6px;}div.more_filters span.field{float:left;display:block;padding:0 0 0 5px;}div.more_filters div div{float:left;margin-right:10px;}div#tree_container{padding:16px 15px;}div#tree_loader{position:absolute;top:20px;left:50%;margin-left:-25px;z-index:2;}div#login{padding:15% 0 0 0;border:none;background-color:transparent;margin:0 auto;}div#login h3,div#login p{color:#fff;text-align:center;}div#login form{width:270px;margin:0 auto;}div#login input{background-color:#1d1d1d;color:#fff;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;border:2px solid #444;height:40px;width:270px;padding:0 1em;}.login_logo{background:transparent url(../images/fuel_logo.png) no-repeat;background-size:100%;width:233px;height:46px;overflow:hidden;margin:0 auto 1.5em auto;}div#login::-webkit-input-placeholder{color:#999;}div#login:-moz-placeholder{color:#999;}div#login:-ms-input-placeholder{color:#999;}div#login input[type="submit"]{background:#3dbfd9 !important;color:#fff;font-size:20px;text-shadow:none;}div#login_notification{text-overflow:ellipsis;overflow:hidden;width:440px;margin:auto;}a#forgotten_pwd{text-align:center;display:block;padding-top:15px;padding-left:20px;color:#999;}a.modal_close{position:absolute;left:-11px;top:-11px;z-index:10;background:transparent url(../images/x_close.png) no-repeat center center;width:23px;height:23px;text-indent:-10000px;overflow:hidden;}div.modal_content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#fff;width:100%;height:100%; overflow:hidden;}div.modal_content iframe{width:100% !important;}div.modal_content_inner{padding:10px 20px;}div#asset_preview{height:275px;width:740px;overflow:auto;text-align:center;margin:10px 0 20px 0;}div.asset_select > div > div{float:left;}div.asset_select span.label{padding:0 5px 0 15px;}div.asset_select div.actions{padding-top:50px;float:left;}div.img_crop{max-width:400px;max-height:200px;overflow:auto;}div#yes_no_modal{text-align:center;margin:0;}div#yes_no_modal ul{float:none;}div#yes_no_modal li{display:inline-block;margin-right:5px;float:none;}div#__FUEL_modal__{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:98%;max-width:864px;margin-left:-425px;max-height:508px;background-color:#fff;}div#__FUEL_modal__ .add_inline_button,div#__FUEL_modal__ .edit_inline_button{display:none;}a.btn_field_right{display:block;float:right;margin-bottom:5px;margin-right:3px;}div.img_display{float:right;overflow:auto;height:120px;width:300px;}div.viewpage_modal{top:16px;border:2px solid #666;background-color:#fff;height:96% !important;width:96% !important;max-width:96% !important;max-height:96% !important;padding:0;display:none;}div#viewpage_btns{position:absolute;z-index:1;top:-17px;right:-2px;}a.viewpage_btn{float:left;margin-right:2px;color:#ccc;background-color:#666;padding:1px 5px;}a#viewpage_close{right:0px;}a#viewpage_new_page{right:100px;}iframe#viewpage_iframe{border:none;width:100%;height:100%;}input#Save,input.submit{margin-top:10px;width:150px;text-align:center;}input#Cancel,input.cancel{margin-top:10px;margin-right:10px;width:60px;text-align:center;}div#tooltip h3{font-size:11px;font-weight:normal;}a.btn_field{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;line-height:12px;border:1px solid #ccc;padding:3px 5px 3px 5px;background:#eee url(../images/btn.png) repeat-x;}a.btn_field:hover{background-position:0 -27px;}a#back_to{margin-bottom:20px;display:block;}.hidden_form{visibility:hidden;height:0px;overflow:hidden;}div#related_items{float:right;width:210px;background-color:#ecf1f5;border-left:1px solid #ccc;border-bottom:1px solid #ccc;padding:10px;}div#related_items h3{background-color:transparent;padding-left:24px;margin-top:5px;}div#related_items li{list-style:none;padding-left:5px;margin:5px 0;}div#related_items select{max-width:212px;}div#related_items .layout_preview{max-width:210px;margin:10px auto;}a.reset{display:block;width:16px;height:16px;background:transparent url(../images/fuel_icons.png) no-repeat 0px -146px;margin-right:5px;}div.perms_list ul ul{margin:10px;}div.perms_list ul li{margin:8px 0 8px;list-style:none;display:block;}div.perms_list ul li input{margin-right:2px;}div.perms_list ul ul li{margin:8px 0 8px 10px;}div.perms_list label{font-weight:bold;}.match_class{display:block;position:absolute;z-index:10;margin-bottom:0px;min-height:30px;}.match_class span{display:inline-block;cursor:pointer;padding:3px;background-color:#fcfce6;border:1px solid #ccc;margin:3px 0 3px 3px;}.multi_field{margin-bottom:10px;display:inline-block;padding-top:2px;}.cke_top{min-width:565px !important;}.cke_button__fuellink_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -528px !important;}.cke_button__fuelunlink_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -552px !important;}.cke_button__fuelimage_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -360px !important;}#codeigniter_profiler{position:absolute;bottom:0;left:200px;height:300px;overflow:auto;} \ No newline at end of file +.jqmWindow{display:none;position:fixed;top:50px;left:50%;margin-left:-202px;color:#333;width:400px;border:2px solid #666;z-index:300000;background-color:#fff;word-wrap:break-word;border:1px solid #ccc;display:none;-moz-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);}.jqmOverlay{background-color:#000;}* iframe.jqm{position:absolute;top:0;left:0;z-index:-1;width:expression(this.parentNode.offsetWidth+'px');height:expression(this.parentNode.offsetHeight+'px');}* html .jqmWindow{position:absolute;top:expression((document.documentElement.scrollTop || document.body.scrollTop) + Math.round(8 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px');}#__fuel_tooltip__{position:absolute;z-index:1000000;border:1px solid #ccc;background-color:#ffffcc;padding:3px;font-size:10px !important;font-weight:normal;width:200px;color:#333;}#__fuel_tooltip__ h3,#__fuel_tooltip__ div{margin:0;font-size:11px !important;font-weight:bold;}.treeview,.treeview ul{padding:0;margin:0;list-style:none;}.treeview ul{background-color:white;margin-top:4px;}.treeview .hitarea{background:url(../images/treeview/treeview-default.gif) -64px -25px no-repeat;height:16px;width:16px;margin-left:-16px;float:left;cursor:pointer;}* html .hitarea{display:inline;float:none;}.treeview li{margin:0;padding:3px 0pt 3px 16px;}.treeview a.selected{background-color:#eee;}#treecontrol{margin:1em 0;display:none;}.treeview .hover{cursor:pointer;}.treeview li{background:url(../images/treeview/treeview-default-line.gif) 0 0 no-repeat;}.treeview li.collapsable,.treeview li.expandable{background-position:0 -176px;}.treeview .expandable-hitarea{background-position:-80px -3px;}.treeview li.last{background-position:0 -1766px}.treeview li.lastCollapsable,.treeview li.lastExpandable{background-image:url(../images/treeview/treeview-default.gif);}.treeview li.lastCollapsable{background-position:0 -111px}.treeview li.lastExpandable{background-position:-32px -67px}.treeview div.lastCollapsable-hitarea,.treeview div.lastExpandable-hitarea{background-position:0;}.treeview-red li{background-image:url(../images/treeview/treeview-red-line.gif);}.treeview-red .hitarea,.treeview-red li.lastCollapsable,.treeview-red li.lastExpandable{background-image:url(../images/treeview/treeview-red.gif);}.treeview-black li{background-image:url(../images/treeview/treeview-black-line.gif);}.treeview-black .hitarea,.treeview-black li.lastCollapsable,.treeview-black li.lastExpandable{background-image:url(../images/treeview/treeview-black.gif);}.treeview-gray li{background-image:url(../images/treeview/treeview-gray-line.gif);}.treeview-gray .hitarea,.treeview-gray li.lastCollapsable,.treeview-gray li.lastExpandable{background-image:url(../images/treeview/treeview-gray.gif);}.treeview-famfamfam li{background-image:url(../images/treeview/treeview-famfamfam-line.gif);}.treeview-famfamfam .hitarea,.treeview-famfamfam li.lastCollapsable,.treeview-famfamfam li.lastExpandable{background-image:url(../images/treeview/treeview-famfamfam.gif);}.filetree li{padding:3px 0 2px 16px;}.filetree span.folder,.filetree span.file{padding:1px 0 1px 16px;display:block;}.filetree span.folder{background:url(../images/treeview/folder.gif) 0 0 no-repeat;}.filetree li.expandable span.folder{background:url(../images/treeview/folder-closed.gif) 0 0 no-repeat;}.filetree span.file{background:url(../images/treeview/file.gif) 0 0 no-repeat;}.supercomboselect_wrapper{position:relative;width:655px;height:220px;float:left;}.supercomboselect_left,.supercomboselect_right{position:absolute;top:0px;z-index:2;width:300px;}.supercomboselect_left{left:0px;}.supercomboselect_right{right:0px;}.supercomboselect_btns{position:absolute;left:50%;top:30%;margin-left:-20px !important;width:40px;text-align:center;z-index:1;}.supercomboselect_btns input{display:block;width:40px;margin:auto;margin-top:3px;}.supercomboselect{height:180px;overflow-y:auto;overflow-x:hidden;border:1px solid #ccc;background-color:#fff;}.supercomboselect ul{margin:0;padding:0;cursor:pointer;}.supercomboselect li{-moz-user-select:none;background-color:#fff;margin:0;padding:3px 20px 3px 10px;border-bottom:1px solid #ddd;list-style:none;display:block;overflow:hidden;text-overflow:ellipsis;}.supercomboselect li.selected{background-color:#ffc;}.supercomboselect_search{margin-top:3px;}.supercomboselect_search_text{width:294px;}.supercomboselect_empty_msg{padding:80px 5px 5px 5px;text-align:center;font-weight:bold;color:#ccc;}.supercomboselect_search_highlight{background-color:#ffff99;}.supercomboselect li.ui-sortable-helper{border:1px solid #ddd;}.supercomboselect ul.ui-sortable li{background-image:url(../images/icons/ico_sortable.png);background-repeat:no-repeat;background-position:left center;padding-left:16px;}.supercomboselect li.option_disabled{background-color:#eee;color:#999;}.supercomboselect li.optgrp{background:#DDD;cursor:default;font-weight:bold;padding-left:5px;}.markItUpButton a{background:transparent url(../images/markitup/markitup_icons.png) no-repeat;}.markItUp .bold a{background-position:0 0;}.markItUp .italic a{background-position:0 -456px;}.markItUp .stroke a{background-position:0 -906px;}.markItUp .p a{background-position:0 -792px;}.markItUp .h1 a{background-position:0 -152px;}.markItUp .h2 a{background-position:0 -190px;}.markItUp .h3 a{background-position:0 -228px;}.markItUp .h4 a{background-position:0 -266px;}.markItUp .h5 a{background-position:0 -304px;}.markItUp .h6 a{background-position:0 -342px;}.markItUp .ol a{background-position:0 -570px;}.markItUp .ul a{background-position:0 -1010px;}.markItUp .li a{background-position:0 -532px;}.markItUp .image a{background-position:0 -830px;}.markItUp .link a{background-position:0 -494px;}.markItUp .mailto a{background-position:0 -114px;}.markItUp .clean a{background-position:0 -38px;}.markItUp .preview a{background-position:0 -868px;}.markItUp .help a{background-position:0 -380px;}.markItUp .fuel_var a{background-position:0 -717px;}.markItUp .blockquote a{background-position:0 -76px;}.markItUp .hr a{background-position:0 -976px;}.markItUp .maximize a{background-position:0 -608px;}.markItUp .minimize a{background-position:0 -679px;}.markItUp *{margin:0px;padding:0px;outline:none;}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none;}.markItUp{min-width:550px;margin:5px 0 5px 0;}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif;}.markItUpEditor{font:11px 'Courier New',Courier,monospace;padding-left:5px;width:520px;height:230px;clear:both;display:block;line-height:18px;overflow:auto;border:1px solid #ccc;}.markItUpPreviewFrame{overflow:auto;background-color:#FFFFFF;width:100%;height:280px;margin:5px 0;border:1px solid #ccc;}.markItUpFooter{width:100%;}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin:0 auto 0px auto !important;background-image:url(../images/markitup/handle.png);cursor:n-resize;}.markItUpHeader ul li{list-style:none;float:left;position:relative;padding-top:5px;}.markItUpHeader ul li:hover > ul{display:block;}.markItUpHeader ul .markItUpDropMenu{background:transparent url(../images/markitup/menu.png) no-repeat 115% 50%;margin-right:5px;}.markItUpHeader ul .markItUpDropMenu li{margin-right:0px;}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0px;background:#FFF;border:1px solid #000;}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000;}.markItUpHeader ul ul .markItUpDropMenu{background:#FFF url(../images/markitup/submenu.png) no-repeat 100% 50%;}.markItUpHeader ul .markItUpSeparator{margin:0 10px;width:1px;height:16px;overflow:hidden;background-color:#CCC;}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0px;}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px;}.markItUpHeader ul ul ul li{float:none;}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0px;}.markItUpHeader ul ul a{display:block;padding-left:0px;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%;}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000;}.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute !important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;}.ui-helper-clearfix:after{clear:both;}.ui-helper-clearfix{zoom:1;}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default !important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#222222;}.ui-widget-content a{color:#222222;}.ui-widget-header{border:1px solid #aaaaaa;background:#cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222222;font-weight:bold;}.ui-widget-header a{color:#222222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget:active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0 !important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0 !important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none !important;}.ui-datepicker{width:15em;padding:.1em .1em 0;display:none;z-index:999999 !important;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.8em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .4em .3em .4em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker-trigger{cursor:pointer;margin:0 3px -2px 0;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none; display:block; position:absolute; z-index:-1; filter:mask(); top:-4px; left:-4px; width:200px; height:200px;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}.jqmWindow{display:none;position:fixed;top:50px;left:50%;margin-left:-202px;color:#333;width:400px;border:2px solid #666;z-index:300000;background-color:#fff;word-wrap:break-word;border:1px solid #ccc;display:none;-moz-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);box-shadow:1px 0px 5px 1px rgba(0,0,0,0.3);}.jqmOverlay{background-color:#000;}* iframe.jqm{position:absolute;top:0;left:0;z-index:-1;width:expression(this.parentNode.offsetWidth+'px');height:expression(this.parentNode.offsetHeight+'px');}* html .jqmWindow{position:absolute;top:expression((document.documentElement.scrollTop || document.body.scrollTop) + Math.round(8 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px');}#__fuel_tooltip__{position:absolute;z-index:1000000;border:1px solid #ccc;background-color:#ffffcc;padding:3px;font-size:10px !important;font-weight:normal;width:200px;color:#333;}#__fuel_tooltip__ h3,#__fuel_tooltip__ div{margin:0;font-size:11px !important;font-weight:bold;}.treeview,.treeview ul{padding:0;margin:0;list-style:none;}.treeview ul{background-color:white;margin-top:4px;}.treeview .hitarea{background:url(../images/treeview/treeview-default.gif) -64px -25px no-repeat;height:16px;width:16px;margin-left:-16px;float:left;cursor:pointer;}* html .hitarea{display:inline;float:none;}.treeview li{margin:0;padding:3px 0pt 3px 16px;}.treeview a.selected{background-color:#eee;}#treecontrol{margin:1em 0;display:none;}.treeview .hover{cursor:pointer;}.treeview li{background:url(../images/treeview/treeview-default-line.gif) 0 0 no-repeat;}.treeview li.collapsable,.treeview li.expandable{background-position:0 -176px;}.treeview .expandable-hitarea{background-position:-80px -3px;}.treeview li.last{background-position:0 -1766px}.treeview li.lastCollapsable,.treeview li.lastExpandable{background-image:url(../images/treeview/treeview-default.gif);}.treeview li.lastCollapsable{background-position:0 -111px}.treeview li.lastExpandable{background-position:-32px -67px}.treeview div.lastCollapsable-hitarea,.treeview div.lastExpandable-hitarea{background-position:0;}.treeview-red li{background-image:url(../images/treeview/treeview-red-line.gif);}.treeview-red .hitarea,.treeview-red li.lastCollapsable,.treeview-red li.lastExpandable{background-image:url(../images/treeview/treeview-red.gif);}.treeview-black li{background-image:url(../images/treeview/treeview-black-line.gif);}.treeview-black .hitarea,.treeview-black li.lastCollapsable,.treeview-black li.lastExpandable{background-image:url(../images/treeview/treeview-black.gif);}.treeview-gray li{background-image:url(../images/treeview/treeview-gray-line.gif);}.treeview-gray .hitarea,.treeview-gray li.lastCollapsable,.treeview-gray li.lastExpandable{background-image:url(../images/treeview/treeview-gray.gif);}.treeview-famfamfam li{background-image:url(../images/treeview/treeview-famfamfam-line.gif);}.treeview-famfamfam .hitarea,.treeview-famfamfam li.lastCollapsable,.treeview-famfamfam li.lastExpandable{background-image:url(../images/treeview/treeview-famfamfam.gif);}.filetree li{padding:3px 0 2px 16px;}.filetree span.folder,.filetree span.file{padding:1px 0 1px 16px;display:block;}.filetree span.folder{background:url(../images/treeview/folder.gif) 0 0 no-repeat;}.filetree li.expandable span.folder{background:url(../images/treeview/folder-closed.gif) 0 0 no-repeat;}.filetree span.file{background:url(../images/treeview/file.gif) 0 0 no-repeat;}.supercomboselect_wrapper{position:relative;width:655px;height:220px;float:left;}.supercomboselect_left,.supercomboselect_right{position:absolute;top:0px;z-index:2;width:300px;}.supercomboselect_left{left:0px;}.supercomboselect_right{right:0px;}.supercomboselect_btns{position:absolute;left:50%;top:30%;margin-left:-20px !important;width:40px;text-align:center;z-index:1;}.supercomboselect_btns input{display:block;width:40px;margin:auto;margin-top:3px;}.supercomboselect{height:180px;overflow-y:auto;overflow-x:hidden;border:1px solid #ccc;background-color:#fff;}.supercomboselect ul{margin:0;padding:0;cursor:pointer;}.supercomboselect li{-moz-user-select:none;background-color:#fff;margin:0;padding:3px 20px 3px 10px;border-bottom:1px solid #ddd;list-style:none;display:block;overflow:hidden;text-overflow:ellipsis;}.supercomboselect li.selected{background-color:#ffc;}.supercomboselect_search{margin-top:3px;}.supercomboselect_search_text{width:294px;}.supercomboselect_empty_msg{padding:80px 5px 5px 5px;text-align:center;font-weight:bold;color:#ccc;}.supercomboselect_search_highlight{background-color:#ffff99;}.supercomboselect li.ui-sortable-helper{border:1px solid #ddd;}.supercomboselect ul.ui-sortable li{background-image:url(../images/icons/ico_sortable.png);background-repeat:no-repeat;background-position:left center;padding-left:16px;}.supercomboselect li.option_disabled{background-color:#eee;color:#999;}.supercomboselect li.optgrp{background:#DDD;cursor:default;font-weight:bold;padding-left:5px;}.markItUpButton a{background:transparent url(../images/markitup/markitup_icons.png) no-repeat;}.markItUp .bold a{background-position:0 0;}.markItUp .italic a{background-position:0 -456px;}.markItUp .stroke a{background-position:0 -906px;}.markItUp .p a{background-position:0 -792px;}.markItUp .h1 a{background-position:0 -152px;}.markItUp .h2 a{background-position:0 -190px;}.markItUp .h3 a{background-position:0 -228px;}.markItUp .h4 a{background-position:0 -266px;}.markItUp .h5 a{background-position:0 -304px;}.markItUp .h6 a{background-position:0 -342px;}.markItUp .ol a{background-position:0 -570px;}.markItUp .ul a{background-position:0 -1010px;}.markItUp .li a{background-position:0 -532px;}.markItUp .image a{background-position:0 -830px;}.markItUp .link a{background-position:0 -494px;}.markItUp .mailto a{background-position:0 -114px;}.markItUp .clean a{background-position:0 -38px;}.markItUp .preview a{background-position:0 -868px;}.markItUp .help a{background-position:0 -380px;}.markItUp .fuel_var a{background-position:0 -717px;}.markItUp .blockquote a{background-position:0 -76px;}.markItUp .hr a{background-position:0 -976px;}.markItUp .maximize a{background-position:0 -608px;}.markItUp .minimize a{background-position:0 -679px;}.markItUp *{margin:0px;padding:0px;outline:none;}.markItUp a:link,.markItUp a:visited{color:#000;text-decoration:none;}.markItUp{min-width:550px;margin:5px 0 5px 0;}.markItUpContainer{font:11px Verdana,Arial,Helvetica,sans-serif;}.markItUpEditor{font:11px 'Courier New',Courier,monospace;padding-left:5px;width:520px;height:230px;clear:both;display:block;line-height:18px;overflow:auto;border:1px solid #ccc;}.markItUpPreviewFrame{overflow:auto;background-color:#FFFFFF;width:100%;height:280px;margin:5px 0;border:1px solid #ccc;}.markItUpFooter{width:100%;}.markItUpResizeHandle{overflow:hidden;width:22px;height:5px;margin:0 auto 0px auto !important;background-image:url(../images/markitup/handle.png);cursor:n-resize;}.markItUpHeader ul li{list-style:none;float:left;position:relative;padding-top:5px;}.markItUpHeader ul li:hover > ul{display:block;}.markItUpHeader ul .markItUpDropMenu{background:transparent url(../images/markitup/menu.png) no-repeat 115% 50%;margin-right:5px;}.markItUpHeader ul .markItUpDropMenu li{margin-right:0px;}.markItUpHeader ul ul{display:none;position:absolute;top:18px;left:0px;background:#FFF;border:1px solid #000;}.markItUpHeader ul ul li{float:none;border-bottom:1px solid #000;}.markItUpHeader ul ul .markItUpDropMenu{background:#FFF url(../images/markitup/submenu.png) no-repeat 100% 50%;}.markItUpHeader ul .markItUpSeparator{margin:0 10px;width:1px;height:16px;overflow:hidden;background-color:#CCC;}.markItUpHeader ul ul .markItUpSeparator{width:auto;height:1px;margin:0px;}.markItUpHeader ul ul ul{position:absolute;top:-1px;left:150px;}.markItUpHeader ul ul ul li{float:none;}.markItUpHeader ul a{display:block;width:16px;height:16px;text-indent:-10000px;background-repeat:no-repeat;padding:3px;margin:0px;}.markItUpHeader ul ul a{display:block;padding-left:0px;text-indent:0;width:120px;padding:5px 5px 5px 25px;background-position:2px 50%;}.markItUpHeader ul ul a:hover{color:#FFF;background-color:#000;}.ui-helper-hidden{display:none;}.ui-helper-hidden-accessible{position:absolute !important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none;}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;}.ui-helper-clearfix:after{clear:both;}.ui-helper-clearfix{zoom:1;}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default !important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-widget{font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;font-size:1.1em;}.ui-widget .ui-widget{font-size:1em;}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;font-size:1em;}.ui-widget-content{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#222222;}.ui-widget-content a{color:#222222;}.ui-widget-header{border:1px solid #aaaaaa;background:#cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222222;font-weight:bold;}.ui-widget-header a{color:#222222;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555555;}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555555;text-decoration:none;}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none;}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaaaaa;background:#ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121;}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none;}.ui-widget:active{outline:none;}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636;}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636;}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x;color:#cd0a0a;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a;}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold;}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal;}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none;}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png);}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png);}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png);}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png);}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png);}.ui-icon-carat-1-n{background-position:0 0;}.ui-icon-carat-1-ne{background-position:-16px 0;}.ui-icon-carat-1-e{background-position:-32px 0;}.ui-icon-carat-1-se{background-position:-48px 0;}.ui-icon-carat-1-s{background-position:-64px 0;}.ui-icon-carat-1-sw{background-position:-80px 0;}.ui-icon-carat-1-w{background-position:-96px 0;}.ui-icon-carat-1-nw{background-position:-112px 0;}.ui-icon-carat-2-n-s{background-position:-128px 0;}.ui-icon-carat-2-e-w{background-position:-144px 0;}.ui-icon-triangle-1-n{background-position:0 -16px;}.ui-icon-triangle-1-ne{background-position:-16px -16px;}.ui-icon-triangle-1-e{background-position:-32px -16px;}.ui-icon-triangle-1-se{background-position:-48px -16px;}.ui-icon-triangle-1-s{background-position:-64px -16px;}.ui-icon-triangle-1-sw{background-position:-80px -16px;}.ui-icon-triangle-1-w{background-position:-96px -16px;}.ui-icon-triangle-1-nw{background-position:-112px -16px;}.ui-icon-triangle-2-n-s{background-position:-128px -16px;}.ui-icon-triangle-2-e-w{background-position:-144px -16px;}.ui-icon-arrow-1-n{background-position:0 -32px;}.ui-icon-arrow-1-ne{background-position:-16px -32px;}.ui-icon-arrow-1-e{background-position:-32px -32px;}.ui-icon-arrow-1-se{background-position:-48px -32px;}.ui-icon-arrow-1-s{background-position:-64px -32px;}.ui-icon-arrow-1-sw{background-position:-80px -32px;}.ui-icon-arrow-1-w{background-position:-96px -32px;}.ui-icon-arrow-1-nw{background-position:-112px -32px;}.ui-icon-arrow-2-n-s{background-position:-128px -32px;}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px;}.ui-icon-arrow-2-e-w{background-position:-160px -32px;}.ui-icon-arrow-2-se-nw{background-position:-176px -32px;}.ui-icon-arrowstop-1-n{background-position:-192px -32px;}.ui-icon-arrowstop-1-e{background-position:-208px -32px;}.ui-icon-arrowstop-1-s{background-position:-224px -32px;}.ui-icon-arrowstop-1-w{background-position:-240px -32px;}.ui-icon-arrowthick-1-n{background-position:0 -48px;}.ui-icon-arrowthick-1-ne{background-position:-16px -48px;}.ui-icon-arrowthick-1-e{background-position:-32px -48px;}.ui-icon-arrowthick-1-se{background-position:-48px -48px;}.ui-icon-arrowthick-1-s{background-position:-64px -48px;}.ui-icon-arrowthick-1-sw{background-position:-80px -48px;}.ui-icon-arrowthick-1-w{background-position:-96px -48px;}.ui-icon-arrowthick-1-nw{background-position:-112px -48px;}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px;}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px;}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px;}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px;}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px;}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px;}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px;}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px;}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px;}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px;}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px;}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px;}.ui-icon-arrowreturn-1-w{background-position:-64px -64px;}.ui-icon-arrowreturn-1-n{background-position:-80px -64px;}.ui-icon-arrowreturn-1-e{background-position:-96px -64px;}.ui-icon-arrowreturn-1-s{background-position:-112px -64px;}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px;}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px;}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px;}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px;}.ui-icon-arrow-4{background-position:0 -80px;}.ui-icon-arrow-4-diag{background-position:-16px -80px;}.ui-icon-extlink{background-position:-32px -80px;}.ui-icon-newwin{background-position:-48px -80px;}.ui-icon-refresh{background-position:-64px -80px;}.ui-icon-shuffle{background-position:-80px -80px;}.ui-icon-transfer-e-w{background-position:-96px -80px;}.ui-icon-transferthick-e-w{background-position:-112px -80px;}.ui-icon-folder-collapsed{background-position:0 -96px;}.ui-icon-folder-open{background-position:-16px -96px;}.ui-icon-document{background-position:-32px -96px;}.ui-icon-document-b{background-position:-48px -96px;}.ui-icon-note{background-position:-64px -96px;}.ui-icon-mail-closed{background-position:-80px -96px;}.ui-icon-mail-open{background-position:-96px -96px;}.ui-icon-suitcase{background-position:-112px -96px;}.ui-icon-comment{background-position:-128px -96px;}.ui-icon-person{background-position:-144px -96px;}.ui-icon-print{background-position:-160px -96px;}.ui-icon-trash{background-position:-176px -96px;}.ui-icon-locked{background-position:-192px -96px;}.ui-icon-unlocked{background-position:-208px -96px;}.ui-icon-bookmark{background-position:-224px -96px;}.ui-icon-tag{background-position:-240px -96px;}.ui-icon-home{background-position:0 -112px;}.ui-icon-flag{background-position:-16px -112px;}.ui-icon-calendar{background-position:-32px -112px;}.ui-icon-cart{background-position:-48px -112px;}.ui-icon-pencil{background-position:-64px -112px;}.ui-icon-clock{background-position:-80px -112px;}.ui-icon-disk{background-position:-96px -112px;}.ui-icon-calculator{background-position:-112px -112px;}.ui-icon-zoomin{background-position:-128px -112px;}.ui-icon-zoomout{background-position:-144px -112px;}.ui-icon-search{background-position:-160px -112px;}.ui-icon-wrench{background-position:-176px -112px;}.ui-icon-gear{background-position:-192px -112px;}.ui-icon-heart{background-position:-208px -112px;}.ui-icon-star{background-position:-224px -112px;}.ui-icon-link{background-position:-240px -112px;}.ui-icon-cancel{background-position:0 -128px;}.ui-icon-plus{background-position:-16px -128px;}.ui-icon-plusthick{background-position:-32px -128px;}.ui-icon-minus{background-position:-48px -128px;}.ui-icon-minusthick{background-position:-64px -128px;}.ui-icon-close{background-position:-80px -128px;}.ui-icon-closethick{background-position:-96px -128px;}.ui-icon-key{background-position:-112px -128px;}.ui-icon-lightbulb{background-position:-128px -128px;}.ui-icon-scissors{background-position:-144px -128px;}.ui-icon-clipboard{background-position:-160px -128px;}.ui-icon-copy{background-position:-176px -128px;}.ui-icon-contact{background-position:-192px -128px;}.ui-icon-image{background-position:-208px -128px;}.ui-icon-video{background-position:-224px -128px;}.ui-icon-script{background-position:-240px -128px;}.ui-icon-alert{background-position:0 -144px;}.ui-icon-info{background-position:-16px -144px;}.ui-icon-notice{background-position:-32px -144px;}.ui-icon-help{background-position:-48px -144px;}.ui-icon-check{background-position:-64px -144px;}.ui-icon-bullet{background-position:-80px -144px;}.ui-icon-radio-off{background-position:-96px -144px;}.ui-icon-radio-on{background-position:-112px -144px;}.ui-icon-pin-w{background-position:-128px -144px;}.ui-icon-pin-s{background-position:-144px -144px;}.ui-icon-play{background-position:0 -160px;}.ui-icon-pause{background-position:-16px -160px;}.ui-icon-seek-next{background-position:-32px -160px;}.ui-icon-seek-prev{background-position:-48px -160px;}.ui-icon-seek-end{background-position:-64px -160px;}.ui-icon-seek-start{background-position:-80px -160px;}.ui-icon-seek-first{background-position:-80px -160px;}.ui-icon-stop{background-position:-96px -160px;}.ui-icon-eject{background-position:-112px -160px;}.ui-icon-volume-off{background-position:-128px -160px;}.ui-icon-volume-on{background-position:-144px -160px;}.ui-icon-power{background-position:0 -176px;}.ui-icon-signal-diag{background-position:-16px -176px;}.ui-icon-signal{background-position:-32px -176px;}.ui-icon-battery-0{background-position:-48px -176px;}.ui-icon-battery-1{background-position:-64px -176px;}.ui-icon-battery-2{background-position:-80px -176px;}.ui-icon-battery-3{background-position:-96px -176px;}.ui-icon-circle-plus{background-position:0 -192px;}.ui-icon-circle-minus{background-position:-16px -192px;}.ui-icon-circle-close{background-position:-32px -192px;}.ui-icon-circle-triangle-e{background-position:-48px -192px;}.ui-icon-circle-triangle-s{background-position:-64px -192px;}.ui-icon-circle-triangle-w{background-position:-80px -192px;}.ui-icon-circle-triangle-n{background-position:-96px -192px;}.ui-icon-circle-arrow-e{background-position:-112px -192px;}.ui-icon-circle-arrow-s{background-position:-128px -192px;}.ui-icon-circle-arrow-w{background-position:-144px -192px;}.ui-icon-circle-arrow-n{background-position:-160px -192px;}.ui-icon-circle-zoomin{background-position:-176px -192px;}.ui-icon-circle-zoomout{background-position:-192px -192px;}.ui-icon-circle-check{background-position:-208px -192px;}.ui-icon-circlesmall-plus{background-position:0 -208px;}.ui-icon-circlesmall-minus{background-position:-16px -208px;}.ui-icon-circlesmall-close{background-position:-32px -208px;}.ui-icon-squaresmall-plus{background-position:-48px -208px;}.ui-icon-squaresmall-minus{background-position:-64px -208px;}.ui-icon-squaresmall-close{background-position:-80px -208px;}.ui-icon-grip-dotted-vertical{background-position:0 -224px;}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px;}.ui-icon-grip-solid-vertical{background-position:-32px -224px;}.ui-icon-grip-solid-horizontal{background-position:-48px -224px;}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px;}.ui-icon-grip-diagonal-se{background-position:-80px -224px;}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;}.ui-widget-overlay{background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block;}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none;}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0 !important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-slider{position:relative;text-align:left;}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;}.ui-slider-horizontal{height:.8em;}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;}.ui-slider-horizontal .ui-slider-range{top:0;height:100%;}.ui-slider-horizontal .ui-slider-range-min{left:0;}.ui-slider-horizontal .ui-slider-range-max{right:0;}.ui-slider-vertical{width:.8em;height:100px;}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em;}.ui-slider-vertical .ui-slider-range{left:0;width:100%;}.ui-slider-vertical .ui-slider-range-min{bottom:0;}.ui-slider-vertical .ui-slider-range-max{top:0;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0;}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0 !important;padding:0;white-space:nowrap;}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none !important;}.ui-datepicker{width:15em;padding:.1em .1em 0;display:none;z-index:999999 !important;}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em;}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px;}.ui-datepicker .ui-datepicker-prev{left:2px;}.ui-datepicker .ui-datepicker-next{right:2px;}.ui-datepicker .ui-datepicker-prev-hover{left:1px;}.ui-datepicker .ui-datepicker-next-hover{right:1px;}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px;}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center;}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;}.ui-datepicker select.ui-datepicker-month-year{width:100%;}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%;}.ui-datepicker table{width:100%;font-size:.8em;border-collapse:collapse;margin:0 0 .4em;}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0;}.ui-datepicker td{border:0;padding:1px;}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none;}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0;}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .4em .3em .4em;width:auto;overflow:visible;}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left;}.ui-datepicker-trigger{cursor:pointer;margin:0 3px -2px 0;}.ui-datepicker.ui-datepicker-multi{width:auto;}.ui-datepicker-multi .ui-datepicker-group{float:left;}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em;}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%;}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%;}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%;}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0;}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left;}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em;}.ui-datepicker-rtl{direction:rtl;}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto;}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto;}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto;}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right;}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left;}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none; display:block; position:absolute; z-index:-1; filter:mask(); top:-4px; left:-4px; width:200px; height:200px;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}*{margin:0;padding:0;outline-style:none;}html,body{height:100%;overflow:hidden;}body{background-color:#333;font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;margin:0;padding:0;font-size:11px;color:#333;}h1{font-size:20px;margin-bottom:10px;}h2{font-size:16px;margin-bottom:10px;}h3{font-size:12px;margin:15px 0 3px 0;}a{color:#0e3e7e;text-decoration:none;}img{border:0;max-width:100%;}a:hover{text-decoration:underline;}a:visited{color:#4679bd;}p{margin:5px 0 15px 0;}option{margin:0 2px;}input,select,textarea{font-size:11px;font-family:'Lucida Grande',Verdana,Arial,Helvetica,Sans-serif;}textarea{min-height:40px;overflow:auto;resize:vertical;}ul{margin-bottom:10px;}ul ul{margin:10px;}optgroup{color:#000;font-style:normal;font-weight:normal;}optgroup option{padding-left:10px;}fieldset{border-top:5px solid #eee;border-left:none;border-right:none;border-bottom:none;margin:0;padding:20px 0 10px 0;}legend{padding:5px 30px 5px 5px;font-size:12px;background-color:#eee;font-weight:bold;text-align:left;}iframe{border:none;}::-moz-focus-inner{border:0;padding:0;}input[type="search"]::-webkit-search-decoration{display:none;}input,button,select,textarea{margin:0;}input[type="radio"],input[type="checkbox"]{position:relative;top:1px; top:0\0; *top:-3px;}button,input[type="reset"],input[type="submit"],input[type="button"]{-webkit-appearance:none;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;background:#ddd url(../images/btn.png) repeat-x;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whitesmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,whitesmoke 0%,#cfd1cf 100%);border:1px solid;border-color:#ddd #bbb #999;cursor:pointer;color:#333; font-weight:bold;outline:0;overflow:visible;padding:3px 10px;text-shadow:#fff 0 1px 1px;width:auto; *padding-top:2px;*padding-bottom:0px;}button{ *padding-top:1px;*padding-bottom:1px;}textarea,select,input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-moz-background-clip:padding;-webkit-background-clip:padding;background-clip:padding-box;background-color:#fff;border:1px solid;border-color:#aaa #c1c1c1 #e1e1e1;outline:0;padding:5px 3px 4px 3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px; *padding-top:2px;*padding-bottom:1px;*height:auto;-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);}select{height:25px;line-height:16px;max-width:525px;}::-webkit-input-placeholder{color:#888;}input:-moz-placeholder,textarea:-moz-placeholder{color:#888;}input.placeholder_text,textarea.placeholder_text{color:#888;}:invalid{ -moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}button:focus,button:active,input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active{outline:0;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 3px rgba(0,0,0,0.1),0 0 8px rgba(82,168,236,0.6); z-index:1;}input[type="file"]:focus,input[type="file"]:active,input[type="radio"]:focus,input[type="radio"]:active,input[type="checkbox"]:focus,input[type="checkbox"]:active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}select[disabled],textarea[disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled]{background-color:#eee;}button[disabled],input[disabled],select[disabled],select[disabled] option,select[disabled] optgroup,textarea[disabled]{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:#888;cursor:default;}input[readonly],textarea[readonly],select[readonly]{background-color:transparent;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}textarea,select[size],select[multiple]{height:auto;}input[type="file"]{border:1px dashed #ccc;border-radius:3px;padding:10px;}@media (-webkit-min-device-pixel-ratio:0) {select{background-image:url(../images/select_arrow.gif);background-repeat:no-repeat;background-position:right center;padding-right:20px;}select[size],select[multiple]{background-image:none;padding:0;}::-webkit-validation-bubble-message{box-shadow:rgba(0,0,0,0.5) 0 0 5px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#666),color-stop(1,#000));border:1px solid;border-color:#747474 #5e5e5e #4f4f4f;color:#fff;font:13px/17px 'Lucida Grande',Arial,'Liberation Sans',FreeSans,sans-serif;overflow:hidden;padding:15px 15px 17px;text-shadow:#000 0 0 1px;height:16px;}::-webkit-validation-bubble-arrow,::-webkit-validation-bubble-top-outer-arrow,::-webkit-validation-bubble-top-inner-arrow{-webkit-box-shadow:none;box-shadow:none;background:#666;border:0;}}::-webkit-scrollbar{width:12px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.4);border-radius:10px;}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 3px rgba(140,140,140,0.9);}p.instructions{font-size:14px;line-height:18px;}ul.nobullets{list-style:none;}ul.nobullets li{margin-bottom:2px;}.tooltip{cursor:help;text-decoration:none;border-bottom:1px dotted #0e3e7e;}.fillin{color:#aaa;}.clear{clear:both;height:0;font-size:0px;line-height:0px;}.clearfix:before,.clearfix:after{content:"";display:table;}.clearfix:after{clear:both;}.clearfix{zoom:1;}span.required{color:#c30;}.datepicker_hh{margin-right:2px;}.datepicker_mm{margin:0 5px 0 2px;}.unpublished{color:#b30 !important;}.published{color:#690;}.div_vert{background:transparent url(../images/div_vert.png) repeat-y center center;width:2px;height:36px;padding:0 15px;}.search{padding-left:3px;}.show{padding-left:15px;}.loader{margin:auto;width:32px;height:32px;text-align:center;background:#fff url(../images/spinner.gif) no-repeat center center;}.loader_sm{margin:auto;width:16px;height:16px;text-align:center;background:#fff url(../images/spinner_sm.gif) no-repeat center center !important;}.hidden{display:none;}.float_left{float:left;}.float_right{float:right;}.tiny{font-size:9px;}tr.drag{border:1px solid #ccc !important;background-color:#ffe !important}tr.drag td{cursor:move !important;background-color:#ffe !important;}a.editor_viewsource,a.editor_preview{margin:4px 4px 4px 0;display:block;float:left;height:14px;line-height:14px !important;}td.vtop{vertical-align:top;}body .success{background-color:#6ec461;background-repeat:no-repeat;}body .warning{background-color:#ff1;background-repeat:no-repeat;}body .error{background-color:#c30;background-repeat:no-repeat;}body .error li{color:#fff;}body .error li p,body .error li li{margin:0;padding:0;}span.error,span.success,strong.error,strong.success{color:#fff;padding:1px 5px;}span.error a{color:#fff;}span.warning{padding:2px 5px;}span.error_highlight input,span.error_highlight textarea,span.error_highlight select{border:2px solid #c30;}.change{background:#ffe;}.delete{color:#c30;font-weight:bold;}a.delete{color:#c30;display:block;float:left;margin-top:10px;border:1px solid #ccc;padding:5px;}a.btn{border:1px solid #ccc;height:27px;line-height:27px;display:block;padding:0 15px 0 15px;float:left;}div.btn{border:1px solid #ccc;float:left;list-style:none;margin:0;padding:0 15px 0 0px;line-height:27px;}.btn input,.btn .button{border:none;height:19px;}a.btn,div.btn,.btn input,.btn .button{background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whitesmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,whitesmoke 0%,#cfd1cf 100%);}.update_notice{background:#FFFBCC;border:1px solid #E6DB55;margin-bottom:10px;padding:4px 5px;}.update_notice a{font-style:italic;text-decoration:underline;}.update_notice a:hover{text-decoration:none;}.repeatable{background-color:#fdfdfd;position:relative;padding:10px;border:1px solid #eee;margin:0 10px 10px 0;min-width:300px;}.repeatable .grabber{min-height:10px;overflow:hidden;margin:0 auto 10px auto !important;padding-right:60px !important;background:transparent url(../images/markitup/handle.png) no-repeat center center;cursor:move;}.repeatable .remove{position:absolute;top:15px;right:15px;}.repeatable td>.remove{position:static;}.add_another{padding:10px;float:left;}.repeatable.ui-sortable-helper{-moz-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);-webkit-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);box-shadow:1px 3px 5px 1px rgba(0,0,0,0.1);}.repeatable_container.repeatable_container_condensed .repeatable{margin:0;padding:1px 5px;}.repeatable_container.repeatable_container_condensed .repeatable .grabber{float:left;}.repeatable_container.non_sortable .grabber{display:none;}.MultiFile-remove{line-height:22px;padding:0 3px;border:1px solid #ccc;background-color:#f9f9f9;}.tDnD_whileDrag{background-color:#ff1 !important;}.overwrite_field{margin-top:3px;}.overwrite_field input{margin-top:6px;}fieldset.tab{display:none;}fieldset.tab fieldset{display:block;}fieldset.collapsible legend{cursor:pointer;}div#fuel_footer{font-size:9px;position:absolute;left:0px;bottom:0px;right:0px;text-align:center;color:#ccc;padding:3px;height:14px;}div#fuel_footer a{color:#fff;}div#fuel_boilerplate{line-height:12px;}div#fuel_body{}div#fuel_top{z-index:2;line-height:28px;height:30px;background-color:#393939;color:#fff;padding:0 10px;color:#fff;text-shadow:#444 0px 1px 0px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#5d5d5d),color-stop(1,#393939));background:-moz-linear-gradient(top center,#5d5d5d 0%,#393939 100%);}div#fuel_top a:hover{text-decoration:underline;}h1#fuel_site_name{float:left;font-size:18px;width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}h1#fuel_site_name a{color:#999;text-shadow:#111 0px -1px 0px;text-decoration:none;}h1#fuel_site_name a:hover{color:#aaa;text-decoration:none;}div#fuel_left_panel{z-index:1;position:absolute;top:30px;left:0px;bottom:0px;width:200px;background-color:#333;overflow:auto;border-right:1px solid #292929;overflow-x:hidden;-moz-box-shadow:inset -5px 5px 20px 5px #2f2f2f;-webkit-box-shadow:inset -5px 5px 20px 5px #2f2f2f;box-shadow:inset -5px 5px 20px 5px #2f2f2f;}div#fuel_left_panel a{color:#999;text-decoration:none;text-shadow:#000 0px 1px 0px;display:block;overflow:hidden;text-overflow:ellipsis;width:130px;}div#fuel_left_panel a:hover{color:#bbb;text-decoration:underline;}div#fuel_left_panel_inner{padding:10px;text-shadow:#000 0px 1px 0px;}div#fuel_left_panel_inner h3{margin:0;cursor:pointer;font-size:11px;color:#999;text-transform:uppercase;background:transparent url(../images/toggle_arrow_down.png) no-repeat 0px 3px;padding-left:15px;margin-bottom:2px;}div#fuel_left_panel_inner h3.closed{background-image:url(../images/toggle_arrow_right.png);background-position:1px 3px;}div#fuel_left_panel_inner li{list-style:none;margin:0 -15px 0 -20px;padding:0 30px 0 30px;width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}div#fuel_left_panel_inner li.active{background:transparent url(../images/leftnav_on.png) repeat-x;color:#fff;}div#fuel_left_panel_inner li.active a{color:#fff;text-shadow:#555 0px 1px 0px;}div#fuel_left_panel_inner li ul li a{margin-left:15px;}div#fuel_left_panel_inner li.active ul li.active{background:none;}div#fuel_left_panel_inner li.active ul li a{color:#333;text-decoration:none;text-shadow:#fff 0px 1px 0px;background:none;}div#fuel_left_panel_inner li.active ul li.active a{text-decoration:underline;}.ico{display:block;padding-left:24px;list-style:none;background-position:5px 2px;background-repeat:no-repeat;line-height:20px;background-image:url(../images/fuel_icons.png);min-width:16px;min-height:16px;}h2.ico{margin-top:5px;line-height:21px !important;}.ico_activate,.ico_publish{background-position:5px -1071px;}.ico_assets{background-position:5px -1478px;}.ico_blocks{background-position:5px -109px;}.ico_cancel,.ico_error,.ico_no,.ico_remove_line{background-position:5px -220px;}.ico_categories{background-position:5px -553px;}.ico_create{background-position:5px -923px;}.ico_dashboard{background-position:5px -664px;}.ico_deactivate,.ico_unpublish{background-position:5px -1145px;}.ico_delete{background-position:5px -997px;}.ico_duplicate{background-position:5px -960px;}.ico_export{background-position:5px -1034px;}.ico_fuel{background-position:5px -590px;}.ico_info{background-position:15px -737px;}.ico_logs{background-position:5px -183px;}.ico_manage_cache{background-position:5px -1108px;}.ico_menu{background-position:5px -2014px;}.ico_module,.ico_other{background-position:5px -368px;}.ico_navigation{background-position:5px -1515px;}.ico_navigation_download{background-position:5px -1997px;}.ico_navigation_group{background-position:5px -294px;}.ico_notes{background-position:5px -886px;}.ico_pages{background-position:5px -812px;}.ico_pages_upload,.ico_navigation_upload,.ico_blocks_upload{background-position:5px -1293px;}.ico_permissions{background-position:5px -775px;}.ico_precedence{background-position:5px -1737px;}.ico_refresh{background-position:5px -146px;}.ico_remove_line{float:right;}.ico_replace{background-position:5px -1182px;}.ico_save{background-position:5px -442px;}.ico_select_all{background-position:5px -1330px;}.ico_settings{background-position:5px -1700px;}.ico_sitevariables{background-position:5px -1219px;}.ico_success,.ico_yes{background-position:5px -332px;}.ico_table{background-position:5px -1663px;width:16px;height:16px;}.ico_tags{background-position:5px -1774px;}.ico_tools{background-position:5px -1959px;}.ico_tree{background-position:5px -1885px;}.ico_view{background-position:5px -849px;}.ico_view_all{background-image:none;line-height:22px;padding-left:5px;}.ico_users{background-position:5px -1589px;}.ico_users_send_email{background-position:5px -482px;}.ico_warn{background-position:15px -516px;}.notification .ico_success,.notification .ico_yes{background-position:15px -330px;}.notification .ico_error{background-position:15px -220px;}div#fuel_main_panel{position:absolute;top:0;left:201px;right:0px;bottom:0px;background-color:#fff;-webkit-transition:all 0.2s cubic-bezier(0.445,0,0,1);-moz-transition:all 0.2s cubic-bezier(0.445,0,0,1);-ms-transition:all 0.2s cubic-bezier(0.445,0,0,1);-o-transition:all 0.2s cubic-bezier(0.445,0,0,1);transition:all 0.2s cubic-bezier(0.445,0,0,1);}#nav_toggle{opacity:0.9;}#nav_toggle{position:absolute;left:182px;top:0;font-size:1.3em;color:#fff;opacity:0.5;cursor:pointer;display:block;padding-left:25px;background:url(../images/icons/ico_nav_list.png) no-repeat left center;background-size:50%;text-indent:-10000px;}.nav_hide div#fuel_main_panel,div#fuel_left_panel{top:30px;left:0px;}body.nav_hide{overflow:hidden;width:100%;display:block;position:relative;}body.nav_hide,div#fuel_main_panel{min-width:700px;}.nav_hide div#fuel_top{height:30px;line-height:30px;}.nav_hide div#fuel_left_panel{left:-201px;z-index:50;-webkit-transform:translateX(201px);-moz-transform:translateX(201px);-ms-transform:translateX(201px);-o-transform:translateX(201px);transform:translateX(201px);}.nav_hide div#fuel_main_panel{left:0px;z-index:100;}.nav_hide h1#fuel_site_name{width:auto;display:block;float:none;padding:0 100px 0 85px;text-align:center;}.nav_hide div#fuel_left_panel_inner li.active{-webkit-background-size:auto 100%;background-size:auto 100%;}.nav_hide #nav_toggle{position:absolute;left:15px;top:0;font-size:1.3em;color:#fff;opacity:0.5;cursor:pointer;display:block;padding-left:20px;background-size:27%;text-indent:0;}.nav_hide div#fuel_main_panel{-webkit-transform:translateX(0px);-moz-transform:translateX(0px);-ms-transform:translateX(0px);-o-transform:translateX(0px);transform:translateX(0px);}@media only screen and (min-device-width:768px) and (max-device-width:1024px) {div#fuel_left_panel a{font-size:1.2em;line-height:2em;}}@media only screen and (min-device-width:320px) and (max-device-width:480px) {div#fuel_left_panel a{font-size:1.2em;line-height:2em;}}div#fuel_main_top_panel{height:29px;font-size:13px;color:#fff;background-color:#e7e7e7;border-bottom:1px solid #ccc;overflow:hidden;}div#fuel_main_top_panel h2{color:#333;text-shadow:#fff 0px 1px 0px;line-height:30px;margin-left:11px;}div#fuel_main_top_panel h2 a{color:#0E3E7E;}div#fuel_main_top_panel li{float:left;display:block;list-style:none;line-height:29px;font-weight:bold;border-right:1px solid #6e6e6e;}div#fuel_main_top_panel li a{display:block;color:#fff;text-shadow:#555 0px 1px 0px;background:#6d6d6d url(../images/tab.png) repeat-x;padding:0 15px;}div#fuel_main_top_panel li a:hover{background:#7c7c7c url(../images/tab.png) repeat-x 0 -29px;}div#fuel_main_top_panel li.active a{background:#e7e7e7 url(../images/tab.png) repeat-x 0 -58px;color:#113556;text-shadow:#fff 0px 1px 0px;}div#fuel_login_logout{position:absolute;top:8px;right:15px;font-size:11px;color:#333;background-color:#e7e7e7;height:21px;text-shadow:#fff 0px 1px 0px;}div#fuel_actions{height:46px;border-bottom:1px solid #b6b6b6;position:relative;min-width:680px;background:#eee;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,whiteSmoke),color-stop(1,#cfd1cf));background:-moz-linear-gradient(top center,#f6f6f6 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6',endColorstr='#dddddd');}div#fuel_main_content{overflow:auto;position:absolute;top:99px;left:0px;right:0px;bottom:0px;}div#fuel_main_content .buttonbar li,#fuel_main_content_compact .buttonbar li{margin-right:15px;}div#fuel_main_content_inner h3{background-color:#f6f6f6;padding:5px;margin-bottom:10px;}div#fuel_main_content_inner{padding:15px 37px;}div#fuel_main_content_inner .bullets{margin-left:15px;}div.noactions{top:51px !important;}div.notitlebar{top:69px !important;}div.noactions_notitlebar{top:22px !important;}div.noactions_nonotification{top:30px !important;}div#fuel_main_panel_compact{position:absolute;top:0px;left:0px;right:0px;bottom:0px;background-color:#fff;}div#fuel_main_content_compact{background-color:#fff;overflow:auto;position:absolute;top:99px;left:0px;right:0px;bottom:0px;}div.dashboard_pod{float:left;margin-right:10px}div.dashboard_module{float:left;margin-right:10px;margin-top:10px;}div#filters{position:absolute;right:15px;top:12px;}a#multi_delete{display:block;}.adv_search{position:absolute;min-width:360px;background:white;border:1px solid #b6b6b6;z-index:1000;left:-120px;padding:10px 15px;display:none;-moz-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 3px 5px 1px rgba(0,0,0,0.3);box-shadow:2px 2px 10px 1px rgba(0,0,0,0.3);}}.adv_search .more_filters{max-height:500px;overflow-y:auto;}.adv_search .more_filters div div{float:none;overflow:hidden;margin-bottom:7px;}.adv_search .label{width:100px;}.adv_search input[type="text"]{max-width:217px;}.search_input{position:relative;}#search_term.advanced{padding-right:15px;}.search_input #adv-search-btn{position:absolute;right:4px;top:5px;padding-top:5px;height:10px;background-color:#fff;}div#other_items{float:left;margin:2px 20px 0px 20px;}div#other_items select{max-width:250px;}div#action_btns{position:absolute;top:9px;left:15px;height:29px;overflow:hidden;}div.buttonbar ul{height:27px;float:left;}div.buttonbar li{border-top:1px solid #ccc;border-left:1px solid #b9b9b9;border-bottom:1px solid #b9b9b9;float:left;list-style:none;margin:0;background:#e6e6e6 url(../images/btn.png) repeat-x;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#ddd));background:-moz-linear-gradient(top center,#fff 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#dddddd');}div.buttonbar li:hover{background-position:0 -27px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#eee));background:-moz-linear-gradient(top center,#fff 0%,#eee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#eeeeee');-moz-box-shadow:inset 0 0 5px #ddd;-webkit-box-shadow:inset 0 0 5px #ddd;box-shadow:inner 0 0 5px #ddd;}div.buttonbar li.active{background-position:0 -54px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ddd),color-stop(1,#fff));background:-moz-linear-gradient(top center,#ddd 0%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dddddd',endColorstr='#ffffff');}div.buttonbar li.active a{color:#000;}div.buttonbar li a{color:#0e3e7e;height:22px;line-height:20px;display:block;padding:0 11px 1px 26px;margin-top:4px;}div.buttonbar li.spacer,li.unattached{margin-left:10px;}div.buttonbar li:last-child,li.unattached{border-right:1px solid #b9b9b9;}div.buttonbar li.end{border-right:1px solid #b9b9b9;}div.buttonbar li:first-child,div.buttonbar li.unattached{-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-bottomleft:4px;border-top-left-radius:4px;border-bottom-left-radius:4px;}div.buttonbar li:last-child,div.buttonbar li.unattached{-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;}div.buttonbar li.start{border-left:1px solid #b9b9b9;}div.save_cancel{height:35px;}div.save_cancel li{margin:5px 3px;}div.form_tabs li{padding:5px 15px;list-style:none;margin:0 3px 0 0;border-left:1px solid #eee;border-right:1px solid #eee;border-top:1px solid #eee;text-align:center;float:left;font-weight:bold;background-color:#ffffff;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}div.form_tabs li.active{background-color:#eee;}div.form_tabs li.active a{color:#333;}div.boxbuttons li{float:left;display:block;list-style:none;width:110px;height:60px;border:1px solid #ccc;margin-bottom:15px;margin-right:15px;}div.boxbuttons li a{display:block;text-align:center;padding:10px 5px 5px 5px;width:100px;height:45px;background-color:#fff;}div.boxbuttons li a:hover{background-color:#f6f6f6;}div.boxbuttons li i{display:block;padding:0;margin:auto;width:21px;height:22px;padding-right:5px;}div#fuel_notification{height:21px;border-bottom:1px solid #ccc;background-color:#ecf1f5;text-overflow:ellipsis;overflow:hidden;position:relative;}div.notification p,div.notification div,div.notification ul{margin:0;min-height:15px;line-height:15px;padding:3px 0 3px 35px;list-style:none;background-repeat:no-repeat;list-style:none;}div.notification .ico{line-height:15px;}div#pagination{position:absolute;z-index:1;right:0px;top:-3px;text-align:right;padding-right:25px;}div#pagination a{line-height:21px;padding:0 3px;border:1px solid #ccc;background-color:#f9f9f9;}div#pagination a:hover{background-color:#fdfdfd;}div#pagination b{color:#fff;background-color:#4f7193;line-height:21px;padding:0 3px;border:1px solid #ccc;}div#module_description{border-bottom:1px solid #ccc;background-color:#f6f6f6;padding:15px;}div#module_description p{margin:0;}div#table_loader{position:absolute;top:20px;left:50%;margin-left:-25px;z-index:2;}div#data_table_container{padding:6px 0;}#data_table .publish_hover:hover .publish_action{display:inline;}#data_table .publish_hover:hover .publish_text{display:none;}table#data_table.rearrange tr:hover td{cursor:move !important;background-color:#ffe !important;}table.data{width:98%;margin:0px auto;}table.data th{padding:0 20px 0 0;white-space:nowrap;}table.data td{padding:5px 20px;border-top:1px solid #fff;white-space:nowrap;max-width:300px;text-overflow:ellipsis;overflow:hidden;}table.data th.on,table.data th.on a{color:#4f7193;}table.data th a{text-decoration:underline;}table.data th a,table.data th span{color:#333;display:block;line-height:22px;padding:0 0 0 20px;width:100%;border-left:1px solid #fff;}table.data th.asc a{background:transparent url(../images/th_arrow_asc.png) no-repeat 5px center;}table.data th.desc a{background:transparent url(../images/th_arrow_desc.png) no-repeat 5px center;}table.data th{text-align:left;}table.data td.next_last{width:100%;}table.data td.actions{text-align:right;white-space:nowrap;padding-left:5px;}table.data tr.rowaction:hover td{background-color:#edf2f7 !important;cursor:pointer;}table.data th.col1{min-width:200px;}table.data tr.alt{background-color:#f3f3f3;}div.nodata{text-align:center;padding:10px 0 15px 0;}span.publish_col{width:100px;display:block;cursor:pointer !important;}.form{border:none;border-spacing:0;display:table;}.form td.label{padding:6px 15px 0 0;font-weight:bold;vertical-align:top;}.form td.value{padding:3px 0;white-space:nowrap;}.form td.required{padding-top:10px;}div.more_filters{padding-left:10px;}div.more_filters span.label{float:left;padding-top:6px;}div.more_filters span.field{float:left;display:block;padding:0 0 0 5px;}div.more_filters div div{float:left;margin-right:10px;}div#tree_container{padding:16px 15px;}div#tree_loader{position:absolute;top:20px;left:50%;margin-left:-25px;z-index:2;}div#login{padding:15% 0 0 0;border:none;background-color:transparent;margin:0 auto;}div#login h3,div#login p{color:#fff;text-align:center;}div#login form{width:270px;margin:0 auto;}div#login input{background-color:#1d1d1d;color:#fff;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;border:2px solid #444;height:40px;width:270px;padding:0 1em;}.login_logo{background:transparent url(../images/fuel_logo.png) no-repeat;background-size:100%;width:233px;height:46px;overflow:hidden;margin:0 auto 1.5em auto;}div#login::-webkit-input-placeholder{color:#999;}div#login:-moz-placeholder{color:#999;}div#login:-ms-input-placeholder{color:#999;}div#login input[type="submit"]{background:#3dbfd9 !important;color:#fff;font-size:20px;text-shadow:none;}div#login_notification{text-overflow:ellipsis;overflow:hidden;width:440px;margin:auto;}a#forgotten_pwd{text-align:center;display:block;padding-top:15px;padding-left:20px;color:#999;}a.modal_close{position:absolute;left:-11px;top:-11px;z-index:10;background:transparent url(../images/x_close.png) no-repeat center center;width:23px;height:23px;text-indent:-10000px;overflow:hidden;}div.modal_content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#fff;width:100%;height:100%; overflow:hidden;}div.modal_content iframe{width:100% !important;}div.modal_content_inner{padding:10px 20px;}div#asset_preview{height:275px;width:740px;overflow:auto;text-align:center;margin:10px 0 20px 0;}div.asset_select > div > div{float:left;}div.asset_select span.label{padding:0 5px 0 15px;}div.asset_select div.actions{padding-top:50px;float:left;}div.img_crop{max-width:400px;max-height:200px;overflow:auto;}div#yes_no_modal{text-align:center;margin:0;}div#yes_no_modal ul{float:none;}div#yes_no_modal li{display:inline-block;margin-right:5px;float:none;}div#__FUEL_modal__{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:98%;max-width:864px;margin-left:-425px;max-height:508px;background-color:#fff;}div#__FUEL_modal__ .add_inline_button,div#__FUEL_modal__ .edit_inline_button{display:none;}a.btn_field_right{display:block;float:right;margin-bottom:5px;margin-right:3px;}div.img_display{float:right;overflow:auto;height:120px;width:300px;}div.viewpage_modal{top:16px;border:2px solid #666;background-color:#fff;height:96% !important;width:96% !important;max-width:96% !important;max-height:96% !important;padding:0;display:none;}div#viewpage_btns{position:absolute;z-index:1;top:-17px;right:-2px;}a.viewpage_btn{float:left;margin-right:2px;color:#ccc;background-color:#666;padding:1px 5px;}a#viewpage_close{right:0px;}a#viewpage_new_page{right:100px;}iframe#viewpage_iframe{border:none;width:100%;height:100%;}input#Save,input.submit{margin-top:10px;width:150px;text-align:center;}input#Cancel,input.cancel{margin-top:10px;margin-right:10px;width:60px;text-align:center;}div#tooltip h3{font-size:11px;font-weight:normal;}a.btn_field{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;line-height:12px;border:1px solid #ccc;padding:3px 5px 3px 5px;background:#eee url(../images/btn.png) repeat-x;}a.btn_field:hover{background-position:0 -27px;}a#back_to{margin-bottom:20px;display:block;}.hidden_form{visibility:hidden;height:0px;overflow:hidden;}div#related_items{float:right;width:210px;background-color:#ecf1f5;border-left:1px solid #ccc;border-bottom:1px solid #ccc;padding:10px;}div#related_items h3{background-color:transparent;padding-left:24px;margin-top:5px;}div#related_items li{list-style:none;padding-left:5px;margin:5px 0;}div#related_items select{max-width:212px;}div#related_items .layout_preview{max-width:210px;margin:10px auto;}a.reset{display:block;width:16px;height:16px;background:transparent url(../images/fuel_icons.png) no-repeat 0px -146px;margin-right:5px;}div.perms_list ul ul{margin:10px;}div.perms_list ul li{margin:8px 0 8px;list-style:none;display:block;}div.perms_list ul li input{margin-right:2px;}div.perms_list ul ul li{margin:8px 0 8px 10px;}div.perms_list label{font-weight:bold;}.match_class{display:block;position:absolute;z-index:10;margin-bottom:0px;min-height:30px;}.match_class span{display:inline-block;cursor:pointer;padding:3px;background-color:#fcfce6;border:1px solid #ccc;margin:3px 0 3px 3px;}.multi_field{margin-bottom:10px;display:inline-block;padding-top:2px;}.cke_top{min-width:565px !important;}.cke_button__fuellink_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -528px !important;}.cke_button__fuelunlink_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -552px !important;}.cke_button__fuelimage_icon{background:url(../js/editors/ckeditor/skins/moono/icons.png) no-repeat 0 -360px !important;}#codeigniter_profiler{position:absolute;bottom:0;left:200px;height:300px;overflow:auto;} \ No newline at end of file diff --git a/fuel/modules/fuel/assets/css/fuel_inline.css b/fuel/modules/fuel/assets/css/fuel_inline.css index a3c0a70f1..0a5dea9b2 100644 --- a/fuel/modules/fuel/assets/css/fuel_inline.css +++ b/fuel/modules/fuel/assets/css/fuel_inline.css @@ -1,5 +1,5 @@ /* generic styles */ -.__fuel__ * { font-family: 'Lucida Grande', 'Gill Sans', Arial, Helvetica, Sans-serif; margin: 0; padding: 0; font-size: 11px; outline-style: none; color: #000; text-shadow: none !important; background: none; } +.__fuel__ * { font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; margin: 0; padding: 0; font-size: 11px; outline-style: none; color: #000; text-shadow: none !important; background: none; } .__fuel__ h2 { font-size: 14px !important; margin-bottom: 10px !important; } .__fuel__ a { color: #0e3e7e !important; text-decoration: none !important; font-weight: normal !important; border: none !important; } .__fuel__ a:hover { text-decoration: underline !important; } diff --git a/fuel/modules/fuel/assets/css/jquery-ui-1.8.17.custom.css b/fuel/modules/fuel/assets/css/jquery-ui-1.8.17.custom.css index 18c361fa0..abff4ce9f 100755 --- a/fuel/modules/fuel/assets/css/jquery-ui-1.8.17.custom.css +++ b/fuel/modules/fuel/assets/css/jquery-ui-1.8.17.custom.css @@ -53,9 +53,9 @@ /* Component containers ----------------------------------*/ -.ui-widget { font-family: 'Lucida Grande', 'Gill Sans', Arial, Helvetica, Sans-serif; font-size: 1.1em; } +.ui-widget { font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: 'Lucida Grande', 'Gill Sans', Arial, Helvetica, Sans-serif; font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: 'Lucida Grande', Verdana, Arial, Helvetica, Sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } diff --git a/fuel/modules/fuel/assets/js/editors/markitup/jquery.markitup.set.js b/fuel/modules/fuel/assets/js/editors/markitup/jquery.markitup.set.js index 526b87139..f4bfd7478 100644 --- a/fuel/modules/fuel/assets/js/editors/markitup/jquery.markitup.set.js +++ b/fuel/modules/fuel/assets/js/editors/markitup/jquery.markitup.set.js @@ -453,7 +453,7 @@ myMarkItUpSettings.displayLinkEditWindow = function(selected, attrs, callback){ if ($class.length && $class.val().length){ replace += ' class="' + $class.val() + '"'; } - replace += '>' + $selected.val() + '</a>'; + replace += '>' + unescape($selected.val()) + '</a>'; callback(replace); } diff --git a/fuel/modules/fuel/assets/js/fuel/controller/AssetsController.js b/fuel/modules/fuel/assets/js/fuel/controller/AssetsController.js index 65e5428c3..70e92c1c4 100644 --- a/fuel/modules/fuel/assets/js/fuel/controller/AssetsController.js +++ b/fuel/modules/fuel/assets/js/fuel/controller/AssetsController.js @@ -23,7 +23,7 @@ fuel.controller.AssetsController = jqx.createController(fuel.controller.BaseFuel var selectedAssetFolder = this.initObj.folder; $assetSelect.change(function(e){ - var isImg = ($assetSelect.val() && $assetSelect.val().match(/\.jpg$|\.jpeg$|\.gif$|\.png$/)); + var isImg = ($assetSelect.val() && $assetSelect.val().toLowerCase().match(/\.jpg$|\.jpeg$|\.gif$|\.png$/)); if (isImg){ $assetPreview.show().html('<img src="' + jqx.config.assetsPath + selectedAssetFolder + '/' + $assetSelect.val() + '" />'); $('.img_only').show(); diff --git a/fuel/modules/fuel/assets/js/fuel/controller/BaseFuelController.js b/fuel/modules/fuel/assets/js/fuel/controller/BaseFuelController.js index eb5b4049c..34840ab9d 100755 --- a/fuel/modules/fuel/assets/js/fuel/controller/BaseFuelController.js +++ b/fuel/modules/fuel/assets/js/fuel/controller/BaseFuelController.js @@ -184,7 +184,6 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ var itemViewsCookie = $.supercookie(this.uiCookie, itemViewsCookieId); $('#toggle_tree').click(function(e){ - _this._toggleRearrangeBtn(); $('#toggle_tree').parent().addClass('active'); if ($('#rearrange').parent().hasClass('active')){ @@ -202,6 +201,8 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ // lazy load tree if (!_this.treeLoaded){ _this.redrawTree(); + } else { + _this._toggleRearrangeBtn(); } return false; }); @@ -220,6 +221,8 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ // lazy load table if (!_this.tableLoaded){ _this.redrawTable(); + } else { + _this._toggleRearrangeBtn(); } return false; }); @@ -603,17 +606,10 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ }, _toggleRearrangeBtn : function(){ - - // remove the button if no precedence columns - if (!$('#precedence').length) - { - $('.ico_precedence').parent().remove(); - } - - if ($('#precedence').val() != 1){ - $('#rearrange').parent().hide(); - } else { + if (!$('#list_container').is(':hidden') && parseInt($('#precedence').val()) == 1){ $('#rearrange').parent().show(); + } else { + $('#rearrange').parent().hide(); } }, @@ -645,7 +641,7 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ if (!_this.treeLoaded) _this.treeLoaded = true; // setup rearranging precedence - $('#rearrange').parent().hide(); + _this._toggleRearrangeBtn(); }, @@ -662,7 +658,6 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ $.post(_this.modulePath + '/toggle_' + toggleStatus + '/' + id + '/' + field, params, function(html){ _this.redrawTable(true, false); }); - } $('#data_table .publish_text').parent().addClass('publish_col'); @@ -683,7 +678,7 @@ fuel.controller.BaseFuelController = jqx.lib.BaseController.extend({ if (!_this.rearrangeOn){ var actionsCol = $(this).parent().find('td.actions'); var firstLink = $('a:first', actionsCol[0]).attr('href'); - if (firstLink && firstLink){ + if (firstLink){ window.location = firstLink; } } diff --git a/fuel/modules/fuel/assets/js/fuel/custom_fields.js b/fuel/modules/fuel/assets/js/fuel/custom_fields.js index 97c2d4563..78f086f76 100644 --- a/fuel/modules/fuel/assets/js/fuel/custom_fields.js +++ b/fuel/modules/fuel/assets/js/fuel/custom_fields.js @@ -36,6 +36,9 @@ fuel.fields.datetime_field = function(context){ firstDay : $(this).attr('data-first_day'), showOn : $(this).attr('data-show_on') }; + if ($(this).attr('data-button_image')){ + options.buttonImage = $(this).attr('data-button_image'); + } var opts = $.extend(o, options); $.datepicker.regional[o.region]; @@ -321,8 +324,13 @@ fuel.fields.wysiwyg_field = function(context){ var createPreview = function(id){ var $textarea = $('#' + id); + + if ($textarea.data('preview') != undefined && $textarea.data('preview').length == 0){ + return; + } + var previewButton = '<a href="#" id="' + id + '_preview" class="btn_field editor_preview">' + fuel.lang('btn_preview') + '</a>'; - + // add preview to make it noticable and consistent if ($textarea.parent().find('.editor_preview').length == 0){ var $previewBtn = $textarea.parent('.markItUpContainer').find('.markItUpHeader .preview'); @@ -436,7 +444,6 @@ fuel.fields.asset_field = function(context, options){ $assetPreview = $('#asset_preview', iframeContext); $('.cancel', iframeContext).add('.modal_close').click(function(){ $modal.jqmHide(); - if ($(this).is('.save')){ var $activeField = $('#' + activeField); var assetVal = jQuery.trim($activeField.val()); @@ -449,7 +456,11 @@ fuel.fields.asset_field = function(context, options){ } else { assetVal = selectedVal; } - $('#' + activeField).val(assetVal).trigger("change"); + $activeField.val(assetVal).trigger("change"); + + refreshImage($activeField); + + } return false; }); @@ -508,21 +519,24 @@ fuel.fields.asset_field = function(context, options){ $modal.find('iframe#add_edit_inline_iframe').bind('load', function(){ var iframeContext = this.contentDocument; selected = $('#uploaded_file_name', iframeContext).val(); + if (selected && selected.length){ var $activeField = $('#' + activeField); - if ($activeField.data('multiple') == '1'){ - var selectedAssetValue = jQuery.trim($('#' + activeField).val()); + var multiple = parseInt($activeField.attr('data-multiple')) == 1; + if (multiple){ + var selectedAssetValue = jQuery.trim($activeField.val()); var selectedAssets = []; if (selectedAssetValue.length){ selectedAssets = selectedAssetValue.split(','); } selectedAssets.push(selected); - $('#' + activeField).val(selectedAssets.join(',')) + $activeField.val(selectedAssets.join(',')) } else { - $('#' + activeField).val(selected); + $activeField.val(selected); } $modal.jqmHide(); + refreshImage($activeField); } }) return false; @@ -556,6 +570,49 @@ fuel.fields.asset_field = function(context, options){ return false; }); + + // refresh any images + var refreshImage = function(activeField){ + $activeField = $(activeField); + var folder = $activeField.data('folder') + var imgPath = jqx_config.assetsPath + folder + '/'; + var $preview = $activeField.parent().find('.img_preview'); + var value = $activeField.val(); + var imgValues = value.split(','); + var imgStyles = $preview.data('imgstyles'); + $preview.empty(); + var previewHTML = ''; + $.each(imgValues, function(img){ + + // check if it is an image + if (this.length && this.toLowerCase().match(/\.jpg$|\.jpeg$|\.gif$|\.png$/)){ + var newSrc = (this.toLowerCase().match(/^http(s)?:\/\//)) ? '' : imgPath; + newSrc += $.trim(this) + '?c=' + new Date().getTime() + previewHTML += '<a href="' + newSrc + '" target="_blank">'; + previewHTML += '<img src="' + newSrc + '" style="' + imgStyles + '">' + previewHTML += '</a>'; + } + + if (value && $activeField.data('orig') != value){ + previewHTML += '<br clear="both"><p class="warning" style="white-space: normal;">' + fuel.lang('assets_need_to_save') + '</p>'; + } + }) + + if (previewHTML.length){ + $preview.show().html(previewHTML); + } else { + $preview.hide(); + } + + } + + $('.asset_select, .asset_upload', context).each(function(){ + $(this).on('change', function(e){ + refreshImage(this); + }) + refreshImage(this); + }); + } // inline editing of another module @@ -1146,7 +1203,7 @@ fuel.fields.toggler_field = function(context, options){ }) // for block fields that get ajaxed in - $(document).on("blockLoaded", function(e, elem, context){ + $(document).off("blockLoaded").on("blockLoaded", function(e, elem, context){ var $togglers = $(elem).parent().find(".toggler").not('.__applied__'); $togglers.each(function(){ var $this = $(this); diff --git a/fuel/modules/fuel/assets/js/fuel/fuel.min.js b/fuel/modules/fuel/assets/js/fuel/fuel.min.js index fc327e5cd..7b4e76985 100644 --- a/fuel/modules/fuel/assets/js/fuel/fuel.min.js +++ b/fuel/modules/fuel/assets/js/fuel/fuel.min.js @@ -519,11 +519,11 @@ i);parseTemplate(this,i)})};var checkMax=function($elem,max){if(max&&$elem.child var cloneRepeatableNode=function($elem){$clone=$elem.children(options.repeatableSelector+":first").clone(false);return $clone};var createCollapsingContent=function($elem){if(options.allowCollapsingContent)$($elem).find(options.sortableSelector).unbind("dblclick").dblclick(function(e){$parent=$(this).closest(options.repeatableSelector).parent();var dblclick=$parent.attr("data-dblclick")?$parent.attr("data-dblclick"):null;var $elems=$(this).closest(options.repeatableSelector).find(options.contentSelector+ ":first");if(dblclick=="accordion"||dblclick=="accordian"){$parent.find(options.contentSelector).hide();$elems.show()}else $elems.toggle()})};var createAddButton=function($elem){$("."+options.addButtonClass).each(function(i){var $prev=$(this).prev();var $clone=cloneRepeatableNode($prev);$(this).data("clone",$clone)})};$(document).on("click","."+options.addButtonClass,function(e){e.preventDefault();e.stopImmediatePropagation();var $prev=$(this).prev();var max=$prev.attr("data-max")?parseInt($prev.attr("data-max")): null;var min=$prev.attr("data-min")?parseInt($prev.attr("data-min")):null;var dblclick=$prev.attr("data-dblclick")?$prev.attr("data-dblclick"):null;if(!$(e.currentTarget).data("clone")){var $clone=cloneRepeatableNode($prev);$(e.currentTarget).data("clone",$clone)}else var $clone=$(e.currentTarget).data("clone");var $this=$(this).prev();var $clonecopy=$clone.clone(false);$clonecopy.addClass("noclone");$clonecopy.find(options.contentSelector+":first").show();if(dblclick=="accordian"||dblclick=="accordion")$prev.find(options.contentSelector).hide(); -createCollapsingContent($clonecopy);var $children=$this.children(options.repeatableSelector);if(max&&$children.length>=max)return false;var index=$children.length;parseTemplate($clonecopy,index);createRemoveButton($clonecopy);$this.append($clonecopy);$clonecopy.find("input,select,textarea").not('input[type="radio"], input[type="checkbox"], input[type="button"], .noclear').val("");$clonecopy.find(".noclone").remove();reOrder($this);if(max&&$children.length!=0&&$children.length>=max-1)$(this).hide(); -checkMin($prev,min);$this.trigger({type:"cloned",clonedNode:$clonecopy})});var index=0;return this.each(function(){var $this=$(this);var $repeatables=$this.children(options.repeatableSelector);if(!$this.is(".__applied__"))$repeatables.each(function(i){parseTemplate(this,i);createRemoveButton(this)});$parent=$this.parent();if(options.max)$this.attr("data-max",options.max);if(options.min)$this.attr("data-min",options.min);if(options.dblClickBehavior)$this.attr("data-dblclick",options.dblClickBehavior); -if(options.initDisplay&&!$this.is(".__applied__")){$this.attr("data-init_display",options.init_display);if($repeatables.closest(options.contentSelector).length)$toDisplay=$repeatables.find(options.contentSelector);else $toDisplay=$repeatables.find(options.contentSelector).not(options.contentSelector+" "+options.contentSelector);if(options.initDisplay=="first")$toDisplay.not(":first").hide();else if(options.initDisplay=="none"||options.initDisplay=="closed")$toDisplay.hide()}if($parent.find(options.addButtonClass).length== -0&&!$this.hasClass("__applied__"))$parent.append('<a href="#" class="'+options.addButtonClass+'">'+options.addButtonText+" </a>");if(options.sortable)$this.sortable({cursor:"move",handle:options.sortableSelector,start:function(event,ui){$this.trigger({type:"sortStarted",clonedNode:$this})},stop:function(event,ui){reOrder($(this));$this.trigger({type:"sortStopped",clonedNode:$this})}});if(!$this.hasClass("__applied__"))createAddButton($this);if($this.attr("data-max"))checkMax($this,options.max);if($this.attr("data-min"))checkMin($this, -options.min);createCollapsingContent($this);index++;$this.addClass("__applied__");return this})}})(jQuery); +createCollapsingContent($clonecopy);var $children=$this.children(options.repeatableSelector);if(max&&$children.length>=max)return false;var index=$children.length;parseTemplate($clonecopy,index);createRemoveButton($clonecopy);$this.append($clonecopy);$clonecopy.find("input,select,textarea").not('input[type="radio"], input[type="checkbox"], input[type="button"], .noclear').val("");$clonecopy.find('input[type="checkbox"]').not(".noclear").prop("checked",false);$clonecopy.find('input[type="radio"]').not(".noclear").each(function(){if(parseInt($(this).data("orig_checked"))== +1)$(this).prop("checked",true);else $(this).prop("checked",false)});$clonecopy.find(".noclone").remove();reOrder($this);if(max&&$children.length!=0&&$children.length>=max-1)$(this).hide();checkMin($prev,min);$this.trigger({type:"cloned",clonedNode:$clonecopy})});var index=0;return this.each(function(){var $this=$(this);var $repeatables=$this.children(options.repeatableSelector);if(!$this.is(".__applied__"))$repeatables.each(function(i){parseTemplate(this,i);createRemoveButton(this)});$parent=$this.parent(); +if(options.max)$this.attr("data-max",options.max);if(options.min)$this.attr("data-min",options.min);if(options.dblClickBehavior)$this.attr("data-dblclick",options.dblClickBehavior);if(options.initDisplay&&!$this.is(".__applied__")){$this.attr("data-init_display",options.init_display);if($repeatables.closest(options.contentSelector).length)$toDisplay=$repeatables.find(options.contentSelector);else $toDisplay=$repeatables.find(options.contentSelector).not(options.contentSelector+" "+options.contentSelector); +if(options.initDisplay=="first")$toDisplay.not(":first").hide();else if(options.initDisplay=="none"||options.initDisplay=="closed")$toDisplay.hide()}if($parent.find(options.addButtonClass).length==0&&!$this.hasClass("__applied__"))$parent.append('<a href="#" class="'+options.addButtonClass+'">'+options.addButtonText+" </a>");if(options.sortable)$this.sortable({cursor:"move",handle:options.sortableSelector,start:function(event,ui){$this.trigger({type:"sortStarted",clonedNode:$this})},stop:function(event, +ui){reOrder($(this));$this.trigger({type:"sortStopped",clonedNode:$this})}});if(!$this.hasClass("__applied__"))createAddButton($this);if($this.attr("data-max"))checkMax($this,options.max);if($this.attr("data-min"))checkMin($this,options.min);createCollapsingContent($this);index++;$this.addClass("__applied__");return this})}})(jQuery); (function($){var pushStackOrig,pushStackChrome;pushStackOrig=$.fn.pushStack;pushStackChrome=function(elems,name,selector){var ret=new jQuery.fn.init;if(jQuery.isArray(elems))push.apply(ret,elems);else jQuery.merge(ret,elems);ret.prevObject=this;ret.context=this.context;if(name==="find")ret.selector=this.selector+(this.selector?" ":"")+selector;else if(name)ret.selector=this.selector+"."+name+"("+selector+")";return ret};$.fn.pushStack=function(elems,name,selector){var ret;try{ret=pushStackOrig.call(this, elems,name,selector);return ret}catch(e){if(e instanceof TypeError)if(!(ret instanceof jQuery.fn.init)){ret=pushStackChrome.call(this,elems,name,selector);return ret}throw e;}}}).call(this,jQuery);jQuery.fn.exists=function(){return this.size()>0};jQuery.fn.setClass=function(cssClass){var j=jQuery(this).attr("className",cssClass);return j};jQuery.fn.isHidden=function(){if(jQuery(this).css("display")=="none")return true;return false}; jQuery.include=function(file,type){if(!type)type="script";$.ajax({async:false,url:file,dataType:type,error:function(){var msg=new jqx.lib.Message("There was an error in loading the file"+file,"error");msg.display()}})};function initFuelNamespace(){var f;if(window.fuel==undefined)if(top.window.fuel!=undefined)f=top.window.fuel;else f={};else f=window.fuel;return f}if(typeof window.fuel=="undefined")window.fuel={};fuel.lang=function(key){return __FUEL_LOCALIZED__[key]}; diff --git a/fuel/modules/fuel/assets/js/jquery/plugins/jquery.repeatable.js b/fuel/modules/fuel/assets/js/jquery/plugins/jquery.repeatable.js index 35d4e4906..665bc3c3b 100644 --- a/fuel/modules/fuel/assets/js/jquery/plugins/jquery.repeatable.js +++ b/fuel/modules/fuel/assets/js/jquery/plugins/jquery.repeatable.js @@ -280,6 +280,16 @@ dave@thedaylightstudio.com // remove values from any form fields $clonecopy.find('input,select,textarea').not('input[type="radio"], input[type="checkbox"], input[type="button"], .noclear').val(''); + $clonecopy.find('input[type="checkbox"]').not('.noclear').prop('checked', false); + $clonecopy.find('input[type="radio"]').not('.noclear').each(function(){ + if (parseInt($(this).data('orig_checked')) == 1){ + $(this).prop('checked', true); + } else { + $(this).prop('checked', false); + } + + }); + $clonecopy.find('.noclone').remove(); reOrder($this); diff --git a/fuel/modules/fuel/config/custom_fields.php b/fuel/modules/fuel/config/custom_fields.php index 8a9771c7e..dbc9a236e 100644 --- a/fuel/modules/fuel/config/custom_fields.php +++ b/fuel/modules/fuel/config/custom_fields.php @@ -1,242 +1,187 @@ <?php -// datetime field +// Datetime field $fields['datetime'] = array( 'css_class' => 'datepicker', 'js_function' => 'fuel.fields.datetime_field', - // 'js_params' => array('format' => 'mm-dd-yyyy'), - 'represents' => 'datetime|timestamp', + 'represents' => 'datetime|timestamp' ); -// date field +// Date field $fields['date'] = array( 'css_class' => 'datepicker', - 'js_function' => 'fuel.fields.datetime_field', + 'js_function' => 'fuel.fields.datetime_field' ); -// multi field +// Multi field $fields['multi'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'multi', - // 'js' => array( - // FUEL_FOLDER => array( - // 'jquery/plugins/jquery.selso', - // 'jquery/plugins/jquery.disable.text.select.pack', - // 'jquery/plugins/jquery.supercomboselect', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'multi', 'js_function' => 'fuel.fields.multi_field', - //'css' => array(FUEL_FOLDER => 'jquery.supercomboselect'), - 'represents' => 'array', + 'represents' => 'array' ); -// multi field +// Asset field $fields['asset'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'asset', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'jquery/plugins/jqModal', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'asset', + 'filepath' => '', 'js_function' => 'fuel.fields.asset_field', 'represents' => array('name' => '.*image\]?$|.*img\]?$'), ); -// wysiwyg field +// Wysiwyg field $fields['wysiwyg'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'wysiwyg', - 'filepath' => '', - 'js' => array( - FUEL_FOLDER => array( - 'editors/markitup/jquery.markitup', - 'editors/markitup/jquery.markitup.set', - 'editors/ckeditor/ckeditor.js', - 'editors/ckeditor/config.js', - ) + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'wysiwyg', + 'filepath' => '', + 'js' => array( + FUEL_FOLDER => array( + 'editors/markitup/jquery.markitup', + 'editors/markitup/jquery.markitup.set', + 'editors/ckeditor/ckeditor.js', + 'editors/ckeditor/config.js', + ) ), - //'css' => array(FUEL_FOLDER => 'markitup'), 'js_function' => 'fuel.fields.wysiwyg_field', - 'represents' => array('text', 'textarea', 'longtext', 'mediumtext'), + 'represents' => array('text', 'textarea', 'longtext', 'mediumtext') ); -// file field +// File field $fields['file'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'file', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'jquery/plugins/jquery.MultiFile', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'file', + 'filepath' => '', 'js_function' => 'fuel.fields.file_upload_field', - 'represents' => 'blob', - + 'represents' => 'blob' ); // inline edit filed $fields['inline_edit'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'inline_edit', + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'inline_edit', 'js_function' => 'fuel.fields.inline_edit_field', 'represents' => array('select'), ); -// linked field +// Linked field $fields['linked'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'linked', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'fuel/linked_field_formatters', - // ) - // ), - 'js_function' => 'fuel.fields.linked_field', - + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'linked', + 'filepath' => '', + 'js_function' => 'fuel.fields.linked_field' ); -// template field +// Template field $fields['template'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'template', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => - // 'jquery/plugins/jquery.repeatable', - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'template', + 'filepath' => '', 'js_function' => 'fuel.fields.template_field', - 'js_exec_order' => 0, // must be set to 0 so that the node clone will get raw nodes before other js is executed + 'js_exec_order' => 0 // Must be set to 0 so that the node clone will get raw nodes before other js is executed ); -// number field +// Number field $fields['number'] = array( - //'js' => array(FUEL_FOLDER => 'jquery/plugins/jquery.numeric'), 'js_function' => 'fuel.fields.number_field', 'represents' => array('int', 'smallint', 'mediumint', 'bigint'), ); -// currency field +// Currency field $fields['currency'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'currency', - 'filepath' => '', - 'js' => array(FUEL_FOLDER => 'jquery/plugins/jquery.autoNumeric'), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'currency', + 'filepath' => '', + 'js' => array(FUEL_FOLDER => 'jquery/plugins/jquery.autoNumeric'), 'js_function' => 'fuel.fields.currency_field', 'represents' => array('name' => 'price') ); -// state field +// State field $fields['state'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'state', - 'filepath' => '', - 'represents' => array('name' => 'state'), - + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'state', + 'filepath' => '', + 'represents' => array('name' => 'state') ); -// slug field +// Slug field $fields['slug'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'slug', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'fuel/linked_field_formatters', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'slug', + 'filepath' => '', 'js_function' => 'fuel.fields.linked_field', - 'represents' => array('name' => 'slug|permalink'), + 'represents' => array('name' => 'slug|permalink') ); -// list items +// List items $fields['list_items'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'list_items', - 'filepath' => '', + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'list_items', + 'filepath' => '' ); -// url field +// URL field $fields['url'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'url', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'jquery/plugins/jqModal', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'url', + 'filepath' => '', 'js_function' => 'fuel.fields.url_field', - 'represents' => array('name' => 'url|link'), + 'represents' => array('name' => 'url|link') ); -// language field +// Language field $fields['language'] = array( 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), 'function' => 'language', 'filepath' => '', - 'represents' => array('name' => 'language'), + 'represents' => array('name' => 'language') ); -// keyval field +// Keyval field $fields['keyval'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'keyval', - 'filepath' => '', + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'keyval', + 'filepath' => '' ); -// block field +// Block field $fields['block'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'block', - 'filepath' => '', - 'js_function' => 'fuel.fields.block_field', - + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'block', + 'filepath' => '', + 'js_function' => 'fuel.fields.block_field' ); - -// toggler field +// Toggler field $fields['toggler'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'toggler', - 'filepath' => '', - 'js_function' => 'fuel.fields.toggler_field', - + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'toggler', + 'filepath' => '', + 'js_function' => 'fuel.fields.toggler_field' ); -// color picker field +// Color picker field $fields['colorpicker'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'colorpicker', - 'filepath' => '', + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'colorpicker', + 'filepath' => '', 'js_function' => 'fuel.fields.colorpicker_field', - 'js' => array( - FUEL_FOLDER => array( - 'jquery/plugins/colorpicker', - ) + 'js' => array( + FUEL_FOLDER => array( + 'jquery/plugins/colorpicker', + ) ), 'css' => array(FUEL_FOLDER => 'colorpicker'), ); -// dependent field +// Dependent field $fields['dependent'] = array( - 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), - 'function' => 'dependent', - 'filepath' => '', - // 'js' => array( - // FUEL_FOLDER => array( - // 'jquery/plugins/jquery.selso', - // 'jquery/plugins/jquery.disable.text.select.pack', - // 'jquery/plugins/jquery.supercomboselect', - // ) - // ), + 'class' => array(FUEL_FOLDER => 'Fuel_custom_fields'), + 'function' => 'dependent', + 'filepath' => '', 'css' => array(FUEL_FOLDER => 'jquery.supercomboselect'), - - 'js_function' => 'fuel.fields.dependent_field', - + 'js_function' => 'fuel.fields.dependent_field' ); /* End of file custom_fields.php */ diff --git a/fuel/modules/fuel/config/form_builder.php b/fuel/modules/fuel/config/form_builder.php index 6ba829af9..80b822edb 100644 --- a/fuel/modules/fuel/config/form_builder.php +++ b/fuel/modules/fuel/config/form_builder.php @@ -1,18 +1,19 @@ <?php $config['js'][] = array(FUEL_FOLDER => array( - 'jquery/plugins/jquery-migrate-1.1.1.js', - 'jquery/plugins/jquery.formbuilder', - 'fuel/custom_fields.js', - ) - ); + 'jquery/plugins/jquery-migrate-1.1.1.js', + 'jquery/plugins/jquery.formbuilder', + 'fuel/custom_fields.js' + ) +); + $config['required_text'] = '<span class="required">{required_indicator}</span> '.lang('required_text'); + $config['representatives'] = array( 'number' => array('int', 'smallint', 'mediumint', 'bigint'), - 'password' => array('name' => array('pwd', 'passwd')), - ); - - - + 'password' => array( + 'name' => array('pwd', 'passwd') + ) +); /* End of file form_builder.php */ /* Location: ./application/config/form_builder.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/config/fuel.php b/fuel/modules/fuel/config/fuel.php index ac8c6e46b..1e3a18c09 100644 --- a/fuel/modules/fuel/config/fuel.php +++ b/fuel/modules/fuel/config/fuel.php @@ -32,87 +32,88 @@ |-------------------------------------------------------------------------- */ -// the name of the site to be displayed at the top. Also used to generate your session key +// The name of the site to be displayed at the top. Also used to generate your session key $config['site_name'] = 'MyWebsite'; // path to the fuel admin from the web base directory... MUST HAVE TRAILING SLASH! $config['fuel_path'] = FUEL_FOLDER.'/'; -// options are cms, views, auto... cms pulls views and variables from the database, -// views mode pulls views from the views folder and variables from the _variables folder. +// Options are cms, views, auto... cms pulls views and variables from the database, +// Views mode pulls views from the views folder and variables from the _variables folder. // The auto option will first check the database for a page and if it doesn't exist or is not published, it will then check for a corresponding view file. // Additionally, you can create an array value specifying the keys, 'pages', 'blocks' and 'navigation' to specify how those modules work individually // (e.g. array('pages' => 'AUTO', 'blocks' => 'views', 'navigation' => 'cms');) $config['fuel_mode'] = 'views'; -// used for system emails. Can be overwritten by MY_fuel.php +// Used for system emails. Can be overwritten by MY_fuel.php $config['domain'] = $_SERVER['SERVER_NAME']; -// the page to redirect to AFTER logging in +// The page to redirect to AFTER logging in $config['login_redirect'] = $config['fuel_path'].'dashboard'; -// the page to redirect to AFTER logging out. . Use the special value :last to redirect to the last page you were on. +// The page to redirect to AFTER logging out. . Use the special value :last to redirect to the last page you were on. //$config['logout_redirect'] = $config['fuel_path'].'login'; // to take you back to the login page instead of the last page you were on $config['logout_redirect'] = ':last'; -// used for system emails +// Used for system emails $config['from_email'] = 'admin@'.$config['domain']; -// allow for login link to allow forgotten passwords +// Allow for login link to allow forgotten passwords $config['allow_forgotten_password'] = TRUE; -// archiving +// Archiving $config['max_number_archived'] = 5; -// warn if a form field has changed before leaving page +// Warn if a form field has changed before leaving page $config['warn_if_modified'] = TRUE; -// max number of recent pages to display +// Max number of recent pages to display $config['max_recent_pages'] = 5; -// the maximum number of pages that page state will be saved before dumping the last one saved. +// The maximum number of pages that page state will be saved before dumping the last one saved. // This is used on the list pages in the admin to save sorting and filtering. Used to save on space needed for session. $config['saved_page_state_max'] = 0; -// provide a cookie path... different from the CI config if you need it (default is same as CI config) +// Provide a cookie path... different from the CI config if you need it (default is same as CI config) $config['fuel_cookie_path'] = WEB_PATH; -// external css file for additional styles possibly needed for 3rd party integration and customizing. -// must exist in the assets/css file and not the fuel/assets/css folder +// External css file for additional styles possibly needed for 3rd party integration and customizing. +// Must exist in the assets/css file and not the fuel/assets/css folder $config['xtra_css'] = ''; -// the main layout file to be used for the interface. +// The main layout file to be used for the interface. // By default, it will pull from the fuel module folder however, if an array is specified, the key will be the module and the value will be the view file. $config['main_layout'] = 'admin_main'; -// keyboard shortcuts +// Keyboard shortcuts $config['keyboard_shortcuts'] = array( 'toggle_view' => 'Ctrl+Shift+m', 'save' => 'Ctrl+Shift+s', - 'view' => 'Ctrl+Shift+p'); + 'view' => 'Ctrl+Shift+p' +); -// dashboard modules to include +// Dashboard modules to include $config['dashboards'] = array('fuel'); -// dashboard rss +// Dashboard rss $config['dashboard_rss'] = 'http://www.getfuelcms.com/blog/feed/rss'; -// text editor settings... options are markitup or ckeditor +// Text editor settings... options are markitup or ckeditor $config['text_editor'] = 'markitup'; -// ck editor specific settings +// CK editor specific settings $config['ck_editor_settings'] = array( 'toolbar' => array( - //array('Source'), - array('Bold','Italic','Strike'), - array('Format'), - array('Image','HorizontalRule'), - array('NumberedList','BulletedList'), - array('Link','Unlink'), - array('Undo','Redo','RemoveFormat'), - array('Preview'), - array('Maximize'), - ), + //array('Source'), + array('Bold','Italic','Strike'), + array('Format'), + array('Image','HorizontalRule'), + array('NumberedList','BulletedList'), + array('Link','Unlink'), + array('Undo','Redo','RemoveFormat'), + array('Preview'), + array('Maximize'), + ), 'contentsCss' => WEB_PATH.'assets/css/main.css', 'htmlEncodeOutput' => FALSE, 'entities' => FALSE, @@ -120,7 +121,7 @@ 'toolbarCanCollapse' => FALSE, ); -// an associative array of objects to attach to the fuel object +// An associative array of objects to attach to the fuel object $config['attach'] = array(); @@ -130,34 +131,37 @@ |-------------------------------------------------------------------------- */ -// languages for pages. The key is saved to the page variables +// Languages for pages. The key is saved to the page variables $config['languages'] = array( - 'english' => 'English', - ); + 'english' => 'English' +); -// specifies the method in which to look for pages with different languages. -// values can be "domain", "segment", "query_string" or "both" (which means both "segment" and "query_string") +// Specifies the method in which to look for pages with different languages. +// Values can be "domain", "segment", "query_string" or "both" (which means both "segment" and "query_string") $config['language_mode'] = 'domain'; -// append the current language value to the site URL automatically +// Append the current language value to the site URL automatically $config['add_language_to_site_url'] = FALSE; +// force the default language segment, or query string on any URLs created with site_url +$config['language_force_default_to_site_url'] = FALSE; + // The name of the query string parameter to use for setting the language $config['language_query_str_param'] = 'lang'; // The name of the cookie to hold the currently selected language. One will be generated if left blank $config['language_cookie_name'] = ''; -// default is 2 years +// Default is 2 years $config['language_cookie_exp'] = '63072000'; -// use cookies to remember a selected language +// Use cookies to remember a selected language $config['language_use_cookies'] = TRUE; -// will check the user agent during language detection +// Will check the user agent during language detection $config['language_detect_user_agent'] = ''; -// the default language to use +// The default language to use $config['language_default_option'] = NULL; @@ -167,37 +171,35 @@ |-------------------------------------------------------------------------- */ -// paths specific to FUEL... relative to the WEB_ROOT +// Paths specific to FUEL... relative to the WEB_ROOT $config['fuel_assets_path'] = 'fuel/modules/{module}/assets/'; -// excludes certain folders from being viewed +// Excludes certain folders from being viewed $config['assets_excluded_dirs'] = array('js', 'css', 'cache', 'swf', 'captchas'); -// allow subfolders to be created in the assets folder if they don't exist' +// Allow subfolders to be created in the assets folder if they don't exist' $config['assets_allow_subfolder_creation'] = TRUE; -// specifies what filetype extensions can be included in the folders +// Specifies what filetype extensions can be included in the folders $config['editable_asset_filetypes'] = array( - 'images' => 'jpg|jpeg|jpe|gif|png|zip', - 'pdf' => 'pdf|zip', - 'media' => 'mov|mp3|aiff|mpeg|zip', - 'assets' => 'jpg|jpeg|jpe|png|gif|mov|mpeg|mp3|wav|aiff|pdf|css|zip' - ); + 'images' => 'jpg|jpeg|jpe|gif|png|zip', + 'pdf' => 'pdf|zip', + 'media' => 'mov|mp3|aiff|mpeg|zip', + 'assets' => 'jpg|jpeg|jpe|png|gif|mov|mpeg|mp3|wav|aiff|pdf|css|zip' +); -// max upload files size for assets +// Max upload files size for assets $config['assets_upload_max_size'] = '1000'; -// max width for asset images being uploaded +// Max width for asset images being uploaded $config['assets_upload_max_width'] = '1024'; -// max height for asset images being uploaded +// Max height for asset images being uploaded $config['assets_upload_max_height'] = '768'; -// javascript files (mostly jquery plugins) to be included other then the controller js files - - +// Javascript files (mostly jquery plugins) to be included other then the controller js files $config['fuel_javascript'] = array( -/* + /* 'fuel' => array( 'jquery/plugins/jquery-ui-1.8.17.custom.min', 'jquery/plugins/jquery.easing', @@ -229,22 +231,20 @@ // http://stackoverflow.com/questions/10251272/what-could-cause-this-randomly-appearing-error-inside-jquery-itself 'jquery/plugins/chrome_pushstack_fix.js', 'jqx/plugins/util.js', - 'fuel/global')*/ - - + 'fuel/global') + */ 'fuel' => 'fuel/fuel.min' ); - -// css other then the fuel.css file which automatically gets loaded +// CSS other then the fuel.css file which automatically gets loaded $config['fuel_css'] = array(); -// allow for asset optimization. Requires that all module folders have a writable assets/cache folder -// values can be TRUE, FALSE, inline, gzip, whitespace, or combine. See the config/asset.php file for more info +// Allow for asset optimization. Requires that all module folders have a writable assets/cache folder +// Values can be TRUE, FALSE, inline, gzip, whitespace, or combine. See the config/asset.php file for more info $config['fuel_assets_output'] = FALSE; -// set this value to the file permission that will be applied with chmod() after a file gets uploaded -// value should be a unix file permission integer (i.e. 0755) +// Set this value to the file permission that will be applied with chmod() after a file gets uploaded +// Value should be a unix file permission integer (i.e. 0755) $config['set_upload_file_perms'] = FALSE; @@ -254,53 +254,54 @@ |-------------------------------------------------------------------------- */ -// sets the site to offline mode. Uses "offline" view file to render page +// Sets the site to offline mode. Uses "offline" view file to render page $config['offline'] = FALSE; -// restrict fuel to only certain ip addresses (can be string or an array of IP addresses) +// Restrict fuel to only certain ip addresses (can be string or an array of IP addresses) $config['restrict_to_remote_ip'] = array(); -// restrict fuel webhooks like the migrate functionality to only certain IP address (can be string or an array of IP addresses) +// Restrict fuel webhooks like the migrate functionality to only certain IP address (can be string or an array of IP addresses) $config['webhook_remote_ip'] = array(); -// default password to alert against +// Sefault password to alert against $config['default_pwd'] = 'admin'; -// enable the FUEL admin or not? +// Enable the FUEL admin or not? $config['admin_enabled'] = FALSE; -// the number of times someone can attempt to login before they are locked out for 1 minute +// The number of times someone can attempt to login before they are locked out for 1 minute $config['num_logins_before_lock'] = 3; -// the number of seconds to lock out a person upon reaching the max number failed login attempts +// The number of seconds to lock out a person upon reaching the max number failed login attempts $config['seconds_to_unlock'] = 60; // If you set a dev password, the site will require a password to view $config['dev_password'] = ''; -// will auto search view files. The max_page_params config can also be used for this as well +// Will auto search view files. The max_page_params config can also be used for this as well // If the URI is about/history and the about/history view does not exist but about does, it will render the about page $config['auto_search_views'] = FALSE; -// functions that can be used for the sanitize_input value on a basic module. +// Functions that can be used for the sanitize_input value on a basic module. // The key of the array is what should be used when configuring your module $config['module_sanitize_funcs'] = array( 'xss' => 'xss_clean', 'php' => 'encode_php_tags', 'template' => 'php_to_template_syntax', - 'entities' => 'htmlentities', + 'entities' => 'htmlentities' ); + /* |-------------------------------------------------------------------------- | Module settings |-------------------------------------------------------------------------- */ -// specifies which modules are allowed to be used in the FUEL admin (e.g. 'user_guide', 'blog', 'backup'...) +// Specifies which modules are allowed to be used in the FUEL admin (e.g. 'user_guide', 'blog', 'backup'...) $config['modules_allowed'] = array(); -// site... Dashboard will always be there +// Site... Dashboard will always be there $config['nav']['site'] = array( 'dashboard' => lang('module_dashboard'), 'pages' => lang('module_pages'), @@ -310,50 +311,52 @@ 'categories' => lang('module_categories'), 'assets' => lang('module_assets'), 'sitevariables' => lang('module_sitevariables') - ); +); -// my modules... if set to empty array, then it will automatically include all in MY_fuel_modules.php +// My modules... if set to empty array, then it will automatically include all in MY_fuel_modules.php $config['nav']['modules'] = array(); -// tools +// Tools $config['nav']['tools'] = array(); -// manage +// Manage $config['nav']['manage'] = array( - 'users' => lang('module_users'), - 'permissions' => lang('module_permissions'), - 'manage/cache' => lang('module_manage_cache'), - 'logs' => lang('module_manage_activity'), - 'settings' => lang('module_manage_settings'), - ); - -// will auto arrange the navigation into the normal order + 'users' => lang('module_users'), + 'permissions' => lang('module_permissions'), + 'manage/cache' => lang('module_manage_cache'), + 'logs' => lang('module_manage_activity'), + 'settings' => lang('module_manage_settings'), +); + +// Will auto arrange the navigation into the normal order $config['nav_auto_arrange'] = TRUE; + + /* |-------------------------------------------------------------------------- | Fuel Router settings |-------------------------------------------------------------------------- */ -// the default view for home +// The default view for home $config['default_home_view'] = 'home'; -// turn on cache. Can be TRUE/FALSE or cms +// Turn on cache. Can be TRUE/FALSE or cms $config['use_page_cache'] = 'cms'; -// how long to cache the page. A value of 0 means forever until the page or other modules have been updated +// How long to cache the page. A value of 0 means forever until the page or other modules have been updated $config['page_cache_ttl'] = 0; -// the name of the group the cache is associated with (so you can just remove the group) +// The name of the group the cache is associated with (so you can just remove the group) $config['page_cache_group'] = 'pages'; -// maximum number of paramters that can be passed to the page. Used to cut down on queries to the db. +// Maximum number of paramters that can be passed to the page. Used to cut down on queries to the db. // If it is an array, then it will loop through the array using the keys to match against a regular expression: // $config['max_page_params'] = array('about/news/' => 1); $config['max_page_params'] = 0; -// a list of URI paths that will always pull from the view folder... can use :any, like routes -// Good to use if you are passing page parameters to your pages controlled in the admin and +// A list of URI paths that will always pull from the view folder... can use :any, like routes +// good to use if you are passing page parameters to your pages controlled in the admin and // you have a page you always want to pull from a view file // (e.g. URI = company/press and you have a page of "company" in the admin with max page params set to 1 or more // it would normally pull the company page if no company/press page existed in the admin and in this case @@ -367,22 +370,23 @@ |-------------------------------------------------------------------------- */ -// the FUEL specific database tables +// The FUEL specific database tables $config['tables'] = array( - 'fuel_archives' => 'fuel_archives', - 'fuel_blocks' => 'fuel_blocks', - 'fuel_categories' => 'fuel_categories', - 'fuel_logs' => 'fuel_logs', - 'fuel_navigation' => 'fuel_navigation', - 'fuel_navigation_groups' => 'fuel_navigation_groups', - 'fuel_pages' => 'fuel_pages', - 'fuel_pagevars' => 'fuel_page_variables', - 'fuel_permissions' => 'fuel_permissions', - 'fuel_relationships' => 'fuel_relationships', - 'fuel_settings' => 'fuel_settings', - 'fuel_tags' => 'fuel_tags', - 'fuel_users' => 'fuel_users', - ); + 'fuel_archives' => 'fuel_archives', + 'fuel_blocks' => 'fuel_blocks', + 'fuel_categories' => 'fuel_categories', + 'fuel_logs' => 'fuel_logs', + 'fuel_navigation' => 'fuel_navigation', + 'fuel_navigation_groups' => 'fuel_navigation_groups', + 'fuel_pages' => 'fuel_pages', + 'fuel_pagevars' => 'fuel_page_variables', + 'fuel_permissions' => 'fuel_permissions', + 'fuel_relationships' => 'fuel_relationships', + 'fuel_settings' => 'fuel_settings', + 'fuel_tags' => 'fuel_tags', + 'fuel_users' => 'fuel_users' +); + /* |-------------------------------------------------------------------------- @@ -390,16 +394,16 @@ |-------------------------------------------------------------------------- */ -// the group to associate with the auto-created navigation item +// The group to associate with the auto-created navigation item $config['auto_page_navigation_group_id'] = 1; -// automatically removes the following path from the location +// Automatically removes the following path from the location $config['page_uri_prefix'] = ''; -// view the page from the admin in a new window or within a modal window +// View the page from the admin in a new window or within a modal window $config['view_in_new_window'] = TRUE; -// runs the parsing process twice for pages created in the CMS which allows +// Runs the parsing process twice for pages created in the CMS which allows // for variables to be set from within blocks and layout fields and can // bubble up to the layout view file (takes slightly longer to render // if caching is turned off). Valid values are TRUE, FALSE, or 'AUTO' which @@ -414,47 +418,45 @@ |-------------------------------------------------------------------------- */ -// the files/folders to generate with the CLI generate command +// The files/folders to generate with the CLI generate command $config['generate'] = array( - 'search' => array('app', 'fuel'), - 'advanced' => array( - 'assets/css/{module}.css', - 'assets/images/ico_cog.png', - 'assets/js/{ModuleName}Controller.js', - 'assets/cache/', - 'config/{module}.php', - 'config/{module}_constants.php', - 'config/{module}_routes.php', - 'controllers/{module}_module.php', - 'helpers/{module}_helper.php', - 'install/install.php', - 'libraries/Fuel_{module}.php', - 'language/english/{module}_lang.php', - 'models/', - 'tests/sql/', - 'views/_admin/{module}.php', - 'views/_blocks/', - 'views/_docs/index.php', - 'views/_layouts/', - ), - 'simple' => 'MY_fuel_modules.php', - 'model' => array( - '{model}_model.php', - 'sql/{table}.sql', - ), - ); - + 'search' => array('app', 'fuel'), + 'advanced' => array( + 'assets/css/{module}.css', + 'assets/images/ico_cog.png', + 'assets/js/{ModuleName}Controller.js', + 'assets/cache/', + 'config/{module}.php', + 'config/{module}_constants.php', + 'config/{module}_routes.php', + 'controllers/{module}_module.php', + 'helpers/{module}_helper.php', + 'install/install.php', + 'libraries/Fuel_{module}.php', + 'language/english/{module}_lang.php', + 'models/', + 'tests/sql/', + 'views/_admin/{module}.php', + 'views/_blocks/', + 'views/_docs/index.php', + 'views/_layouts/', + ), + 'simple' => 'MY_fuel_modules.php', + 'model' => array( + '{model}_model.php', + 'sql/{table}.sql', + ) +); @include(APPPATH.'config/MY_fuel.php'); -// EXAMPLE: Uncomment if you want to controll these options from the CMS +// EXAMPLE: Uncomment if you want to control these options from the CMS // $config['settings'] = array(); // $config['settings']['site_name'] = array('value' => $config['site_name']); -// if (!empty($config['modules_allowed'])) +// if ( ! empty($config['modules_allowed'])) // { // $config['settings']['modules_allowed'] = array('type' => 'multi', 'options' => array_combine($config['modules_allowed'], $config['modules_allowed'])); // } - /* End of file fuel.php */ /* Location: ./modules/fuel/config/fuel.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/config/fuel_constants.php b/fuel/modules/fuel/config/fuel_constants.php index 23e691d8e..93cd0f10e 100644 --- a/fuel/modules/fuel/config/fuel_constants.php +++ b/fuel/modules/fuel/config/fuel_constants.php @@ -1,6 +1,6 @@ <?php // INSTALL_ROOT is defined in the index.php bootstrap file -define('FUEL_VERSION', '1.2'); +define('FUEL_VERSION', '1.2.1'); define('MODULES_FOLDER', '../modules'); define('FUEL_FOLDER', 'fuel'); define('MODULES_PATH', APPPATH.MODULES_FOLDER.'/'); @@ -8,34 +8,30 @@ define('FUEL_PATH', MODULES_PATH.FUEL_FOLDER.'/'); define('WEB_ROOT', str_replace('\\', '/', realpath(dirname(SELF)).DIRECTORY_SEPARATOR)); // replace \ with / for windows -// needed to take care of some server environments +// Needed to take care of some server environments $_SERVER['SCRIPT_NAME'] = preg_replace('#^/(.+)\.php/(.*)#', '/$1.php', $_SERVER['SCRIPT_NAME']); define('WEB_PATH', str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME'])); -// change slashes for some Windows platforms +// Change slashes for some Windows platforms $_FUEL_SEGS = explode('/', str_replace("\\", '/', $_SERVER['SCRIPT_FILENAME'])); define('WEB_FOLDER', (count($_FUEL_SEGS) > 1) ? $_FUEL_SEGS[count($_FUEL_SEGS)-2] : '/'); define('MODULES_WEB_PATH', FUEL_FOLDER.'/modules/'); - -// must include language helper if you want to use lang function +// Must include language helper if you want to use lang function include(APPPATH.'helpers/MY_language_helper.php'); include(FUEL_PATH.'config/fuel.php'); -// used for CLI... must create $_SERVER['REQUEST_URI] +// Used for CLI... must create $_SERVER['REQUEST_URI] if (defined('STDIN')) { $args = array_slice($_SERVER['argv'], 1); $_SERVER['REQUEST_URI'] = $args ? implode('/', $args) : ''; } - - define('FUEL_ROUTE', $config['fuel_path']); - -// DETECT URI PATH +// Detect URI path if (isset($_SERVER['REQUEST_URI'])) { $_URI_PATH = $_SERVER['REQUEST_URI']; @@ -51,21 +47,21 @@ define('USE_FUEL_ROUTES', (strpos($_URI_PATH, '/'.$config['fuel_path']) !== FALSE)); -foreach($config['modules_allowed'] as $module) +foreach ($config['modules_allowed'] as $module) { $constants_path = MODULES_PATH . $module . '/config/' . $module . '_constants.php'; + if (file_exists($constants_path)) { require_once($constants_path); } } - -if (!defined('BASE_URL')) +if ( ! defined('BASE_URL')) { $_base_path = $_SERVER['HTTP_HOST'].str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); - if (!empty($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) !== 'off' OR $_SERVER['SERVER_PORT'] == 443) + if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' OR $_SERVER['SERVER_PORT'] == 443) { define('BASE_URL', "https://".$_base_path); } diff --git a/fuel/modules/fuel/config/fuel_hooks.php b/fuel/modules/fuel/config/fuel_hooks.php index f45705593..d0e56be27 100644 --- a/fuel/modules/fuel/config/fuel_hooks.php +++ b/fuel/modules/fuel/config/fuel_hooks.php @@ -10,49 +10,49 @@ */ $hook['pre_controller'][] = array( - 'class' => 'Fuel_hooks', - 'function' => 'pre_controller', - 'filename' => 'Fuel_hooks.php', - 'filepath' => 'hooks', - 'params' => array(), - 'module' => FUEL_FOLDER, - ); + 'class' => 'Fuel_hooks', + 'function' => 'pre_controller', + 'filename' => 'Fuel_hooks.php', + 'filepath' => 'hooks', + 'params' => array(), + 'module' => FUEL_FOLDER +); $hook['post_controller_constructor'][] = array( - 'class' => 'Fuel_hooks', - 'function' => 'dev_password', - 'filename' => 'Fuel_hooks.php', - 'filepath' => 'hooks', - 'params' => array(), - 'module' => FUEL_FOLDER, - ); + 'class' => 'Fuel_hooks', + 'function' => 'dev_password', + 'filename' => 'Fuel_hooks.php', + 'filepath' => 'hooks', + 'params' => array(), + 'module' => FUEL_FOLDER +); $hook['post_controller_constructor'][] = array( - 'class' => 'Fuel_hooks', - 'function' => 'offline', - 'filename' => 'Fuel_hooks.php', - 'filepath' => 'hooks', - 'params' => array(), - 'module' => FUEL_FOLDER, - ); + 'class' => 'Fuel_hooks', + 'function' => 'offline', + 'filename' => 'Fuel_hooks.php', + 'filepath' => 'hooks', + 'params' => array(), + 'module' => FUEL_FOLDER +); $hook['post_controller_constructor'][] = array( - 'class' => 'Fuel_hooks', - 'function' => 'redirects', - 'filename' => 'Fuel_hooks.php', - 'filepath' => 'hooks', - 'params' => array(), - 'module' => FUEL_FOLDER, - ); + 'class' => 'Fuel_hooks', + 'function' => 'redirects', + 'filename' => 'Fuel_hooks.php', + 'filepath' => 'hooks', + 'params' => array(), + 'module' => FUEL_FOLDER +); $hook['post_controller'][] = array( - 'class' => 'Fuel_hooks', - 'function' => 'post_controller', - 'filename' => 'Fuel_hooks.php', - 'filepath' => 'hooks', - 'params' => array(), - 'module' => FUEL_FOLDER, - ); + 'class' => 'Fuel_hooks', + 'function' => 'post_controller', + 'filename' => 'Fuel_hooks.php', + 'filepath' => 'hooks', + 'params' => array(), + 'module' => FUEL_FOLDER +); /* End of file fuel_hooks.php */ /* Location: ./modules/fuel/config/fuel_hooks.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/config/fuel_layouts.php b/fuel/modules/fuel/config/fuel_layouts.php index 76aece595..4b7078910 100644 --- a/fuel/modules/fuel/config/fuel_layouts.php +++ b/fuel/modules/fuel/config/fuel_layouts.php @@ -67,15 +67,21 @@ $config['layouts']['301_redirect'] = array( 'label' => '301 Redirect', 'fields' => array( - 'copy' => array('type' => 'copy', 'label' => lang('layout_field_301_redirect_copy')), - 'redirect_to' => array('label' => lang('layout_field_redirect_to')), + 'copy' => array( + 'type' => 'copy', + 'label' => lang('layout_field_301_redirect_copy') + ), + 'redirect_to' => array('label' => lang('layout_field_redirect_to')) ) ); $config['layouts']['alias'] = array( 'label' => 'Alias', 'fields' => array( - 'copy' => array('type' => 'copy', 'label' => lang('layout_field_alias_copy')), + 'copy' => array( + 'type' => 'copy', + 'label' => lang('layout_field_alias_copy') + ), 'alias' => array('label' => lang('layout_field_alias')), ) ); @@ -91,7 +97,10 @@ $config['layouts']['sitemap_xml'] = array( 'label' => 'sitemap.xml', 'fields' => array( - 'copy' => array('type' => 'copy', 'label' => lang('layout_field_sitemap_xml_copy')), + 'copy' => array( + 'type' => 'copy', + 'label' => lang('layout_field_sitemap_xml_copy') + ), 'frequency' => array( 'type' => 'select', 'options' => array( @@ -104,27 +113,39 @@ 'never' => lang('layout_field_frequency_never'), ), 'value' => 'always', - 'label' => lang('layout_field_frequency')), + 'label' => lang('layout_field_frequency') + ) ) ); $config['layouts']['robots_txt'] = array( 'label' => 'robots.txt', 'fields' => array( - 'copy' => array('type' => 'copy', 'label' => lang('layout_field_robots_txt_copy')), - 'body' => array('type' => 'textarea', 'label' => lang('layout_field_body'), 'value' => "User-agent: *\nDisallow: /fuel/", 'class' => 'no_editor'), + 'copy' => array( + 'type' => 'copy', + 'label' => lang('layout_field_robots_txt_copy') + ), + 'body' => array( + 'type' => 'textarea', + 'label' => lang('layout_field_body'), + 'value' => "User-agent: *\nDisallow: /fuel/", 'class' => 'no_editor' + ) ) ); $config['layouts']['none'] = array( 'label' => 'None', 'fields' => array( - 'copy' => array('type' => 'copy', 'label' => lang('layout_field_none_copy')), - 'body' => array('type' => 'textarea', 'label' => lang('layout_field_body')), + 'copy' => array( + 'type' => 'copy', + 'label' => lang('layout_field_none_copy') + ), + 'body' => array( + 'type' => 'textarea', + 'label' => lang('layout_field_body') + ) ) ); - - /* End of file fuel_layouts.php */ /* Location: ./modules/fuel/config/fuel_layouts.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/config/fuel_modules.php b/fuel/modules/fuel/config/fuel_modules.php index bcf5359d5..3f2f0e778 100644 --- a/fuel/modules/fuel/config/fuel_modules.php +++ b/fuel/modules/fuel/config/fuel_modules.php @@ -9,7 +9,7 @@ $config['modules'] = array(); -// page module init values +// Page module init values $config['modules']['pages'] = array( 'module_name' => 'Pages', 'model_location' => 'fuel', @@ -27,15 +27,44 @@ 'js_controller' => 'fuel.controller.PageController', 'js_controller_params' => array('import_field' => 'vars--body'), 'preview_path' => '{location}', - 'permission' => array('pages', 'create', 'edit', 'pages/upload' => 'pages/create', 'publish', 'delete'), + 'permission' => array( + 'pages', 'create', 'edit', + 'pages/upload' => 'pages/create', + 'publish', 'delete' + ), 'instructions' => lang('pages_instructions'), 'archivable' => TRUE, 'sanitize_input' => array('template','php'), 'list_actions' => array('pages/upload' => lang('btn_upload')), - 'item_actions' => array('save', 'view', 'publish', 'delete', 'duplicate', 'replace', 'create', 'others' => array('pages/upload' => lang('btn_upload'))), + 'item_actions' => array( + 'save', 'view', 'publish', 'delete', 'duplicate', 'replace', 'create', + 'others' => array('pages/upload' => lang('btn_upload')) + ), + 'advanced_search' => TRUE, + 'filters' => array( + 'layout' => array( + 'default' => 1, + 'label' => lang('form_label_layout'), + 'type' => 'select', + 'model' => 'fuel_pages_model', + 'model_params' => array('layout', 'layout'), + 'hide_if_one' => TRUE, + 'default' => '', + 'first_option' => 'Select a layout...', + ), + 'published' => array( + 'default' => 1, + 'label' => lang('form_label_published'), + 'type' => 'select', + 'options' => array('yes' => 'Published', 'no' =>'Unpublished'), + 'hide_if_one' => TRUE, + 'default' => '', + 'first_option' => 'Select only...', + ), + ), ); -// page module init values +// Page module init values $config['modules']['pagevariables'] = array( 'module_name' => 'Page Variables', 'model_location' => 'fuel', @@ -51,26 +80,36 @@ 'sanitize_input' => array('template','php'), 'default_col' => 'page_id', 'default_order' => 'asc', - 'permission' => array('edit' => 'pages', 'publish' => 'pages/publish', 'delete' => 'pages/delete'), + 'permission' => array( + 'edit' => 'pages', + 'publish' => 'pages/publish', + 'delete' => 'pages/delete' + ), 'hidden' => TRUE ); -// navigation module init values +// Navigation module init values $config['modules']['blocks'] = array( 'module_name' => 'Blocks', 'model_location' => 'fuel', 'model_name' => 'fuel_blocks_model', 'display_field' => 'name', - 'permission' => array('blocks', 'create', 'edit', 'blocks/upload' => 'blocks/create', 'publish', 'delete'), + 'permission' => array( + 'blocks', 'create', 'edit', + 'blocks/upload' => 'blocks/create', + 'publish', 'delete' + ), 'default_col' => 'name', 'default_order' => 'asc', 'js_controller' => 'fuel.controller.BlockController', 'sanitize_input' => array('template','php'), 'list_actions' => array('blocks/upload' => lang('btn_upload')), - 'item_actions' => array('save', 'view', 'publish', 'delete', 'duplicate', 'replace', 'create', 'others' => array('blocks/upload' => lang('btn_upload'))), + 'item_actions' => array('save', 'view', 'publish', 'delete', 'duplicate', 'replace', 'create', + 'others' => array('blocks/upload' => lang('btn_upload')) + ) ); -// navigation module init values +// Navigation module init values $config['modules']['navigation'] = array( 'module_name' => 'Navigation', 'model_location' => 'fuel', @@ -80,14 +119,29 @@ 'default_order' => 'asc', 'js_controller' => 'fuel.controller.NavigationController', 'preview_path' => '', - 'permission' => array('navigation', 'create', 'edit', 'navigation/upload' => 'navigation/create', 'publish', 'delete'), + 'permission' => array( + 'navigation', 'create', 'edit', + 'navigation/upload' => 'navigation/create', + 'publish', 'delete' + ), 'instructions' => lang('navigation_instructions'), - 'filters' => array('group_id' => array('default' => 1, 'label' => lang('form_label_navigation_group'), 'type' => 'select', 'model' => 'fuel_navigation_groups_model', 'hide_if_one' => TRUE)), + 'filters' => array( + 'group_id' => array( + 'default' => 1, + 'label' => lang('form_label_navigation_group'), + 'type' => 'select', + 'model' => 'fuel_navigation_groups_model', + 'hide_if_one' => TRUE + ) + ), 'archivable' => TRUE, - 'list_actions' => array('navigation/upload' => lang('btn_upload'), 'navigation/download' => lang('btn_download')) + 'list_actions' => array( + 'navigation/upload' => lang('btn_upload'), + 'navigation/download' => lang('btn_download') + ) ); -// navigation module init values +// Navigation module init values $config['modules']['navigation_group'] = array( 'module_name' => 'Navigation Groups', 'model_location' => 'fuel', @@ -95,12 +149,12 @@ 'table_headers' => array( 'id', 'name', - 'published', + 'published' ), 'permission' => 'navigation' ); -// navigation module init values +// Navigation module init values $config['modules']['tags'] = array( 'module_name' => 'Tags', 'model_location' => 'fuel', @@ -109,12 +163,11 @@ 'id', 'name', 'slug', - 'published', - ), - //'filters' => array('context' => array('label' => lang('form_label_category'), 'type' => 'select', 'model' => 'fuel_categories_model', 'first_option' => '')), + 'published' + ) ); -// navigation module init values +// Navigation module init values $config['modules']['categories'] = array( 'module_name' => 'Categories', 'model_location' => 'fuel', @@ -128,10 +181,21 @@ 'precedence', 'published', ), - 'filters' => array('context' => array('label' => lang('form_label_context'), 'type' => 'select', 'model' => array(FUEL_FOLDER => array('fuel_categories_model' => 'context_options_list')), 'first_option' => 'Select a context...')), + 'filters' => array( + 'context' => array( + 'label' => lang('form_label_context'), + 'type' => 'select', + 'model' => array( + FUEL_FOLDER => array( + 'fuel_categories_model' => 'context_options_list' + ) + ), + 'first_option' => 'Select a context...' + ) + ) ); -// assets module init values +// Assets module init values $config['modules']['assets'] = array( 'module_name' => 'Assets', 'model_location' => 'fuel', @@ -150,7 +214,17 @@ 'preview_path' => '', 'permission' => 'assets', 'instructions' => lang('assets_instructions'), - 'filters' => array('group_id' => array('default' => 0, 'label' => lang('form_label_asset_folder'), 'type' => 'select', 'options' => array(0 => 'images'), 'default' => 'images')), + 'filters' => array( + 'group_id' => array( + 'default' => 0, + 'label' => lang('form_label_asset_folder'), + 'type' => 'select', + 'options' => array( + 0 => 'images' + ), + 'default' => 'images' + ) + ), 'archivable' => FALSE, 'table_actions' => array('DELETE'), 'rows_selectable' => FALSE, @@ -158,7 +232,7 @@ 'sanitize_images' => FALSE ); -// sitevariable module init values +// Sitevariable module init values $config['modules']['sitevariables'] = array( 'module_name' => 'Site Variables', 'model_location' => 'fuel', @@ -170,7 +244,6 @@ 'scope', 'active', ), - 'display_field' => 'name', 'preview_path' => '', 'permission' => 'sitevariables', @@ -180,8 +253,7 @@ 'clear_cache_on_save' => FALSE ); - -// users module init values +// Users module init values $config['modules']['users'] = array( 'module_name' => 'Users', 'model_location' => 'fuel', @@ -193,14 +265,13 @@ 'first_name', 'last_name', 'super_admin', - 'active', + 'active' ), 'language_col' => FALSE, // so it won't render the dropdown filter select 'js_controller' => 'fuel.controller.UserController', 'display_field' => 'email', 'preview_path' => '', 'permission' => 'users', - //'edit_method' => 'user_info', 'instructions' => lang('users_instructions'), 'archivable' => FALSE, 'table_actions' => array( @@ -210,7 +281,7 @@ if ($cols[\'super_admin\'] != "yes") { $CI =& get_instance(); $link = ""; - if ($CI->fuel->auth->has_permission($CI->permission, "delete") AND isset($cols[$CI->model->key_field()])) + if ($CI->fuel->auth->has_permission($CI->permission, "delete") && isset($cols[$CI->model->key_field()])) { $url = site_url("/".$CI->config->item("fuel_path", "fuel").$CI->module_uri."/delete/".$cols[$CI->model->key_field()]); $link = "<a href=\"".$url."\">".lang("table_action_delete")."</a>"; @@ -224,7 +295,7 @@ $CI =& get_instance(); $link = ""; $user = $CI->fuel->auth->user_data(); - if ($CI->fuel->auth->is_super_admin() AND ($cols[$CI->model->key_field()] != $user["id"])) + if ($CI->fuel->auth->is_super_admin() && ($cols[$CI->model->key_field()] != $user["id"])) { $url = site_url("/".$CI->config->item("fuel_path", "fuel").$CI->module_uri."/login_as/".$cols[$CI->model->key_field()]); $link = "<a href=\"".$url."\">".lang("table_action_login_as")."</a>"; @@ -234,10 +305,10 @@ ), ), 'item_actions' => array('save', 'activate', 'duplicate', 'create', 'delete'), - 'clear_cache_on_save' => FALSE, + 'clear_cache_on_save' => FALSE ); -// permissions module init values +// Permissions module init values $config['modules']['permissions'] = array( 'module_name' => 'Permissions', 'model_location' => 'fuel', @@ -258,7 +329,7 @@ 'clear_cache_on_save' => FALSE ); -// permissions module init values +// Permissions module init values $config['modules']['logs'] = array( 'module_name' => 'Activity Log', 'model_location' => 'fuel', @@ -282,12 +353,19 @@ 'rows_selectable' => FALSE, 'clear_cache_on_save' => FALSE, 'filters' => array( - 'type' => array('type' => 'select', 'label' => 'Type:', 'options' => array('info' => 'info', 'debug' => 'debug'), 'first_option' => lang('label_select_one')), - ), + 'type' => array( + 'type' => 'select', + 'label' => 'Type:', + 'options' => array( + 'info' => 'info', + 'debug' => 'debug' + ), + 'first_option' => lang('label_select_one') + ) + ) ); //@include(APPPATH.'config/MY_fuel_modules.php'); - /* End of file fuel_modules.php */ /* Location: ./modules/fuel/config/fuel_modules.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/config/fuel_routes.php b/fuel/modules/fuel/config/fuel_routes.php index 0e47aa68a..7538f426e 100644 --- a/fuel/modules/fuel/config/fuel_routes.php +++ b/fuel/modules/fuel/config/fuel_routes.php @@ -11,63 +11,59 @@ $module_folder = MODULES_PATH.'/'; -// config isn't loaded yet so do it manually' +// Config isn't loaded yet so do it manually' include(FUEL_PATH.'config/fuel.php'); -// load any public routes for advanced modules +// Load any public routes for advanced modules foreach ($config['modules_allowed'] as $module) { $routes_path = $module_folder.$module.'/config/'.$module.'_routes.php'; - - if (file_exists($routes_path)) - { - include($routes_path); - } + + if (file_exists($routes_path)) include($routes_path); } -// to prevent the overhead of this on every request, we do a quick check of the path... USE_FUEL_ROUTES is defined in fuel_constants +// To prevent the overhead of this on every request, we do a quick check of the path... USE_FUEL_ROUTES is defined in fuel_constants if (USE_FUEL_ROUTES) { - $route[FUEL_ROUTE.'login|'.FUEL_ROUTE.'login/:any'] = "fuel/login"; // so we can pass forward param - + $module_folder = MODULES_PATH; include(FUEL_PATH.'config/fuel_modules.php'); @include(APPPATH.'/config/MY_fuel_modules.php'); - + $modules = array_keys($config['modules']); $modules = array_merge($config['modules_allowed'], $modules); - foreach($modules as $module) + foreach ($modules as $module) { - // check FUEL folder for controller first... if not there then we use the default module to map to - if (!file_exists($module_folder.FUEL_FOLDER.'/controllers/'.$module.EXT) - AND !file_exists($module_folder.$module.'/controllers/'.$module.'_module'.EXT) - ) + // Check FUEL folder for controller first... if not there then we use the default module to map to + if ( ! file_exists($module_folder.FUEL_FOLDER.'/controllers/'.$module.EXT) + && ! file_exists($module_folder.$module.'/controllers/'.$module.'_module'.EXT) + ) { $route[FUEL_ROUTE.$module] = FUEL_FOLDER.'/module'; $route[FUEL_ROUTE.$module.'/(.*)'] = FUEL_FOLDER.'/module/$1'; } - // check if controller does exist in FUEL folder and if so, create the proper ROUTE if it does not equal the FUEL_FOLDER + // Check if controller does exist in FUEL folder and if so, create the proper ROUTE if it does not equal the FUEL_FOLDER else if (file_exists($module_folder.FUEL_FOLDER.'/controllers/'.$module.EXT)) { $route[FUEL_ROUTE.$module] = FUEL_FOLDER.'/'.$module; $route[FUEL_ROUTE.$module.'/(.*)'] = FUEL_FOLDER.'/'.$module.'/$1'; } - // check module specific folder next + // Check module specific folder next else if (file_exists($module_folder.$module.'/controllers/'.$module.'_module'.EXT)) { $route[FUEL_ROUTE.$module] = $module.'/'.$module.'_module'; $route[FUEL_ROUTE.$module.'/(.*)'] = $module.'/'.$module.'_module/$1'; } } - // catch all + + // Catch all $route[FUEL_ROUTE.'(:any)'] = FUEL_FOLDER."/$1"; } - /* End of file fuel_routes.php */ /* Location: ./modules/fuel/config/fuel_routes.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/assets.php b/fuel/modules/fuel/controllers/assets.php index ea3cf2a8a..365934b39 100644 --- a/fuel/modules/fuel/controllers/assets.php +++ b/fuel/modules/fuel/controllers/assets.php @@ -14,6 +14,7 @@ public function items($inline = FALSE) { $dirs = $this->fuel->assets->dirs(); $this->filters['group_id']['options'] = $dirs; + parent::items($inline); } @@ -21,36 +22,31 @@ public function create($dir = NULL, $inline = FALSE) { $id = NULL; - if (!empty($dir)) - { - $dir = uri_safe_decode($dir); - } + if ( ! empty($dir)) $dir = uri_safe_decode($dir); + + if ($inline !== FALSE) $this->fuel->admin->set_inline(TRUE); - if ($inline !== FALSE) - { - $this->fuel->admin->set_inline(TRUE); - } - $inline = $this->fuel->admin->is_inline(); - if (!empty($_POST)) + if ( ! empty($_POST)) { - if (!empty($_FILES['userfile___0']) AND $_FILES['userfile___0']['error'] != 4) + if (( ! empty($_FILES['userfile']) AND $_FILES['userfile']['error'] != 4) OR ( ! empty($_FILES['userfile___0']) AND $_FILES['userfile___0']['error'] != 4)) { - $this->model->on_before_post(); if ($this->input->post('asset_folder')) { $dir = $this->input->get_post('asset_folder', TRUE); - if (!in_array($dir, array_keys($this->fuel->assets->dirs()))) + + if ( ! in_array($dir, array_keys($this->fuel->assets->dirs()))) { show_404(); } } - + $subfolder = ($this->config->item('assets_allow_subfolder_creation', 'fuel')) ? str_replace('..'.DIRECTORY_SEPARATOR, '', $this->input->get_post('subfolder', TRUE)) : ''; // remove any going down the folder structure for protections $upload_path = $this->config->item('assets_server_path').$this->fuel->assets->dir($dir).DIRECTORY_SEPARATOR.$subfolder; //assets_server_path is in assets config + $posted['upload_path'] = $upload_path; $posted['overwrite'] = ($this->input->get_post('overwrite')) ? TRUE : FALSE; $posted['create_thumb'] = ($this->input->get_post('create_thumb')) ? TRUE : FALSE; @@ -64,6 +60,13 @@ public function create($dir = NULL, $inline = FALSE) $redirect_to = uri_safe_decode($this->input->get_post('redirect_to')); $id = $posted['file_name']; + + // run before_create hook + $this->_run_hook('before_create', $posted); + + // run before_save hook + $this->_run_hook('before_save', $posted); + if ($this->fuel->assets->upload($posted)) { foreach($_FILES as $filename => $fileinfo) @@ -89,11 +92,13 @@ public function create($dir = NULL, $inline = FALSE) $uploaded_file_name_arr = array(); $uploaded_file_webpath_arr = array(); + foreach($uploaded_data as $ud) { $uploaded_file_name_arr[] = trim(str_replace(assets_server_path().$dir, '', $ud['full_path']), '/'); $uploaded_file_webpath_arr[] = assets_server_to_web_path($ud['full_path']); } + // set the uploaded file name to a concatenated string separated by commas $uploaded_file_name = implode(', ', $uploaded_file_name_arr); @@ -102,14 +107,14 @@ public function create($dir = NULL, $inline = FALSE) $this->session->set_flashdata('uploaded_post', $flashdata); $this->fuel->admin->set_notification(lang('data_saved'), Fuel_admin::NOTIFICATION_SUCCESS); - + $this->model->on_after_post($posted); $inline = $this->fuel->admin->is_inline(); $query_str = query_str(array(), TRUE); - if (!empty($redirect_to)) + if ( ! empty($redirect_to)) { $url = $redirect_to; } @@ -121,36 +126,33 @@ public function create($dir = NULL, $inline = FALSE) { $url = fuel_uri($this->module.'/create/'.uri_safe_encode($dir).$query_str, FALSE); } + redirect($url); - } else { add_errors($this->fuel->assets->errors()); } - } else { add_errors(lang('error_upload')); } } - + $form_vars = $this->input->get(NULL, TRUE); - if (!empty($dir)) - { - $form_vars['asset_folder'] = $dir; - } - + + if ( ! empty($dir)) $form_vars['asset_folder'] = $dir; + $form_vars['asset_folder'] = (!empty($form_vars['asset_folder'])) ? trim($form_vars['asset_folder'], '/') : ''; $vars = $this->_form($form_vars, $inline); $vars['related_items'] = $this->model->related_items($vars); - $list_view = ($inline) ? $this->module_uri.'/inline_items/' : $this->module_uri; $crumbs = array($list_view => $this->module_name, lang('assets_upload_action')); + $this->fuel->admin->set_titlebar($crumbs); $this->fuel->admin->set_inline(($inline === TRUE)); - + if ($inline === TRUE) { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_TITLEBAR); @@ -159,10 +161,10 @@ public function create($dir = NULL, $inline = FALSE) { $vars['actions'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_create_edit_actions', $vars, TRUE); } - $this->fuel->admin->render($this->views['create_edit'], $vars); + + $this->fuel->admin->render($this->views['create_edit'], $vars, '', FUEL_FOLDER); + return $id; - - } public function inline_create($field = NULL) @@ -172,10 +174,11 @@ public function inline_create($field = NULL) public function select($dir = NULL) { - if (!is_numeric($dir)) + if ( ! is_numeric($dir)) { $dir = fuel_uri_string(1, NULL, TRUE); $dirs = $this->fuel->assets->dirs(); + foreach($dirs as $key => $d) { if ($d == $dir) @@ -187,16 +190,20 @@ public function select($dir = NULL) } $value = ''; + if ($this->session->flashdata('uploaded_post')) { $uploaded_post = $this->session->flashdata('uploaded_post'); + if (isset($uploaded_post)) { $subfolder = trim(preg_replace('#^'.preg_quote($dir).'(.*)#', '$1', $uploaded_post['asset_folder']), '/'); - if (!empty($subfolder)) + + if ( ! empty($subfolder)) { $subfolder = $subfolder.'/'; } + $value = $subfolder.$uploaded_post['uploaded_file_name']; } } @@ -204,15 +211,16 @@ public function select($dir = NULL) { $value = $this->input->get_post('selected', TRUE); } - + $this->js_controller_params['method'] = 'select'; $this->js_controller_params['folder'] = $dir; - + $this->load->helper('array'); $this->load->library('form_builder'); $this->model->add_filters(array('group_id' => $dir)); $order = $this->input->get_post('order', TRUE); + if ($order == 'last_updated') { $by = 'desc'; @@ -222,10 +230,11 @@ public function select($dir = NULL) $order = 'name'; $by = 'asc'; } + $options = options_list($this->model->list_items(NULL, 0, $order, $by), 'name', 'name'); $redirect_to = uri_safe_encode(fuel_uri(fuel_uri_string(), TRUE)); // added back to make it refresh - $preview = ' OR <a href="'.fuel_url('assets/inline_create?asset_folder='.urlencode($dir).'&redirect_to='.$redirect_to).'" class="btn_field">Upload</a><div id="asset_preview"></div>'; + $field_values['asset_folder']['value'] = $dir; $fields['asset_select'] = array('value' => $value, 'label' => lang('assets_select_action'), 'type' => 'select', 'options' => $options, 'after_html' => $preview); @@ -233,7 +242,7 @@ public function select($dir = NULL) { $fields['width'] = array('value' => $this->input->get_post('width', TRUE), 'label' => lang('form_label_width'), 'size' => 5, 'row_class' => 'img_only'); } - + if (isset($_GET['height'])) { $fields['height'] = array('value' => $this->input->get_post('height', TRUE), 'label' => lang('form_label_height'), 'size' => 5, 'row_class' => 'img_only'); @@ -263,14 +272,16 @@ public function select($dir = NULL) { $fields['class'] = array('value' => $this->input->get_post('class', TRUE), 'label' => lang('form_label_class'), 'size' => 6, 'row_class' => 'img_only'); } - + $this->form_builder->css_class = 'asset_select'; $this->form_builder->submit_value = NULL; $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; $this->form_builder->set_field_values($field_values); + $vars['form'] = $this->form_builder->render_divs(); + $this->fuel->admin->set_inline(TRUE); $crumbs = array('' => $this->module_name, lang('assets_select_action')); @@ -290,80 +301,90 @@ public function _form($field_values = NULL, $inline = FALSE) { $this->load->library('form_builder'); $this->load->helper('convert'); - + $model = $this->model; $this->js_controller_params['method'] = 'add_edit'; - + $fields = $this->model->form_fields(); $fields['redirect_to'] = array('type' => 'hidden', 'value' => uri_safe_encode($this->input->get_post('redirect_to'))); $not_hidden = array(); - if (!empty($field_values['hide_options']) AND is_true_val($field_values['hide_options'])) + + if ( ! empty($field_values['hide_options']) AND is_true_val($field_values['hide_options'])) { $not_hidden = array('userfile'); } - else if (!empty($field_values['hide_image_options']) AND is_true_val($field_values['hide_image_options'])) + else if ( ! empty($field_values['hide_image_options']) AND is_true_val($field_values['hide_image_options'])) { $not_hidden = array('userfile', 'asset_folder', 'subfolder', 'userfile_file_name', 'overwrite', 'unzip'); } - if (!empty($field_values['accept'])) + if ( ! empty($field_values['accept'])) { $fields['userfile']['accept'] = $field_values['accept']; } - - + + if (isset($field_values['multiple'])) + { + if ((bool)$field_values['multiple'] === FALSE) + { + $fields['userfile']['class'] = ''; + } + else + { + // if their are multiple files being uploaded, the new file name won't really work + unset($fields['user_file_name']); + } + } + // hide certain fields if params were passed - if (!empty($not_hidden)) + if ( ! empty($not_hidden)) { foreach($fields as $key => $field) { - if (!in_array($key, $not_hidden)) + if ( ! in_array($key, $not_hidden)) { $fields[$key]['type'] = 'hidden'; } } } - + if ($this->session->flashdata('uploaded_post')) { $field_values = $this->session->flashdata('uploaded_post'); } - + // load custom fields $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - $this->form_builder->submit_value = lang('btn_upload'); $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; $this->form_builder->set_field_values($field_values); - /* NOT QUITE WORKING DUE TO CANCEL BUTTON */ // if ($this->input->get_post('redirect_to')) // { // $this->form_builder->other_actions = $this->form->button('Back', 'back', 'style="margin: 10px 10px 0 0; float: left;" data-url="'.site_url($this->input->get_post('redirect_to')).'"'); // } - $vars['form'] = $this->form_builder->render(); - + // other variables $vars['id'] = (!empty($field_values['asset_folder'])) ? uri_safe_encode($field_values['asset_folder']) : NULL; $vars['data'] = array(); $vars['action'] = 'create'; - + // $preview_key = preg_replace('#^(.*)\{(.+)\}(.*)$#', "\\2", $this->preview_path); // if (!empty($vars['data'][$preview_key])) $this->preview_path = preg_replace('#^(.*)\{(.+)\}(.*)$#e', "'\\1'.\$vars['data']['\\2'].'\\3'", $this->preview_path); - + // active or publish fields //$vars['publish'] = (!empty($saved['published']) && ($saved['published'] == 'yes')) ? 'Unpublish' : 'Publish'; $vars['module'] = $this->module; $vars['actions'] = $this->load->view('_blocks/module_create_edit_actions', $vars, TRUE); $vars['notifications'] = $this->load->view('_blocks/notifications', $vars, TRUE); - + // setup query string $query_str = query_str(); @@ -384,6 +405,4 @@ public function view($id = null) $url = $this->preview_path.'/'.$id; redirect($url); } - - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/blocks.php b/fuel/modules/fuel/controllers/blocks.php index e7e1ce098..effa8744b 100644 --- a/fuel/modules/fuel/controllers/blocks.php +++ b/fuel/modules/fuel/controllers/blocks.php @@ -14,31 +14,38 @@ public function _form_vars($id = NULL, $fields = NULL, $log_to_recent = TRUE, $d $saved = $vars['data']; $import_view = FALSE; $warning_window = ''; - if (!empty($saved['name'])) { + + if ( ! empty($saved['name'])) + { $view_twin = APPPATH.'views/_blocks/'.$saved['name'].EXT; + if (file_exists($view_twin)) { $this->load->helper('file'); $view_twin_info = get_file_info($view_twin); - if (!empty($saved)) + + if ( ! empty($saved)) { $tz = date('T'); + if ($view_twin_info['date'] > strtotime($saved['last_modified'].' '.$tz) OR - $saved['last_modified'] == $saved['date_added'] AND !$this->input->get('uploaded')) + $saved['last_modified'] == $saved['date_added'] AND ! $this->input->get('uploaded')) { $warning_window = lang('blocks_updated_view', $view_twin); } } } } + $vars['warning_window'] = $warning_window; + return $vars; } public function import_view_cancel() { - if ($this->input->post('id')){ - + if ($this->input->post('id')) + { // don't need to pass anything because it will automatically update last_modified' $save['id'] = $this->input->post('id'); $save['name'] = $this->input->post('name'); @@ -50,19 +57,22 @@ public function import_view_cancel() return; } } + $this->output->set_output('error'); } public function import_view() { $out = 'error'; - if (!empty($_POST['id'])) + + if ( ! empty($_POST['id'])) { $out = $this->fuel->blocks->import($this->input->post('id'), $this->sanitize_input); } + $this->output->set_output($out); } - + public function upload($inline = FALSE) { $this->load->helper('file'); @@ -71,8 +81,8 @@ public function upload($inline = FALSE) $this->load->library('upload'); $this->js_controller_params['method'] = 'upload'; - - if (!empty($_POST) AND !empty($_FILES)) + + if ( ! empty($_POST) AND ! empty($_FILES)) { $params['upload_path'] = sys_get_temp_dir(); $params['allowed_types'] = 'php|html|txt'; @@ -90,16 +100,17 @@ public function upload($inline = FALSE) 'text/html', 'text/x-php', 'application/x-httpd-php-source', - 'text/plain'); + 'text/plain' + ); if ($this->upload->do_upload('file')) { $upload_data = $this->upload->data(); $error = FALSE; - + // read in the file so we can filter it $file = read_file($upload_data['full_path']); - + // sanitize the file before saving $file = $this->_sanitize($file); $id = $this->input->post('id', TRUE); @@ -111,10 +122,7 @@ public function upload($inline = FALSE) $name = current(explode('.', $file_info['name'])); } - if ($id) - { - $save['id'] = $id; - } + if ($id) $save['id'] = $id; $save['name'] = $name; $save['view'] = $file; @@ -123,7 +131,8 @@ public function upload($inline = FALSE) $save['last_modified'] = date('Y-m-d H:i:s', (time() + 1)); // to prevent window from popping up after upload $id = $this->model->save($save); - if (!$id) + + if ( ! $id) { add_error(lang('error_upload')); } @@ -131,10 +140,9 @@ public function upload($inline = FALSE) { // change list view page state to show the selected group id $this->fuel->admin->set_notification(lang('blocks_success_upload'), Fuel_admin::NOTIFICATION_SUCCESS); - + redirect(fuel_url('blocks/edit/'.$id)); } - } else { @@ -145,46 +153,42 @@ public function upload($inline = FALSE) $fields = array(); $blocks = $this->model->options_list('id', 'name', array('published' => 'yes'), 'name'); - + $fields['name'] = array('label' => lang('form_label_name'), 'type' => 'inline_edit', 'options' => $blocks, 'module' => 'blocks'); $fields['file'] = array('type' => 'file', 'accept' => '', 'required' => TRUE); $fields['id'] = array('type' => 'hidden'); $fields['language'] = array('type' => 'hidden'); - + $field_values = $_POST; $common_fields = $this->_common_fields($field_values); $fields = array_merge($fields, $common_fields); - - + $this->form_builder->hidden = array(); $this->form_builder->set_fields($fields); $this->form_builder->set_field_values($_POST); $this->form_builder->submit_value = ''; $this->form_builder->use_form_tag = FALSE; + $vars['instructions'] = lang('blocks_upload_instructions'); $vars['form'] = $this->form_builder->render(); $vars['back_action'] = ($this->fuel->admin->last_page() AND $this->fuel->admin->is_inline()) ? $this->fuel->admin->last_page() : fuel_uri($this->module_uri); //$vars['back_action'] = fuel_uri($this->module_uri); - + $crumbs = array($this->module_uri => $this->module_name, lang('action_upload')); + $this->fuel->admin->set_titlebar($crumbs); - - $this->fuel->admin->render('upload', $vars, Fuel_admin::DISPLAY_NO_ACTION); + $this->fuel->admin->render('upload', $vars, Fuel_admin::DISPLAY_NO_ACTION, FUEL_FOLDER); } - public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NULL, $_name = NULL) { - // add back in slash $layout = str_replace(':', '/', $layout); - + // check to make sure there is no conflict between page columns and layout vars $layout = $this->fuel->layouts->get($layout, 'block'); - if (!$layout) - { - return; - } + + if ( ! $layout) return; // sort of kludgy but not wanting to encode/unencode brackets if (empty($_context)) @@ -202,13 +206,15 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL $_name = $_context; } - if (!empty($_context)) + if ( ! empty($_context)) { $layout->set_context($_context); } - if (!empty($id)) + + if ( ! empty($id)) { $model = $layout->model(); + if (empty($model)) { $this->load->module_model(FUEL_FOLDER, 'fuel_pagevariables_model'); @@ -219,7 +225,6 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL { $page_vars = $this->fuel_pagevariables_model->find_all_by_page_id($id, $this->fuel->language->default_option()); } - } else { @@ -233,17 +238,16 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL { $this->load->model($model); } - $method = $layout->method(); - if (empty($method)) - { - $method = 'find_one_array'; - } + + if (empty($method)) $method = 'find_one_array'; + $key_field = $this->$model->key_field(); $where[$key_field] = $id; $page_vars = $this->$model->$method($where); - if (!empty($page_vars) AND is_array($page_vars)) + + if ( ! empty($page_vars) AND is_array($page_vars)) { if (is_json_str($page_vars)) { @@ -256,7 +260,8 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL extract($page_vars); $_name = end(explode('--', $_name)); $_name_var = str_replace(array('[', ']'), array('["', '"]'), $_name); - if (!empty($_name_var)) + + if ( ! empty($_name_var)) { $_name_var_eval = '@$_name = (isset($'.$_name_var.')) ? $'.$_name_var.' : "";'; @eval($_name_var_eval); @@ -267,14 +272,13 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL $block_vars = $_name; $layout->set_field_values($block_vars); } - } - $fields = $layout->fields(); + $fields = $layout->fields(); $this->load->library('form_builder'); + $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - $this->form_builder->question_keys = array(); $this->form_builder->submit_value = ''; $this->form_builder->cancel_value = ''; @@ -282,10 +286,12 @@ public function layout_fields($layout, $id = NULL, $lang = NULL, $_context = NUL //$this->form_builder->name_prefix = 'vars'; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; + if (isset($block_vars)) { $this->form_builder->set_field_values($block_vars); } + $form = $this->form_builder->render(); $this->output->set_output($form); } diff --git a/fuel/modules/fuel/controllers/build.php b/fuel/modules/fuel/controllers/build.php index 1063c18ab..fd6d30599 100644 --- a/fuel/modules/fuel/controllers/build.php +++ b/fuel/modules/fuel/controllers/build.php @@ -32,12 +32,12 @@ function _remap($module, $segs = NULL) $params = array('module' => $module); $GLOBALS['EXT']->_call_hook('before_build', $params); - // get the type of build which can either be CSS or JS $type = array_shift($segs); $valid_types = array('css', 'js'); - if (!empty($type) AND in_array($type, $valid_types)) + + if ( ! empty($type) AND in_array($type, $valid_types)) { $this->load->helper('file'); @@ -65,7 +65,6 @@ function _remap($module, $segs = NULL) $files[] = str_replace($replace, '', trim($file, '/')); } - $output_params['type'] = $type; $output_params['whitespace'] = TRUE; $output_params['destination'] = assets_server_path($filename.'.'.$type, $type, $module); @@ -76,10 +75,7 @@ function _remap($module, $segs = NULL) { $results = $this->fuel->$module->build(); - if ($results === FALSE) - { - echo lang('error_no_build'); - } + if ($results === FALSE) echo lang('error_no_build'); } else { @@ -90,10 +86,8 @@ function _remap($module, $segs = NULL) // call after build hook $GLOBALS['EXT']->_call_hook('after_build', $params); - } - function optimize_js() { $js = array( @@ -129,8 +123,7 @@ function optimize_js() 'jqx/plugins/util', 'fuel/global', ); - - + $js_inline = array( 'jquery/plugins/jquery.form', 'jquery/plugins/jqModal', @@ -142,7 +135,6 @@ function optimize_js() 'fuel/edit_mode' ); - // set the folder in which to place the file $output_params['type'] = 'js'; $output_params['whitespace'] = TRUE; @@ -167,7 +159,7 @@ function optimize_css() 'jquery-ui-1.8.17.custom', 'fuel' ); - + // set the folder in which to place the file $output_params['type'] = 'css'; $output_params['whitespace'] = TRUE; diff --git a/fuel/modules/fuel/controllers/dashboard.php b/fuel/modules/fuel/controllers/dashboard.php index 79c0e4ba1..0e621975c 100644 --- a/fuel/modules/fuel/controllers/dashboard.php +++ b/fuel/modules/fuel/controllers/dashboard.php @@ -29,7 +29,6 @@ public function index() $this->fuel->admin->set_titlebar($crumbs, 'ico_dashboard'); $this->fuel->admin->render('dashboard', $vars, Fuel_admin::DISPLAY_NO_ACTION); } - } /* need to be outside of index so when you click back button it will not show the ajax */ @@ -42,12 +41,13 @@ public function ajax() $this->load->module_model(FUEL_FOLDER, 'fuel_logs_model'); $vars['recently_modifed_pages'] = $this->fuel_pages_model->find_all_array(array(), 'last_modified desc', 10); $vars['latest_activity'] = $this->fuel_logs_model->latest_activity(10); + if (file_exists(APPPATH.'/views/_docs/fuel'.EXT)) { $vars['docs'] = $this->load->module_view(NULL, '_docs/fuel', $vars, TRUE); } - $feed = $this->fuel->config('dashboard_rss'); + $feed = $this->fuel->config('dashboard_rss'); $limit = 3; $feed_data = simplepie($feed, $limit); @@ -56,16 +56,19 @@ public function ajax() { $vars['latest_fuel_version'] = $feed_data['latest_fuel_version']; } + unset($feed_data['latest_fuel_version']); $vars['feed'] = $feed_data; - $this->load->view('dashboard_ajax', $vars); + + $this->load->module_view(FUEL_FOLDER, 'dashboard_ajax', $vars); } } public function recent() { $recent = $this->session->userdata('recent'); - if (!empty($recent[0])) + + if ( ! empty($recent[0])) { $redirect_to = $recent[0]['link']; } @@ -73,8 +76,7 @@ public function recent() { $redirect_to = $this->config->item('fuel_path', 'fuel').'dashboard'; } + redirect($redirect_to); } - - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/generate.php b/fuel/modules/fuel/controllers/generate.php index ead9afa20..839109e52 100644 --- a/fuel/modules/fuel/controllers/generate.php +++ b/fuel/modules/fuel/controllers/generate.php @@ -2,35 +2,34 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Generate extends Fuel_base_controller { - + public $created = array(); public $errors = array(); public $modified = array(); - + public function __construct() { $validate = (php_sapi_name() == 'cli' OR defined('STDIN')) ? FALSE : TRUE; parent::__construct($validate); - + // must be in dev mode to generate - if (!is_dev_mode()) + if ( ! is_dev_mode()) { show_error(lang('error_not_in_dev_mode')); } - + // validate user has permission if ($validate) { $this->_validate_user('generate'); } - + $this->load->helper('file'); $this->load->library('parser'); - } - + // -------------------------------------------------------------------- - + /** * Generates the folders and files for an advanced module * @@ -44,17 +43,15 @@ public function advanced($name = NULL) { show_error(lang('error_missing_params')); } + $fuel_config = $this->fuel->config('generate'); - $names = $this->_get_module_names($name); - foreach($names as $name) - { - $this->_advanced($name); - } + + foreach($names as $name) $this->_advanced($name); // create a generic permission for the advanced module $this->fuel->permissions->create($name); - + $vars['created'] = $this->created; $vars['errors'] = $this->errors; $vars['modified'] = $this->modified; @@ -63,7 +60,7 @@ public function advanced($name = NULL) } // -------------------------------------------------------------------- - + /** * Protected helper method to that generates the folders and files for an advanced module * @@ -77,21 +74,21 @@ protected function _advanced($name = NULL) { show_error(lang('error_missing_params')); } + $fuel_config = $this->fuel->config('generate'); - - + // check that the configuration to map to files to generate exists - if (!isset($fuel_config['advanced'])) + if ( ! isset($fuel_config['advanced'])) { show_error(lang('error_missing_generation_files', 'advanced')); } - + $config = (array)$fuel_config['advanced']; $name_path = MODULES_PATH.$name.'/'; - if (!file_exists($name_path)) + if ( ! file_exists($name_path)) { - if (!mkdir($name_path, DIR_READ_MODE, TRUE)) + if ( ! mkdir($name_path, DIR_READ_MODE, TRUE)) { $this->errors[] = lang('error_could_not_create_folder', $name_path)."\n"; } @@ -105,11 +102,14 @@ protected function _advanced($name = NULL) $vars = $this->_common_vars($name); $find_arr = array_keys($vars); $find = array(); + foreach($find_arr as $f) { $find[] = '{'.$f.'}'; } + $replace = array_values($vars); + foreach($config as $val) { $substituted = str_replace($find, $replace, $val); @@ -118,9 +118,9 @@ protected function _advanced($name = NULL) if (empty($ext)) { - if (!file_exists($file)) + if ( ! file_exists($file)) { - if (!mkdir($file, DIR_READ_MODE, TRUE)) + if ( ! mkdir($file, DIR_READ_MODE, TRUE)) { $this->errors[] = lang('error_could_not_create_folder', $file)."\n"; } @@ -132,29 +132,29 @@ protected function _advanced($name = NULL) } else { - $dir = dirname($file); + $dir = dirname($file); // create parent directory if it doesn't exist already' - if (!file_exists($dir)) + if ( ! file_exists($dir)) { - if (!mkdir($dir, DIR_READ_MODE, TRUE)) + if ( ! mkdir($dir, DIR_READ_MODE, TRUE)) { $this->errors[] = lang('error_could_not_create_folder', $dir)."\n"; } } // create file if it doesn't exits' - if (!file_exists($file)) + if ( ! file_exists($file)) { $content = $this->_parse_template($val, $vars, 'advanced'); - if (!$content) + if ( ! $content) { $this->errors[] = lang('error_could_not_create_file', $file)."\n"; } else { - if (!write_file($file, $content)) + if ( ! write_file($file, $content)) { $this->errors[] = lang('error_could_not_create_file', $file)."\n"; } @@ -166,9 +166,9 @@ protected function _advanced($name = NULL) } } } - + // add to modules_allowed to MY_fuel and to the database - if (!in_array($name, $this->fuel->config('modules_allowed'))) + if ( ! in_array($name, $this->fuel->config('modules_allowed'))) { // add to advanced module config $my_fuel_path = APPPATH.'config/MY_fuel.php'; @@ -178,27 +178,32 @@ protected function _advanced($name = NULL) $content = file_get_contents($my_fuel_path); $allowed_str = "\$config['modules_allowed'] = array(\n"; + foreach($modules_allowed as $mod) { $allowed_str .= "\t\t'".$mod."',\n"; } + $allowed_str .= ");"; // create variables for parsed files $content = preg_replace('#(\$config\[([\'|"])modules_allowed\\2\].+;)#Ums', $allowed_str, $content, 1); - if (!write_file($my_fuel_path, $content)) + if ( ! write_file($my_fuel_path, $content)) { $this->errors[] = lang('error_could_not_create_file', $my_fuel_path)."\n"; } + $this->modified[] = $my_fuel_path; - + // save to database if the settings is there - + $module_obj = $this->fuel->modules->get($name); - if (!empty($module_obj) AND $this->fuel->modules->is_advanced($module_obj)) + + if ( ! empty($module_obj) AND $this->fuel->modules->is_advanced($module_obj)) { $settings = $module_obj->settings_fields(); + if (isset($settings['modules_allowed'])) { $this->fuel->settings->save(FUEL_FOLDER, 'modules_allowed', $modules_allowed); @@ -211,7 +216,7 @@ protected function _advanced($name = NULL) } // -------------------------------------------------------------------- - + /** * Generates the table, model, permissions and adds to MY_fuel_modules * @@ -226,22 +231,23 @@ public function simple($name = NULL, $module = '') { show_error(lang('error_missing_params')); } - + $names = $this->_get_module_names($name); + foreach($names as $name) { $this->_simple($name, $module); } - + $vars['created'] = $this->created; $vars['errors'] = $this->errors; $vars['modified'] = $this->modified; $this->_load_results($vars); } - + // -------------------------------------------------------------------- - + /** * Protected helper method that generates the table, model, permissions and adds to MY_fuel_modules * @@ -258,19 +264,18 @@ protected function _simple($name = NULL, $module = '') $fuel_config = $this->fuel->config('generate'); // check that the configuration to map to files to generate exists - if (!isset($fuel_config['simple'])) + if ( ! isset($fuel_config['simple'])) { show_error(lang('error_missing_generation_files', 'simple')); } - + $config = (array)$fuel_config['simple']; - $basepath = (!empty($module)) ? MODULES_PATH.$module.'/' : APPPATH; - - + $basepath = ( ! empty($module)) ? MODULES_PATH.$module.'/' : APPPATH; + // add to MY_fuel_modules if it doesn't exist' - $module_path = (!empty($module)) ? $basepath.'config/'.$module.'_fuel_modules.php' : $basepath.'config/MY_fuel_modules.php'; - + $module_path = ( ! empty($module)) ? $basepath.'config/'.$module.'_fuel_modules.php' : $basepath.'config/MY_fuel_modules.php'; + if (file_exists($module_path)) { @include($module_path); @@ -278,7 +283,8 @@ protected function _simple($name = NULL, $module = '') else { $content = "<?php \n"; - if (!write_file($module_path, $content, FOPEN_WRITE_CREATE)) + + if ( ! write_file($module_path, $content, FOPEN_WRITE_CREATE)) { $this->errors[] = lang('error_could_not_create_file', $module_path)."\n"; } @@ -287,8 +293,8 @@ protected function _simple($name = NULL, $module = '') $this->created[] = $module_path; } } - - if (!isset($config['modules'][$name])) + + if ( ! isset($config['modules'][$name])) { // create variables for parsed files $vars = $this->_common_vars($name); @@ -296,7 +302,7 @@ protected function _simple($name = NULL, $module = '') $file = current($config); $content = "\n".$this->_parse_template($file, $vars, 'simple'); - if (!write_file($module_path, $content, FOPEN_WRITE_CREATE)) + if ( ! write_file($module_path, $content, FOPEN_WRITE_CREATE)) { $this->errors[] = lang('error_could_not_create_file', $module_path)."\n"; } @@ -309,9 +315,9 @@ protected function _simple($name = NULL, $module = '') // now create permissions $this->fuel->permissions->create_simple_module_permissions($name); } - + // -------------------------------------------------------------------- - + /** * Generates the table and model * @@ -326,20 +332,22 @@ public function model($model, $module = '', $display_results = TRUE) { show_error(lang('error_missing_params')); } + $fuel_config = $this->fuel->config('generate'); // check that the configuration to map to files to generate exists - if (!isset($fuel_config['model'])) + if ( ! isset($fuel_config['model'])) { show_error(lang('error_missing_generation_files', 'model')); } - + $names = $this->_get_module_names($model); + foreach($names as $name) { $this->_model($name, $module); } - + if ($display_results) { $vars['created'] = $this->created; @@ -349,9 +357,9 @@ public function model($model, $module = '', $display_results = TRUE) $this->_load_results($vars); } } - + // -------------------------------------------------------------------- - + /** * Protected helper method that generates the table and model * @@ -363,22 +371,25 @@ public function model($model, $module = '', $display_results = TRUE) public function _model($model, $module = '') { $fuel_config = $this->fuel->config('generate'); - + $config = (array)$fuel_config['model']; // create variables for parsed files $vars = $this->_common_vars($model); - + $find_arr = array_keys($vars); $find = array(); + foreach($find_arr as $f) { $find[] = '{'.$f.'}'; } - + $replace = array_values($vars); + // create model file - $basepath = (!empty($module)) ? MODULES_PATH.$module.'/' : APPPATH; + $basepath = ( ! empty($module)) ? MODULES_PATH.$module.'/' : APPPATH; + foreach($config as $val) { $substituted = str_replace($find, $replace, $val); @@ -386,40 +397,42 @@ public function _model($model, $module = '') $file = $basepath .'models/'. $substituted; // create file if it doesn't exits' - if (!file_exists($file)) + if ( ! file_exists($file)) { $file_arr = array($substituted, $val); $content = $this->_parse_template($file_arr, $vars, 'model'); - if (!$content) + if ( ! $content) { $this->errors[] = lang('error_could_not_create_file', $dir)."\n"; } - + // if SQL file extension, then we try and load the SQL if (preg_match('#\.sql$#', $file)) { // load database if it isn't already - if (!isset($this->db)) + if ( ! isset($this->db)) { $this->load->database(); } + $this->db->load_sql($content, FALSE); } else { - if (!write_file($file, $content)) + if ( ! write_file($file, $content)) { $this->errors[] = lang('error_could_not_create_file', $file)."\n"; } + $this->created[] = $file; } } } } - + // -------------------------------------------------------------------- - + /** * Protected helper method that returns the module names * @@ -431,9 +444,9 @@ protected function _get_module_names($names) { return explode(':', $names); } - + // -------------------------------------------------------------------- - + /** * Protected helper method that displays the output results * @@ -451,12 +464,12 @@ protected function _load_results($vars) { $crumbs = array(lang('module_generate')); $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('_generate/results', $vFuears, Fuel_admin::DISPLAY_NO_ACTION); + $this->fuel->admin->render('_generate/results', $vars, Fuel_admin::DISPLAY_NO_ACTION, FUEL_FOLDER); } } - + // -------------------------------------------------------------------- - + /** * Protected helper method that generates the table and model * @@ -467,12 +480,11 @@ protected function _load_results($vars) protected function _find_template($file, $vars, $type = 'advanced') { $fuel_config = $this->fuel->config('generate'); - + $search = (array)$fuel_config['search']; - $file = (array)$file; - $found = FALSE; + foreach($file as $f) { foreach($search as $module) @@ -480,6 +492,7 @@ protected function _find_template($file, $vars, $type = 'advanced') $file_path = ($module == 'app' OR $module == 'application') ? APPPATH : MODULES_PATH.$module.'/'; // first check APPPATH for template files $template_path = rtrim($file_path.'views/_generate/'.$type.'/'.$f, '/'); + if (file_exists($template_path)) { $found = TRUE; @@ -487,11 +500,12 @@ protected function _find_template($file, $vars, $type = 'advanced') } } } + return $template_path; } - + // -------------------------------------------------------------------- - + /** * Protected helper method that parses a template file * @@ -504,20 +518,24 @@ protected function _find_template($file, $vars, $type = 'advanced') protected function _parse_template($file, $vars, $type = 'advanced') { $template_path = $this->_find_template($file, $vars, $type); + if (file_exists($template_path)) { $contents = file_get_contents($template_path); - + // parse $contents = $this->parser->parse_simple($contents, $vars); + return $contents; } + $this->errors[] = lang('error_could_not_create_file', $file)."\n"; + return ''; } // -------------------------------------------------------------------- - + /** * Protected helper method that returns common variables that get used during the parsing of a template * @@ -536,11 +554,12 @@ protected function _common_vars($name) $vars['model_record'] = ucfirst(preg_replace('#ie$#', 'y', rtrim($name, 's'))); $vars['ModuleName'] = ucfirst(camelize($name)); $vars['MODULE_NAME'] = strtoupper($name); + if ($vars['model_name'] == $vars['model_record']) { $vars['model_record'] = $vars['model_record'].'_item'; } + return $vars; } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/installer.php b/fuel/modules/fuel/controllers/installer.php index 44c24b756..0e2b800f2 100644 --- a/fuel/modules/fuel/controllers/installer.php +++ b/fuel/modules/fuel/controllers/installer.php @@ -2,54 +2,54 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Installer extends Fuel_base_controller { - + protected $module = ''; public function __construct() { $validate = (php_sapi_name() == 'cli' OR defined('STDIN')) ? FALSE : TRUE; parent::__construct($validate); - + // must be in dev mode to install modules - if (!is_dev_mode()) + if ( ! is_dev_mode()) { show_error(lang('error_not_in_dev_mode')); } - + // validate user has permission - if ($validate) - { - $this->_validate_user('installer'); - } - + if ($validate) $this->_validate_user('installer'); } - + public function install($module = NULL) { if (empty($module)) { show_error(lang('error_missing_params')); } - + // load constants $constant = strtoupper($module).'_VERSION'; - if (!defined($constant)) + + if ( ! defined($constant)) { - $constants_file = MODULES_PATH.$module.'/config/'.$module.'_constants.php'; + $constants_file = MODULES_PATH.$module.'/config/'.$module.'_constants.php'; + if (file_exists($constants_file)) { require_once($constants_file); } } - + // need to load it the old fashioned way because it is not enabled by default $module_file = MODULES_PATH.$module.'/libraries/Fuel_'.$module.'.php'; + if (file_exists($module_file)) { $init = array('name' => $module, 'folder' => $module); $this->load->module_library($module, 'fuel_'.$module, $init); $module_lib = 'fuel_'.$module; - if (!$this->$module_lib->install()) + + if ( ! $this->$module_lib->install()) { echo $this->fuel->installer->last_error()."\n"; } @@ -66,7 +66,6 @@ public function install($module = NULL) public function add_git_submodule($params = NULL) { - if (empty($params)) { show_error(lang('error_missing_params')); @@ -79,16 +78,13 @@ public function add_git_submodule($params = NULL) $module = array_pop($segs); $repo = implode('/', $segs); - if (empty($module)) - { - $module = $this->module; - } - + if (empty($module)) $module = $this->module; + $module_folder = MODULES_WEB_PATH.$module; $cmd = 'git submodule add '.$repo.' '.$module_folder; $output = shell_exec($cmd); - if (!empty($output)) + if ( ! empty($output)) { echo $output."\n"; return; @@ -96,17 +92,17 @@ public function add_git_submodule($params = NULL) return $output; } - + public function uninstall($module = NULL) { - if (!$this->fuel->modules->exists($module)) + if ( ! $this->fuel->modules->exists($module)) { echo lang('cannot_determine_module')."\n"; return; } // uninstall - if (!$this->fuel->$module->uninstall()) + if ( ! $this->fuel->$module->uninstall()) { echo $this->fuel->installer->last_error(); } @@ -115,7 +111,5 @@ public function uninstall($module = NULL) $module_folder = MODULES_WEB_PATH.$module; echo lang('module_uninstall', $module, $module_folder); } - } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/login.php b/fuel/modules/fuel/controllers/login.php index d55fd932e..2f890959e 100644 --- a/fuel/modules/fuel/controllers/login.php +++ b/fuel/modules/fuel/controllers/login.php @@ -37,7 +37,7 @@ public function __construct() ); } - + public function index() { // check if it's a password request and redirect' @@ -51,23 +51,23 @@ public function index() $this->dev(); return; } + $this->js_controller_params['method'] = 'add_edit'; - + $this->load->helper('convert'); $this->load->helper('cookie'); - + $session_key = $this->fuel->auth->get_session_namespace(); - + $user_data = $this->session->userdata($session_key); - if (!empty($_POST)) - { + if ( ! empty($_POST)) + { // check if they are locked out out or not if (isset($user_data['failed_login_timer']) AND (time() - $user_data['failed_login_timer']) < (int)$this->fuel->config('seconds_to_unlock')) { $this->fuel_users_model->add_error(lang('error_max_attempts', $this->fuel->config('seconds_to_unlock'))); $user_data['failed_login_timer'] = time(); - } else { @@ -87,9 +87,10 @@ public function index() ); set_cookie($config); - + $forward = $this->input->post('forward'); $forward_uri = uri_safe_decode($forward); + if ($forward AND $forward_uri != $this->fuel->config('login_redirect')) { redirect($forward_uri); @@ -113,9 +114,8 @@ public function index() // add to the number of attempts if it's an invalid login' $num_attempts = (!isset($user_data['failed_login_attempts'])) ? 0 : $user_data['failed_login_attempts'] + 1; $user_data['failed_login_attempts'] = $num_attempts; - } - + // check if they should be locked out if (isset($user_data['failed_login_attempts']) AND $user_data['failed_login_attempts'] >= (int)$this->fuel->config('num_logins_before_lock') -1) { @@ -135,11 +135,11 @@ public function index() $this->fuel_users_model->add_error(lang('error_empty_user_pwd')); } } + $this->session->set_userdata($session_key, $user_data); } // build form - $this->form_builder->set_validator($this->fuel_users_model->get_validation()); $fields['user_name'] = array('size' => 25, 'placeholder' => 'username', 'display_label' => FALSE); $fields['password'] = array('type' => 'password', 'size' => 25, 'placeholder' => 'password', 'display_label' => FALSE); @@ -168,33 +168,37 @@ public function index() $vars['notifications'] = $notifications; $vars['display_forgotten_pwd'] = $this->fuel->config('allow_forgotten_password'); $vars['page_title'] = lang('fuel_page_title'); - $this->load->view('login', $vars); + + $this->load->module_view(FUEL_FOLDER, 'login', $vars); } - + public function pwd_reset() { - if (!$this->fuel->config('allow_forgotten_password')) show_404(); + if ( ! $this->fuel->config('allow_forgotten_password')) show_404(); + $this->js_controller_params['method'] = 'add_edit'; - if (!empty($_POST)) + if ( ! empty($_POST)) { if ($this->input->post('email')) { $user = $this->fuel_users_model->find_one_array(array('email' => $this->input->post('email'))); - if (!empty($user['email'])) + + if ( ! empty($user['email'])) { $users = $this->fuel->users; $new_pwd = $this->fuel->users->reset_password($user['email']); + if ($new_pwd !== FALSE) { $url = 'reset/'.md5($user['email']).'/'.md5($new_pwd); $msg = lang('pwd_reset_email', fuel_url($url)); - + $params['to'] = $this->input->post('email'); $params['subject'] = lang('pwd_reset_subject'); $params['message'] = $msg; $params['use_dev_mode'] = FALSE; - + if ($this->fuel->notification->send($params)) { $this->session->set_flashdata('success', lang('pwd_reset')); @@ -205,6 +209,7 @@ public function pwd_reset() $this->session->set_flashdata('error', lang('error_pwd_reset')); $this->fuel->logs->write($this->fuel->notification->last_error(), 'debug'); } + redirect(fuel_uri('login')); } else @@ -222,29 +227,33 @@ public function pwd_reset() $this->fuel_users_model->add_error(lang('error_empty_email')); } } + $this->form_builder->set_validator($this->fuel_users_model->get_validation()); // build form $fields['Reset Password'] = array('type' => 'section', 'label' => lang('login_reset_pwd')); $fields['email'] = array('required' => TRUE, 'size' => 30, 'placeholder' => 'email', 'display_label' => FALSE); + $this->form_builder->show_required = FALSE; $this->form_builder->set_fields($fields); + $vars['form'] = $this->form_builder->render(); // notifications template $vars['error'] = $this->fuel_users_model->get_errors(); - $vars['notifications'] = $this->load->view('_blocks/notifications', $vars, TRUE); + $vars['notifications'] = $this->load->module_view(FUEL_FOLDER, '_blocks/notifications', $vars, TRUE); $vars['page_title'] = lang('fuel_page_title'); - $this->load->view('pwd_reset', $vars); + + $this->load->module_view(FUEL_FOLDER, 'pwd_reset', $vars); } - - + public function dev() { $this->config->set_item('allow_forgotten_password', FALSE); - if (!empty($_POST)) + + if ( ! empty($_POST)) { - if (!$this->fuel->config('dev_password')) + if ( ! $this->fuel->config('dev_password')) { redirect(''); } @@ -260,20 +269,22 @@ public function dev() add_error(lang('error_invalid_login')); } } + $fields['password'] = array('type' => 'password', 'placeholder' => 'password', 'display_label' => FALSE, 'size' => 25); $fields['forward'] = array('type' => 'hidden', 'value' => fuel_uri_segment(2)); + $this->form_builder->show_required = FALSE; $this->form_builder->submit_value = 'Login'; $this->form_builder->set_fields($fields); - if (!empty($_POST)) $this->form_builder->set_field_values($this->input->post(NULL, TRUE)); + + if ( ! empty($_POST)) $this->form_builder->set_field_values($this->input->post(NULL, TRUE)); + $vars['form'] = $this->form_builder->render(); - $vars['notifications'] = $this->load->view('_blocks/notifications', $vars, TRUE); - + $vars['notifications'] = $this->load->module_view(FUEL_FOLDER, '_blocks/notifications', $vars, TRUE); $vars['display_forgotten_pwd'] = FALSE; $vars['instructions'] = lang('dev_pwd_instructions'); $vars['page_title'] = lang('fuel_page_title'); - $this->load->view('login', $vars); - - + + $this->load->module_view(FUEL_FOLDER, 'login', $vars); } } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/logout.php b/fuel/modules/fuel/controllers/logout.php index aab748196..962677b99 100644 --- a/fuel/modules/fuel/controllers/logout.php +++ b/fuel/modules/fuel/controllers/logout.php @@ -1,14 +1,16 @@ <?php class Logout extends CI_Controller { - + public function __construct() { parent::__construct(); + $this->config->load('fuel', TRUE); - if (!$this->config->item('admin_enabled', 'fuel')) show_404(); + + if ( ! $this->config->item('admin_enabled', 'fuel')) show_404(); } - + public function _remap($segment) { $this->load->helper('convert'); @@ -17,19 +19,22 @@ public function _remap($segment) 'name' => $this->fuel->auth->get_fuel_trigger_cookie_name(), 'path' => WEB_PATH ); + delete_cookie($config); - + $redirect = $this->fuel->config('logout_redirect'); + if ($redirect == ':last') { $this->load->helper('convert'); - $redirect = uri_safe_decode($segment); } + if ($segment == 'page_router' OR $redirect == 'page_router') { $redirect = $this->fuel->config('default_home_view'); } + redirect($redirect, 'location', 302, FALSE); } } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/manage.php b/fuel/modules/fuel/controllers/manage.php index 9d545992d..65a426a1c 100644 --- a/fuel/modules/fuel/controllers/manage.php +++ b/fuel/modules/fuel/controllers/manage.php @@ -2,24 +2,25 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Manage extends Fuel_base_controller { - + public $nav_selected = 'manage'; public $module_uri = 'manage/activity'; - + public function __construct() { parent::__construct(FALSE); $this->js_controller = 'fuel.controller.ManageController'; } - + public function index() { $this->_validate_user('manage'); $crumbs = array(lang('section_manage')); + $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('manage'); + $this->fuel->admin->render('manage', array(), '', FUEL_FOLDER); } - + public function cache() { $this->_validate_user('manage/cache'); @@ -27,13 +28,14 @@ public function cache() // to display the logout button in the top right of the admin $load_vars['user'] = $this->fuel->auth->user_data(); $this->load->vars($load_vars); - + $this->fuel->admin->set_nav_selected('manage/cache'); - + if ($this->input->post('action')) { $msg = $this->clear_cache(TRUE); $this->fuel->admin->set_notification($msg, Fuel_admin::NOTIFICATION_SUCCESS); + redirect('fuel/manage/cache'); } else @@ -41,7 +43,7 @@ public function cache() $crumbs = array('manage' => lang('section_manage'), lang('module_manage_cache')); $this->fuel->admin->set_titlebar($crumbs, 'ico_manage_cache'); - $this->fuel->admin->render('manage/cache'); + $this->fuel->admin->render('manage/cache', array(), '', FUEL_FOLDER); } } @@ -53,20 +55,15 @@ public function clear_cache($return = FALSE) // check if it is CLI or a web hook otherwise we need to validate $validate = (php_sapi_name() == 'cli' OR defined('STDIN') OR $is_web_hook) ? FALSE : TRUE; - if ($validate) - { - $this->_validate_user('manage/cache'); - } + if ($validate) $this->_validate_user('manage/cache'); $this->fuel->cache->clear(); $msg = lang('cache_cleared'); $this->fuel->logs->write($msg); - if ($return) - { - return $msg; - } + + if ($return) return $msg; + echo $msg."\n"; } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/migrate.php b/fuel/modules/fuel/controllers/migrate.php index 610b8f285..5772e191a 100644 --- a/fuel/modules/fuel/controllers/migrate.php +++ b/fuel/modules/fuel/controllers/migrate.php @@ -22,19 +22,16 @@ public function __construct() $this->fuel->admin->check_login(); $this->_validate_user('migrate'); } - } - public function latest($module = NULL) { $this->_init_migrate($module); $version = $this->migration->latest(); - if ( ! $version) - { - $this->_show_error(); - } + + if ( ! $version) $this->_show_error(); + $this->_success($version); } @@ -43,10 +40,9 @@ public function current($module = NULL) $this->_init_migrate($module); $version = $this->migration->current(); - if ( ! $version) - { - $this->_show_error(); - } + + if ( ! $version) $this->_show_error(); + $this->_success($version); } @@ -55,16 +51,15 @@ public function version($version = 1, $module = NULL) $this->_init_migrate($module); // must be in dev mode change the version to something uther then the latest or current - if (!is_dev_mode()) + if ( ! is_dev_mode()) { $this->_show_error(lang('error_not_in_dev_mode')); } $version = $this->migration->version($version); - if ( ! $version) - { - $this->_show_error(); - } + + if ( ! $version) $this->_show_error(); + $this->_success($version); } @@ -72,6 +67,7 @@ protected function _init_migrate($module) { $config['migration_enabled'] = TRUE; $config['module'] = $module; + $this->load->library('migration', $config); } @@ -87,6 +83,7 @@ protected function _success($version) echo lang('migrate_success', $version); $msg = lang('database_migration_success', $version); } + $this->fuel->logs->write($msg); } @@ -96,6 +93,7 @@ protected function _show_error($error = '') { $error = $this->migration->error_string(); } + echo $error."\n"; exit(); } diff --git a/fuel/modules/fuel/controllers/module.php b/fuel/modules/fuel/controllers/module.php index 532b596e7..816324e5c 100644 --- a/fuel/modules/fuel/controllers/module.php +++ b/fuel/modules/fuel/controllers/module.php @@ -14,6 +14,7 @@ function __construct($validate = TRUE) parent::__construct($validate); $this->load->module_model(FUEL_FOLDER, 'fuel_archives_model'); + if (empty($this->module)) { $this->module = fuel_uri_segment(1); @@ -25,6 +26,7 @@ function __construct($validate = TRUE) } $params = array(); + if ($this->fuel->modules->exists($this->module, FALSE)) { $this->module_obj = $this->fuel->modules->get($this->module, FALSE); @@ -34,6 +36,7 @@ function __construct($validate = TRUE) { // if it is a module with multiple controllers, then we'll check first and second FUEL segment with an underscore' $this->module = $this->module.'_'.fuel_uri_segment(2); + if ($this->fuel->modules->exists($this->module, FALSE)) { $this->module_obj = $this->fuel->modules->get($this->module, FALSE); @@ -54,6 +57,7 @@ function __construct($validate = TRUE) { show_error(lang('error_missing_module', fuel_uri_segment(1))); } + unset($mod_name); $params = $this->module_obj->info(); } @@ -69,7 +73,7 @@ function __construct($validate = TRUE) } // load any configuration - if (!empty($this->configuration)) + if ( ! empty($this->configuration)) { if (is_array($this->configuration)) { @@ -85,7 +89,7 @@ function __construct($validate = TRUE) } // load any language - if (!empty($this->language)) + if ( ! empty($this->language)) { if (is_array($this->language)) { @@ -103,7 +107,7 @@ function __construct($validate = TRUE) } // load the model - if (!empty($this->model_location)) + if ( ! empty($this->model_location)) { $this->load->module_model($this->model_location, $this->model_name); } @@ -116,14 +120,12 @@ function __construct($validate = TRUE) $model_parts = explode('/', $this->model_name); $model = end($model_parts); - // set the module_uri if (empty($this->module_uri)) $this->module_uri = $this->module; $this->js_controller_params['module'] = $this->module_uri; - - if (!empty($model)) + if ( ! empty($model)) { $this->model =& $this->$model; } @@ -134,26 +136,27 @@ function __construct($validate = TRUE) // global variables $vars = array(); - if (!empty($params['js'])) + + if ( ! empty($params['js'])) { if (is_string($params['js'])) { $params['js'] = preg_split("/,\s*/", $params['js']); } + $vars['js'] = $params['js']; } - if (!empty($this->nav_selected)) $vars['nav_selected'] = $this->nav_selected; + if ( ! empty($this->nav_selected)) $vars['nav_selected'] = $this->nav_selected; + $this->load->vars($vars); - + $this->fuel->admin->load_js_localized($params['js_localized']); - if (!empty($this->permission) AND $validate) + if ( ! empty($this->permission) AND $validate) { $this->_validate_user($this->permission); } - - } // -------------------------------------------------------------------- @@ -193,7 +196,8 @@ function items() { $languages = $this->model->get_languages($this->language_col); $first_option = current($languages); - if (!empty($languages) AND (is_string($first_option) OR (is_array($first_option)) AND count($first_option) > 1)) + + if ( ! empty($languages) AND (is_string($first_option) OR (is_array($first_option)) AND count($first_option) > 1)) { $lang_filter = array('type' => 'select', 'options' => $languages, 'label' => lang('label_language'), 'first_option' => lang('label_select_a_language')); $this->filters[$this->language_col.'_equal'] = $lang_filter; @@ -206,41 +210,19 @@ function items() // save page state $this->fuel->admin->save_page_state($params); - - // create search filter - $filters[$this->display_field] = trim($params['search_term']); - - // sort of hacky here... to make it easy for the model to just filter on the search term (like the users model) - $this->model->filter_value = trim($params['search_term']); - foreach($this->filters as $key => $val) - { - $filters[$key] = $params[$key]; - if (!empty($val['filter_join'])) - { - if (!is_array($this->model->filter_join[$key])) - { - settype($this->model->filter_join, 'array'); - } - $this->model->filter_join[$key] = $val['filter_join']; - } - } - - // set model filters before pagination and setting table data - if (method_exists($this->model, 'add_filters')) - { - $this->model->add_filters($filters); - } - - // to prevent it from being called unecessarility with ajax - if (!is_ajax()) + // filter the list + $this->_filter_list($params); + + // to prevent it from being called unnecessarily with ajax + if ( ! is_ajax()) { $this->config->set_item('enable_query_strings', FALSE); // pagination $query_str_arr = $this->input->get(NULL, TRUE); unset($query_str_arr['offset']); - $query_str = (!empty($query_str_arr)) ? http_build_query($query_str_arr) : ''; - + $query_str = ( ! empty($query_str_arr)) ? http_build_query($query_str_arr) : ''; + $config['base_url'] = fuel_url($this->module_uri).'/items/?'.$query_str; $uri_segment = 4 + (count(explode('/', $this->module_uri)) - 1); $config['total_rows'] = $this->model->list_items_total(); @@ -249,16 +231,15 @@ function items() $config['query_string_segment'] = 'offset'; $config['page_query_string'] = TRUE; $config['num_links'] = 5; - + $config['prev_link'] = lang('pagination_prev_page'); $config['next_link'] = lang('pagination_next_page'); $config['first_link'] = lang('pagination_first_link'); $config['last_link'] = lang('pagination_last_link'); - + // must reset these in case a config file has something different $config['full_tag_open'] = NULL; $config['full_tag_close'] = NULL; - $config['full_tag_close'] = NULL; $config['num_tag_open'] = ' '; $config['num_tag_close'] = NULL; $config['cur_tag_open'] = ' <strong>'; @@ -275,24 +256,19 @@ function items() if (method_exists($this->model, 'tree')) { - //$vars['tree'] = "Loading...\n<ul></ul>\n"; $vars['tree'] = "\n<ul></ul>\n"; } - + // reset offset if total rows is less then limit if ($config['total_rows'] < $params['limit']) { $params['offset'] = 0; } - - } + // set vars $vars['params'] = $params; - $vars['table'] = ''; - - // reload table if (is_ajax()) @@ -310,11 +286,12 @@ function items() $has_edit_permission = $this->fuel->auth->has_permission($this->permission, "edit") ? '1' : '0'; $has_delete_permission = $this->fuel->auth->has_permission($this->permission, "delete") ? '1' : '0'; - + // set data table actions... look first for item_actions set in the fuel_modules $edit_func = ' $CI =& get_instance(); $link = "";'; + if ($has_edit_permission) { $edit_func .= 'if (isset($cols[$CI->model->key_field()])) @@ -324,15 +301,16 @@ function items() $link .= " <input type=\"checkbox\" name=\"delete[".$cols[$CI->model->key_field()]."]\" value=\"1\" id=\"delete_".$cols[$CI->model->key_field()]."\" class=\"multi_delete\"/>"; }'; } + $edit_func .= 'return $link;'; - + $edit_func = create_function('$cols', $edit_func); - - + // set data table actions... look first for item_actions set in the fuel_modules $delete_func = ' $CI =& get_instance(); $link = "";'; + if ($has_delete_permission) { $delete_func .= 'if (isset($cols[$CI->model->key_field()])) @@ -344,22 +322,23 @@ function items() } $delete_func .= 'return $link;'; - $delete_func = create_function('$cols', $delete_func); - + foreach($this->table_actions as $key => $val) { - if (!is_int($key)) + if ( ! is_int($key)) { $action_type = 'url'; $action_val = $this->table_actions[$key]; $attrs = array(); + if (is_array($val)) { if (isset($val['url'])) { $action_type = 'url'; $action_val = $val['url']; + if (isset($val['attrs'])) { $attrs = $val['attrs']; @@ -370,8 +349,10 @@ function items() $action_type = key($val); $action_val = current($val); } + $attrs = (isset($val['attrs'])) ? $val['attrs'] : array(); } + $this->data_table->add_action($key, $action_val, $action_type, $attrs); } else if (strtoupper($val) == 'EDIT') @@ -388,7 +369,7 @@ function items() } else { - if (strtoupper($val) != 'VIEW' OR (!empty($this->preview_path) AND strtoupper($val) == 'VIEW')) + if (strtoupper($val) != 'VIEW' OR ( ! empty($this->preview_path) AND strtoupper($val) == 'VIEW')) { $action_name = lang('table_action_'.strtolower($val)); if (empty($action_name)) $action_name = $val; @@ -397,9 +378,8 @@ function items() } } } - - - if (!$this->rows_selectable) + + if ( ! $this->rows_selectable) { $this->data_table->id = 'data_table_noselect'; $this->data_table->row_action = FALSE; @@ -408,25 +388,26 @@ function items() { $this->data_table->row_action = TRUE; } + $this->data_table->row_alt_class = 'alt'; - + if ($this->model->has_auto_increment()) { $this->data_table->only_data_fields = array($this->model->key_field()); } // Key and boolean fields are data only -// $this->data_table->only_data_fields = array_merge(array($this->model->key_field()), $this->model->boolean_fields); + // $this->data_table->only_data_fields = array_merge(array($this->model->key_field()), $this->model->boolean_fields); $this->data_table->auto_sort = TRUE; $this->data_table->actions_field = 'last'; $this->data_table->no_data_str = lang('no_data'); $this->data_table->lang_prefix = 'form_label_'; $this->data_table->row_id_key = $this->model->key_field(); - + $boolean_fields = $this->model->boolean_fields; - if (!in_array('published', $boolean_fields)) $boolean_fields[] = 'published'; - if (!in_array('active', $boolean_fields)) $boolean_fields[] = 'active'; + if ( ! in_array('published', $boolean_fields)) $boolean_fields[] = 'published'; + if ( ! in_array('active', $boolean_fields)) $boolean_fields[] = 'active'; $has_publish_permission = ($this->fuel->auth->has_permission($this->permission, 'publish')) ? '1' : '0'; $has_edit_permission = $this->fuel->auth->has_permission($this->permission, 'edit') ? '1' : '0'; @@ -436,7 +417,6 @@ function items() $col_txt = lang('click_to_toggle'); $key_field = $this->model->key_field(); - $_publish_toggle_callback = ' $can_publish = (($heading == "published" OR $heading == "active") AND '.$has_publish_permission.' OR (($heading != "published" AND $heading != "active") AND '.$has_edit_permission.')); @@ -474,31 +454,30 @@ function items() $this->data_table->auto_sort = TRUE; $heading_sort_func = (isset($this->disable_heading_sort) AND $this->disable_heading_sort) ? '' : 'fuel.sortList'; $this->data_table->sort_js_func = $heading_sort_func; - $this->data_table->assign_data($items, $this->table_headers); $vars['table'] = $this->data_table->render(); - if (!empty($items[0]) AND (!empty($this->precedence_col) AND isset($items[0][$this->precedence_col]))) + + if ( ! empty($items[0]) AND ( ! empty($this->precedence_col) AND isset($items[0][$this->precedence_col]))) { $vars['params']['precedence'] = 1; } + $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars); return; } - else { $this->load->library('form_builder'); $this->js_controller_params['method'] = 'items'; $this->js_controller_params['precedence_col'] = $this->precedence_col; - - + $vars['table'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_list_table', $vars, TRUE); $vars['pagination'] = $this->pagination->create_links(); - // for extra module 'filters' $field_values = array(); + foreach($this->filters as $key => $val) { $field_values[$key] = $params[$key]; @@ -514,16 +493,20 @@ function items() $this->form_builder->set_fields($this->filters); $this->form_builder->display_errors = FALSE; $this->form_builder->css_class = 'more_filters'; + if ($this->config->item('date_format')) { $this->form_builder->date_format = $this->config->item('date_format'); } + $this->form_builder->set_field_values($field_values); if (method_exists($this->model, 'friendly_filter_info')) { $friendly_filter_info = $this->model->friendly_filter_info($field_values); - if ( ! empty($friendly_filter_info)) { + + if ( ! empty($friendly_filter_info)) + { $vars['info'] = $friendly_filter_info; } } @@ -536,9 +519,9 @@ function items() $vars['form_method'] = 'get'; $vars['query_string'] = $query_str; $vars['description'] = $this->description; + $crumbs = array($this->module_uri => $this->module_name); $this->fuel->admin->set_titlebar($crumbs); - $inline = $this->input->get('inline', TRUE); $this->fuel->admin->set_inline($inline); @@ -546,7 +529,8 @@ function items() { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_TITLEBAR); } - $this->fuel->admin->render($this->views['list'], $vars); + + $this->fuel->admin->render($this->views['list'], $vars, '', FUEL_FOLDER); } } @@ -602,22 +586,22 @@ protected function _list_process() } $posted = array(); - if (!empty($_POST) OR !empty($_GET)) - { + if ( ! empty($_POST) OR !empty($_GET)) + { $posted['search_term'] = $this->input->get_post('search_term', TRUE); $posted_vars = array('col', 'order', 'limit', 'offset', 'precedence', 'view_type'); + foreach($posted_vars as $val) { if ($this->input->get_post($val)) $posted[$val] = $this->input->get_post($val, TRUE); } - + // custom module filters $extra_filters = array(); - + foreach($this->filters as $key => $val) { - if (isset($_POST[$key]) OR isset($_GET[$key])) { $posted[$key] = $this->input->get_post($key, TRUE); @@ -629,13 +613,15 @@ protected function _list_process() if (method_exists($this->model, 'field_type')) { $field_type = $this->model->field_type($raw_key); + if (is_date_format($posted[$key]) AND $field_type == 'datetime' OR $field_type == 'date') { $date = ($this->input->get_post($key) AND is_date_format($this->input->get_post($key))) ? current(explode(" ", $this->input->get_post($key))) : ""; $hr = ($this->input->get_post($key.'_hour') AND (int)$this->input->get_post($key.'_hour') > 0 AND (int)$this->input->get_post($key.'_hour') < 24) ? $this->input->get_post($key.'_hour') : ""; $min = ($this->input->get_post($key.'_min') AND is_numeric($this->input->get_post($key.'_min'))) ? $this->input->get_post($key.'_min') : "00"; $ampm = ($this->input->get_post($key.'_am_pm') AND $hr AND $min) ? $this->input->get_post($key.'_am_pm') : ""; - if (!empty($ampm) AND !empty($hr) AND $hr > 12) + + if ( ! empty($ampm) AND !empty($hr) AND $hr > 12) { if ($hr > 24) { @@ -647,28 +633,69 @@ protected function _list_process() $ampm = "pm"; } } + $posted[$key] = $date; - if (!empty($hr)) $posted[$key] .= " ".$hr.":".$min.$ampm; + + if ( ! empty($hr)) $posted[$key] .= " ".$hr.":".$min.$ampm; + $posted[$key] = date('Y-m-d H:i:s', strtotime($posted[$key])); } } $this->filters[$key]['value'] = $posted[$key]; $extra_filters[$key] = $posted[$key]; - - } } $posted['extra_filters'] = $extra_filters; } + $params = array_merge($defaults, $page_state, $posted); //$params = array_merge($defaults, $uri_params, $posted); - + if ($params['search_term'] == lang('label_search')) $params['search_term'] = NULL; + /* PROCESS PARAMS END */ return $params; } + + // -------------------------------------------------------------------- + + /** + * Adds filters to the model + * + * @access protected + * @return void + */ + function _filter_list($params) + { + // create search filter + $filters[$this->display_field] = trim($params['search_term']); + + // sort of hacky here... to make it easy for the model to just filter on the search term (like the users model) + $this->model->filter_value = trim($params['search_term']); + + foreach($this->filters as $key => $val) + { + $filters[$key] = $params[$key]; + + if ( ! empty($val['filter_join'])) + { + if ( ! is_array($this->model->filter_join[$key])) + { + settype($this->model->filter_join, 'array'); + } + + $this->model->filter_join[$key] = $val['filter_join']; + } + } + + // set model filters before pagination and setting table data + if (method_exists($this->model, 'add_filters')) + { + $this->model->add_filters($filters); + } + } // -------------------------------------------------------------------- @@ -692,7 +719,7 @@ function items_tree() $this->model->add_filters($params['extra_filters']); $menu_items = $this->model->tree(); - if (!empty($menu_items)) + if ( ! empty($menu_items)) { $output = $this->menu->render($menu_items); } @@ -700,9 +727,9 @@ function items_tree() { $output = '<div>'.lang('no_data').'</div>'; } + $this->output->set_output($output); } - } // -------------------------------------------------------------------- @@ -715,19 +742,21 @@ function items_tree() */ function items_precedence() { - if (is_ajax() AND !empty($_POST['data_table']) AND !empty($this->precedence_col)) + if (is_ajax() AND ! empty($_POST['data_table']) AND ! empty($this->precedence_col)) { if (is_array($_POST['data_table'])) { $i = 0; + foreach($_POST['data_table'] as $row) { - if (!empty($row)) + if ( ! empty($row)) { $values = array($this->precedence_col => $i); $where = array($this->model->key_field() => $row); $this->model->update($values, $where); } + $i++; } @@ -752,19 +781,19 @@ function create($field = NULL, $redirect = TRUE) $id = NULL; // check that the action even exists and if not, show a 404 - if (!$this->fuel->auth->module_has_action('save')) + if ( ! $this->fuel->auth->module_has_action('save')) { show_404(); } - + // check permissions - if (!$this->fuel->auth->has_permission($this->module_obj->permission, 'create')) + if ( ! $this->fuel->auth->has_permission($this->module_obj->permission, 'create')) { show_error(lang('error_no_permissions')); } - + $inline = $this->fuel->admin->is_inline(); - + if (isset($_POST[$this->model->key_field()])) // check for dupes { if ($id = $this->_process_create() AND !has_errors()) @@ -783,33 +812,35 @@ function create($field = NULL, $redirect = TRUE) if ($redirect) { - if (!$this->fuel->admin->has_notification(Fuel_admin::NOTIFICATION_SUCCESS)) + if ( ! $this->fuel->admin->has_notification(Fuel_admin::NOTIFICATION_SUCCESS)) { $this->fuel->admin->set_notification(lang('data_saved'), Fuel_admin::NOTIFICATION_SUCCESS); } + redirect($url); } } } - + $shell_vars = $this->_shell_vars($id); - + $passed_init_vars = ($this->input->get(NULL, TRUE)) ? $this->input->get(NULL, TRUE) : array(); $form_vars = $this->_form_vars($id, $passed_init_vars, FALSE, $inline); $vars = array_merge($shell_vars, $form_vars); $vars['action'] = 'create'; - $crumbs = array($this->module_uri => $this->module_name, lang('action_create')); + $this->fuel->admin->set_titlebar($crumbs); $this->fuel->admin->set_inline($inline); - + if ($inline === TRUE) { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT); } $vars['actions'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_inline_actions', $vars, TRUE); - $this->fuel->admin->render($this->views['create_edit'], $vars); + $this->fuel->admin->render($this->views['create_edit'], $vars, '', FUEL_FOLDER); + return $id; } @@ -859,19 +890,20 @@ protected function _process_create() $fields = $this->model->form_fields($_POST); $fb->set_fields($fields); $fb->post_process_field_values();// manipulates the $_POST values directly - } else { $this->model->on_before_post($this->input->post()); $posted = $this->_process(); + // set publish status to no if you do not have the ability to publish - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { $posted['published'] = 'no'; $posted['active'] = 'no'; } + $model = $this->model; // run before_create hook @@ -879,29 +911,29 @@ protected function _process_create() // run before_save hook $this->_run_hook('before_save', $posted); - + // save the data $id = $this->model->save($posted); + if (empty($id)) { add_error(lang('error_invalid_id')); return FALSE; } - + // add id value to the posted array - if (!is_array($this->model->key_field())) + if ( ! is_array($this->model->key_field())) { $posted[$this->model->key_field()] = $id; } // process $_FILES - if (!$this->_process_uploads($posted)) + if ( ! $this->_process_uploads($posted)) { return FALSE; } - + $this->model->on_after_post($posted); - if (!$this->model->is_valid()) { @@ -917,11 +949,11 @@ protected function _process_create() // run after_create hook $this->_run_hook('after_create', $data); - + // run after_save hook $this->_run_hook('after_save', $data); - if (!empty($data)) + if ( ! empty($data)) { $msg = lang('module_edited', $this->module_name, $data[$this->display_field]); $this->fuel->logs->write($msg); @@ -946,19 +978,19 @@ protected function _process_create() function edit($id = NULL, $field = NULL, $redirect = TRUE) { // check that the action even exists and if not, show a 404 - if (!$this->fuel->auth->module_has_action('save') AND $this->displayonly === FALSE) + if ( ! $this->fuel->auth->module_has_action('save') AND $this->displayonly === FALSE) { show_404(); } // check permissions - if (!$this->fuel->auth->has_permission($this->module_obj->permission, 'edit') AND !$this->fuel->auth->has_permission($this->module_obj->permission, 'create')) + if ( ! $this->fuel->auth->has_permission($this->module_obj->permission, 'edit') AND ! $this->fuel->auth->has_permission($this->module_obj->permission, 'create')) { show_error(lang('error_no_permissions')); } $inline = $this->fuel->admin->is_inline(); - + if ($this->input->post($this->model->key_field())) { if ($this->_process_edit($id) AND !has_errors()) @@ -971,21 +1003,22 @@ function edit($id = NULL, $field = NULL, $redirect = TRUE) { $url = fuel_uri($this->module_uri.'/edit/'.$id.'/'.$field); } - + if ($redirect) { - if (!$this->fuel->admin->has_notification(Fuel_admin::NOTIFICATION_SUCCESS)) + if ( ! $this->fuel->admin->has_notification(Fuel_admin::NOTIFICATION_SUCCESS)) { $this->fuel->admin->set_notification(lang('data_saved'), Fuel_admin::NOTIFICATION_SUCCESS); } + redirect($url); } } } - + //$vars = $this->_form($id); $data = $this->_saved_data($id); - $action = (!empty($data[$this->model->key_field()])) ? 'edit' : 'create'; + $action = ( ! empty($data[$this->model->key_field()])) ? 'edit' : 'create'; // check model first for preview path method if (method_exists($this->model, 'preview_path')) @@ -1000,25 +1033,24 @@ function edit($id = NULL, $field = NULL, $redirect = TRUE) $shell_vars = $this->_shell_vars($id, $action); $form_vars = $this->_form_vars($id, $data, $field, $inline); - + $vars = array_merge($shell_vars, $form_vars); $vars['data'] = $data; $vars['action'] = $action; $vars['related_items'] = $this->model->related_items($data); - - + // active or publish fields if (isset($data['published'])) { - $vars['publish'] = (!empty($data['published']) AND is_true_val($data['published'])) ? 'unpublish' : 'publish'; + $vars['publish'] = ( ! empty($data['published']) AND is_true_val($data['published'])) ? 'unpublish' : 'publish'; } if (isset($data['active'])) { - $vars['activate'] = (!empty($data['active']) AND is_true_val($data['active'])) ? 'deactivate' : 'activate'; + $vars['activate'] = ( ! empty($data['active']) AND is_true_val($data['active'])) ? 'deactivate' : 'activate'; } - - if (!empty($field)) + + if ( ! empty($field)) { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_NO_ACTION); } @@ -1028,22 +1060,22 @@ function edit($id = NULL, $field = NULL, $redirect = TRUE) } $crumbs = array($this->module_uri => $this->module_name); - if (!empty($data[$this->display_field])) + + if ( ! empty($data[$this->display_field])) { $crumbs[''] = character_limiter(strip_tags($data[$this->display_field]), 50); } - + $this->fuel->admin->set_titlebar($crumbs); $vars['actions'] = $this->load->module_view(FUEL_FOLDER, '_blocks/module_create_edit_actions', $vars, TRUE); - $this->fuel->admin->render($this->views['create_edit'], $vars); + $this->fuel->admin->render($this->views['create_edit'], $vars, '', FUEL_FOLDER); // do this after rendering so it doesn't render current page' - if (!empty($data[$this->display_field]) AND $inline !== TRUE) + if ( ! empty($data[$this->display_field]) AND $inline !== TRUE) { $this->fuel->admin->add_recent_page($this->uri->uri_string(), $this->module_name.': '.$data[$this->display_field], $this->module); } - } // -------------------------------------------------------------------- @@ -1080,26 +1112,26 @@ function inline_edit($id = NULL, $field = NULL) protected function _process_edit($id) { $this->model->on_before_post($this->input->post()); - + $posted = $this->_process(); // run before_edit hook $this->_run_hook('before_edit', $posted); - + // run before_save hook $this->_run_hook('before_save', $posted); if ($this->model->save($posted)) { // process $_FILES... - if (!$this->_process_uploads($posted)) + if ( ! $this->_process_uploads($posted)) { return FALSE; } - + $this->model->on_after_post($posted); - - if (!$this->model->is_valid()) + + if ( ! $this->model->is_valid()) { add_errors($this->model->get_errors()); } @@ -1109,7 +1141,7 @@ protected function _process_edit($id) $archive_data = $this->model->cleaned_data(); if ($this->archivable) $this->model->archive($id, $archive_data); $data = $this->model->find_one_array(array($this->model->table_name().'.'.$this->model->key_field() => $id)); - + // run after_edit hook $this->_run_hook('after_edit', $data); @@ -1119,9 +1151,11 @@ protected function _process_edit($id) $msg = lang('module_edited', $this->module_name, $data[$this->display_field]); $this->fuel->logs->write($msg); $this->_clear_cache(); + return TRUE; } } + return FALSE; } @@ -1137,28 +1171,27 @@ protected function _process_edit($id) protected function _sanitize($data) { $posted = $data; - - if (!empty($this->sanitize_input)) + + if ( ! empty($this->sanitize_input)) { // functions that are valid for sanitizing $valid_funcs = $this->fuel->config('module_sanitize_funcs'); - + if ($this->sanitize_input === TRUE) { foreach($data as $key => $val) { - if (!empty($val)) + if ( ! empty($val)) { $posted[$key] = xss_clean($val); } - } } else { // force to array to normalize $sanitize_input = (array) $this->sanitize_input; - + if (is_array($data)) { foreach($data as $key => $post) @@ -1173,6 +1206,7 @@ protected function _sanitize($data) foreach($sanitize_input as $func) { $func = (isset($valid_funcs[$func])) ? $valid_funcs[$func] : FALSE; + if ($func) { $posted[$key] = $func($posted[$key]); @@ -1187,6 +1221,7 @@ protected function _sanitize($data) foreach($sanitize_input as $key => $val) { $func = (isset($valid_funcs[$val])) ? $valid_funcs[$val] : FALSE; + if ($func) { $posted = $func($posted); @@ -1217,7 +1252,7 @@ protected function _shell_vars($id = NULL, $action = 'create') // other variables $vars['id'] = $id; - $vars['versions'] = ($this->displayonly === FALSE) ? $this->fuel_archives_model->options_list($id, $this->model->table_name()) : array(); + $vars['versions'] = ($this->displayonly === FALSE AND $this->archivable) ? $this->fuel_archives_model->options_list($id, $this->model->table_name()) : array(); $vars['others'] = $this->model->get_others($this->display_field, $id); $vars['action'] = $action; @@ -1240,8 +1275,9 @@ protected function _shell_vars($id = NULL, $action = 'create') protected function _saved_data($id) { if (empty($id)) return array(); - + $edit_method = $this->edit_method; + if ($edit_method != 'find_one_array') { $saved = $this->model->$edit_method($id); @@ -1250,6 +1286,7 @@ protected function _saved_data($id) { $saved = $this->model->$edit_method(array($this->model->table_name().'.'.$this->model->key_field() => $id)); } + return $saved; } @@ -1257,38 +1294,37 @@ protected function _saved_data($id) protected function _form_vars($id = NULL, $values = array(), $field = NULL, $inline = FALSE) { $this->load->library('form_builder'); - + // load custom fields $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); $model = $this->model; $this->js_controller_params['method'] = 'add_edit'; $action = (!empty($values[$this->model->key_field()])) ? 'edit' : 'create'; - + // create fields... start with the table info and go from there $fields = (!empty($values)) ? $this->model->form_fields($values) : $this->model->form_fields($_POST); // if field parameter is set, then we just display a single field - if (!empty($field)) + if ( ! empty($field)) { - // added per pierlo in Forum (http://www.getfuelcms.com/forums/discussion/673/fuel_helper-fuel_edit-markers) $columns = explode(':', $field); - + // special case if you use the word required if (in_array('required', $columns)) { $columns = array_merge($columns, $this->model->required); } - + // set them to hidden... just in case model hooks require the values to be passed on save foreach($fields as $k => $f) { - if (!in_array($k, $columns)) + if ( ! in_array($k, $columns)) { $fields[$k]['type'] = 'hidden'; } - + if (count($columns) <= 1) { $fields[$k]['display_label'] = FALSE; @@ -1296,21 +1332,22 @@ protected function _form_vars($id = NULL, $values = array(), $field = NULL, $inl } } } - + // set published/active to hidden since setting this is an buttton/action instead of a form field $form = ''; + if (is_array($fields)) { - - $field_values = (!empty($_POST)) ? $_POST : $values; - + $field_values = ( ! empty($_POST)) ? $_POST : $values; + $published_active = array( 'publish' => 'published', 'active' => 'activate' ); + foreach($published_active as $k => $v) { - if (!$this->fuel->auth->has_permission($this->permission, $k)) + if ( ! $this->fuel->auth->has_permission($this->permission, $k)) { unset($fields[$v]); } @@ -1330,17 +1367,19 @@ protected function _form_vars($id = NULL, $values = array(), $field = NULL, $inl $fields['__fuel_inline_action__'] = array('type' => 'hidden'); $fields['__fuel_inline_action__']['class'] = '__fuel_inline_action__'; $fields['__fuel_inline_action__']['value'] = (empty($id)) ? 'create' : 'edit'; - + $fields['__fuel_inline__'] = array('type' => 'hidden'); $fields['__fuel_inline__']['value'] = ($inline) ? 1 : 0; $this->form_builder->submit_value = lang('btn_save'); $this->form_builder->question_keys = array(); $this->form_builder->use_form_tag = FALSE; + if ($this->model->has_auto_increment()) { $this->form_builder->hidden = (array) $this->model->key_field(); } + $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; $this->form_builder->set_field_values($field_values); @@ -1365,10 +1404,10 @@ protected function _form_vars($id = NULL, $values = array(), $field = NULL, $inl { $this->form_builder->displayonly = $this->displayonly; } - - + $form = $this->form_builder->render(); } + $action_uri = $action.'/'.$id.'/'.$field; $vars['form_action'] = ($inline) ? $this->module_uri.'/inline_'.$action_uri : $this->module_uri.'/'.$action_uri; $vars['form'] = $form; @@ -1377,6 +1416,7 @@ protected function _form_vars($id = NULL, $values = array(), $field = NULL, $inl $vars['notifications'] = $this->load->module_view(FUEL_FOLDER, '_blocks/notifications', $vars, TRUE); $vars['instructions'] = (empty($field)) ? $this->instructions : ''; $vars['field'] = (!empty($field)); + return $vars; } @@ -1398,7 +1438,7 @@ protected function _process() } return $str; '); - + // first loop through and create simple non-namespaced $_POST values if they don't exist for convenience' foreach($_POST as $key => $val) { @@ -1416,7 +1456,7 @@ protected function _process() } // set boolean fields - if (!empty($this->model->boolean_fields) AND is_array($this->model->boolean_fields)) + if ( ! empty($this->model->boolean_fields) AND is_array($this->model->boolean_fields)) { foreach($this->model->boolean_fields as $val) { @@ -1425,20 +1465,19 @@ protected function _process() } // if no permission to publish, then we revoke - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { unset($_POST['published']); } - + // set key_field if it is not id - if (!empty($_POST['id']) AND $this->model->key_field() != 'id') + if ( ! empty($_POST['id']) AND $this->model->key_field() != 'id') { $_POST[$this->model->key_field()] = $_POST['id']; } // run any form field post processing hooks $this->load->library('form_builder'); - // use a new instance to prevent problems when duplicating $fb = new Form_builder(); @@ -1462,8 +1501,8 @@ public function _block_processing($fields, $posted) // check blocks for post processing of variables if (isset($val['type']) AND $val['type'] == 'block' AND isset($posted[$key]['block_name'])) { - $block_layout = $this->fuel->layouts->get($posted[$key]['block_name'], 'block'); + if ($block_layout) { $block_fields = $block_layout->fields(); @@ -1472,7 +1511,7 @@ public function _block_processing($fields, $posted) } // check for template layouts that may have nested fields... this is really ugly - if (!empty($val['fields']) AND is_array($val['fields'])) + if ( ! empty($val['fields']) AND is_array($val['fields'])) { //$fields = array_merge($fields, $val['fields']); foreach($val['fields'] as $k => $v) @@ -1490,6 +1529,7 @@ public function _block_processing($fields, $posted) if (isset($d['block_name'])) { $block_layout = $this->fuel->layouts->get($d['block_name'], 'block'); + if ($block_layout) { $block_fields = $block_layout->fields(); @@ -1500,6 +1540,7 @@ public function _block_processing($fields, $posted) $block_fields[$e]['subkey'] = $k; $block_fields[$e]['key'] = $key; } + $fields = array_merge($fields, $block_fields); } } @@ -1511,6 +1552,7 @@ public function _block_processing($fields, $posted) } } } + return $fields; } @@ -1524,47 +1566,42 @@ function form($id = NULL, $field = NULL) function delete($id = NULL) { // check that the action even exists and if not, show a 404 - if (!$this->fuel->auth->module_has_action('delete')) - { - show_404(); - } - - if (!$this->fuel->auth->has_permission($this->permission, 'delete')) + if ( ! $this->fuel->auth->module_has_action('delete')) show_404(); + + if ( ! $this->fuel->auth->has_permission($this->permission, 'delete')) { show_error(lang('error_no_permissions')); } $inline = $this->fuel->admin->is_inline(); - if (!empty($_POST['id'])) + + if ( ! empty($_POST['id'])) { $posted = explode('|', $this->input->post('id', TRUE)); - - + // run before_delete hook $this->_run_hook('before_delete', $posted); - + // Flags $any_success = $any_failure = FALSE; - + foreach ($posted as $id) { if ($this->model->delete(array($this->model->key_field() => $id))) { $any_success = TRUE; - } else { $any_failure = TRUE; - } } - + // run after_delete hook $this->_run_hook('after_delete', $posted); - + $this->_clear_cache(); - + if (count($posted) > 1) { $this->fuel->logs->write(lang('module_multiple_deleted', $this->module)); @@ -1579,16 +1616,17 @@ function delete($id = NULL) $vars['title'] = ''; $vars['id'] = ''; $vars['back_action'] = ''; - $this->fuel->admin->render('modules/module_close_modal', $vars); + + $this->fuel->admin->render('modules/module_close_modal', $vars, '', FUEL_FOLDER); $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_TITLEBAR); - $this->fuel->admin->render($this->views['delete'], $vars); + $this->fuel->admin->render($this->views['delete'], $vars, '', FUEL_FOLDER); } else { // set a success delete message if ($any_success) { - if (!$this->session->flashdata('success')) + if ( ! $this->session->flashdata('success')) { $this->fuel->admin->set_notification(lang('data_deleted'), Fuel_admin::NOTIFICATION_SUCCESS); } @@ -1601,10 +1639,8 @@ function delete($id = NULL) $msg = $this->model->get_validation()->get_last_error(); // if there is none like that, lets use default message - if (is_null($msg)) - { - $msg = lang('data_not_deleted'); - } + if (is_null($msg)) $msg = lang('data_not_deleted'); + $this->fuel->admin->set_notification($msg, Fuel_admin::NOTIFICATION_ERROR); } @@ -1615,16 +1651,20 @@ function delete($id = NULL) else { $this->js_controller_params['method'] = 'deleteItem'; - + $vars = array(); - if (!empty($_POST['delete']) AND is_array($_POST['delete'])) + + if ( ! empty($_POST['delete']) AND is_array($_POST['delete'])) { $data = array(); + foreach($this->input->post('delete') as $key => $val) { $d = $this->model->find_by_key($key, 'array'); - if (!empty($d)) $data[] = $d[$this->display_field]; + + if ( ! empty($d)) $data[] = $d[$this->display_field]; } + $vars['id'] = implode('|', array_keys($_POST['delete'])); $vars['title'] = implode(', ', $data); } @@ -1632,24 +1672,22 @@ function delete($id = NULL) { $data = $this->model->find_by_key($id, 'array'); $vars['id'] = $id; + if (isset($data[$this->display_field])) { $vars['title'] = $data[$this->display_field]; } } - - if (empty($data)) - { - show_404(); - } - + + if (empty($data)) show_404(); + $vars['error'] = $this->model->get_errors(); - + $crumbs = array($this->module_uri => $this->module_name); $crumbs[''] = character_limiter(strip_tags(lang('action_delete').' '.$vars['title']), 50); - + $this->fuel->admin->set_titlebar($crumbs); - + if ($inline) { $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_COMPACT_NO_ACTION); @@ -1660,13 +1698,14 @@ function delete($id = NULL) $this->fuel->admin->set_display_mode(Fuel_admin::DISPLAY_NO_ACTION); $vars['back_action'] = fuel_url($this->module_uri.'/'); } + $action_uri = 'delete/'.$id; $vars['form_action'] = ($inline) ? $this->module_uri.'/inline_'.$action_uri : $this->module_uri.'/'.$action_uri; - $this->fuel->admin->render($this->views['delete'], $vars); + $this->fuel->admin->render($this->views['delete'], $vars, '', FUEL_FOLDER); } } - + function inline_delete($id) { $this->fuel->admin->set_inline(TRUE); @@ -1675,29 +1714,30 @@ function inline_delete($id) function restore() { - if (!$this->fuel->auth->has_permission($this->permission, 'edit')) + if ( ! $this->fuel->auth->has_permission($this->permission, 'edit')) { show_error(lang('error_no_permissions')); } - - if (!empty($_POST['fuel_restore_version']) AND !empty($_POST['fuel_restore_ref_id'])) + + if ( ! empty($_POST['fuel_restore_version']) AND ! empty($_POST['fuel_restore_ref_id'])) { - if (!$this->model->restore($this->input->post('fuel_restore_ref_id'), $this->input->post('fuel_restore_version'))) + if ( ! $this->model->restore($this->input->post('fuel_restore_ref_id'), $this->input->post('fuel_restore_version'))) { $msg = lang('module_restored', $this->module_name); $this->fuel->logs->write($msg); - + $this->fuel->admin->set_notification($this->model->get_validation()->get_last_error(), Fuel_admin::NOTIFICATION_ERROR); - } else { - if (!$this->session->flashdata('success')) + if ( ! $this->session->flashdata('success')) { $this->fuel->admin->set_notification(lang('module_restored_success'), Fuel_admin::NOTIFICATION_SUCCESS); } + $this->_clear_cache(); } + redirect(fuel_uri($this->module_uri.'/edit/'.$this->input->post('fuel_restore_ref_id', TRUE))); } else @@ -1708,20 +1748,18 @@ function restore() function replace($id = NULL) { - if (empty($id)) - { - show_404(); - } - - if (!$this->fuel->auth->has_permission($this->permission, 'edit') OR !$this->fuel->auth->has_permission($this->permission, 'delete')) + if (empty($id)) show_404(); + + if ( ! $this->fuel->auth->has_permission($this->permission, 'edit') OR ! $this->fuel->auth->has_permission($this->permission, 'delete')) { show_error(lang('error_no_permissions')); } - + $success = FALSE; - if (!empty($_POST)) + + if ( ! empty($_POST)) { - if (!empty($_POST['fuel_replace_id'])) + if ( ! empty($_POST['fuel_replace_id'])) { $replace_id = $this->input->post('fuel_replace_id'); //$delete = is_true_val($this->input->post('fuel_delete_replacement')); @@ -1743,35 +1781,36 @@ function replace($id = NULL) } //redirect(fuel_uri($this->module_uri.'/edit/'.$id)); } + $this->load->library('form_builder'); - + $fields = array(); $other_options = $this->model->get_others($this->display_field, $id); $fields['fuel_replace_id'] = array('label' => 'Replace record:', 'type' => 'select', 'options' => $other_options, 'first_option' => 'Select record to replace...', 'style' => 'max-width: 400px', 'disabled_options' => array($id)); //$fields['fuel_delete_replacement'] = array('label' => 'Delete replacement', 'type' => 'checkbox', 'value' => 'yes'); + if ($success) { $fields['new_fuel_replace_id'] = array('type' => 'hidden', 'value' => $replace_id); } - + //$this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; //$this->form_builder->submit_value = NULL; - + $vars['form'] = $this->form_builder->render(); $this->fuel->admin->set_inline(TRUE); $crumbs = array('' => $this->module_name, lang('action_replace')); $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('modules/module_replace', $vars); - + $this->fuel->admin->render('modules/module_replace', $vars, '', FUEL_FOLDER); } - + // displays the module's designated view' function view($id = NULL) { - if (!empty($this->preview_path) AND !empty($id)) + if ( ! empty($this->preview_path) AND !empty($id)) { $data = $this->model->find_one_array(array($this->model->table_name().'.'.$this->model->key_field() => $id)); @@ -1787,42 +1826,41 @@ function view($id = NULL) show_error(lang('no_preview_path')); } } - + // refreshes a single field function refresh_field() { - if (!empty($_POST)) + if ( ! empty($_POST)) { $fields = $this->model->form_fields(); $field = $this->input->post('field', TRUE); - if (!isset($fields[$field])) return; - + + if ( ! isset($fields[$field])) return; + $field_id = $this->input->post('field_id', TRUE); $values = $this->input->post('values', TRUE); $selected = $this->input->post('selected', TRUE); - + $field_key = end(explode('vars--', $field)); $this->load->library('form_builder'); $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - + // for multi select if (is_array($values)) { $selected = (array) $selected; + foreach($values as $v) { - if (!in_array($v, $selected)) - { - $selected[] = $v; - } + if ( ! in_array($v, $selected)) $selected[] = $v; } } - - if (!empty($selected)) $fields[$field]['value'] = $selected; - $fields[$field]['name'] = $field_id; + if ( ! empty($selected)) $fields[$field]['value'] = $selected; + + $fields[$field]['name'] = $field_id; $output = ''; // if template/nested field types, then we need to look at the sub field @@ -1845,15 +1883,13 @@ function refresh_field() $params['instance'] =& $this->form_builder; $sub_fields = $fuel_cf->template($params, TRUE); - if (!empty($sub_fields[0][$key])) - { - $output = $sub_fields[0][$key]; - } - + + if ( ! empty($sub_fields[0][$key])) $output = $sub_fields[0][$key]; } else { - if (!empty($selected)) $fields[$field_key]['value'] = $selected; + if ( ! empty($selected)) $fields[$field_key]['value'] = $selected; + $fields[$field_key]['name'] = $field_id; // if the field is an ID, then we will do a select instead of a text field @@ -1862,35 +1898,37 @@ function refresh_field() $fields[$this->model->key_field()]['type'] = 'select'; $fields[$this->model->key_field()]['options'] = $this->model->options_list(); } + $output = $this->form_builder->create_field($fields[$field_key]); } - + $this->output->set_output($output); - } } // processes linked fields function process_linked() { - if (!empty($_POST)) + if ( ! empty($_POST)) { $master_field = $this->input->post('master_field', FALSE); $master_value = $this->input->post('master_value', FALSE); $slave_field = $this->input->post('slave_field', FALSE); + $values = array( $master_field => $master_value, $slave_field => '' // blank so we can process ); + $processed = $this->model->process_linked($values); - if (!empty($processed[$slave_field])) + + if ( ! empty($processed[$slave_field])) { $this->output->set_output($processed[$slave_field]); } } - } - + // automatically calls ajax methods on the model function ajax($method = NULL) { @@ -1901,14 +1939,14 @@ function ajax($method = NULL) $method = 'ajax_'.$method; $params = $this->input->get_post(NULL, TRUE); - - if (!method_exists($this->model, $method)) + + if ( ! method_exists($this->model, $method)) { show_error(lang('error_invalid_method')); } - + $results = $this->model->$method($params); - + if (is_string($results)) { $this->output->set_output($results); @@ -1920,37 +1958,37 @@ function ajax($method = NULL) $this->output->set_header('Last-Modified: '. gmdate('D, d M Y H:i:s').'GMT'); $this->output->set_header('Content-type: application/json'); $output = json_encode($results); + print($output); } - } } - + // exports data to CSV function export() { - if (empty($this->exportable)) - { - show_404(); - } - - if (!$this->fuel->auth->has_permission($this->permission, 'export')) + if (empty($this->exportable)) show_404(); + + if ( ! $this->fuel->auth->has_permission($this->permission, 'export')) { show_error(lang('error_no_permissions')); } - if (!empty($_POST)) + + if ( ! empty($_POST)) { // load dbutils for convenience to use in custom methods on model $this->load->dbutil(); $this->load->helper('download'); - + $filename = $this->module.'_'.date('Y-m-d').'.csv'; $params = $this->_list_process(); + $this->_filter_list($params); $data = $this->model->export_data($params); + force_download($filename, $data); } } - + // used in list view to quickly unpublish (if they have permisison) function toggle_on($id = NULL, $field = 'published') { @@ -1962,26 +2000,26 @@ function toggle_off($id = NULL, $field = 'published') { $this->_toggle($id, $field, 'off'); } - + // reduce code by creating this shortcut function for the unpublish/publish function _toggle($id, $field, $toggle) { - if (!$this->fuel->auth->module_has_action('save') OR ($field == 'publish' AND !$this->fuel->auth->has_permission($this->permission, 'publish'))) + if ( ! $this->fuel->auth->module_has_action('save') OR ($field == 'publish' AND !$this->fuel->auth->has_permission($this->permission, 'publish'))) { return FALSE; } - + if (empty($id)) { $id = $this->input->post($this->model->key_field()); } - + if ($id) { $save = $this->model->find_by_key($id, 'array'); $field_info = $this->model->field_info($field); - if (!empty($save)) + if ( ! empty($save)) { if ($toggle == 'on') { @@ -1994,11 +2032,10 @@ function _toggle($id, $field, $toggle) // run before_edit hook $this->_run_hook('before_edit', $save); - + // run before_save hook $this->_run_hook('before_save', $save); - $save = $this->model->clean($save); $where[$this->model->key_field()] = $id; @@ -2010,13 +2047,13 @@ function _toggle($id, $field, $toggle) // log it $data = $this->model->find_by_key($id, 'array'); - + // run after_edit hook $this->_run_hook('after_edit', $data); // run after_save hook $this->_run_hook('after_save', $data); - + $msg = lang('module_edited', $this->module_name, $data[$this->display_field]); $this->fuel->logs->write($msg); } @@ -2026,7 +2063,7 @@ function _toggle($id, $field, $toggle) } } } - + if (is_ajax()) { $this->output->set_output($toggle); @@ -2064,6 +2101,7 @@ protected function _common_fields($values) $fields['__fuel_id__'] = array('type' => 'hidden'); $fields['__fuel_id__']['value'] = (!empty($values[$this->model->key_field()])) ? $values[$this->model->key_field()] : ''; $fields['__fuel_id__']['class'] = '__fuel_id__'; + return $fields; } @@ -2072,10 +2110,11 @@ protected function _save_tab_state($id) // set tab if (isset($_POST['__fuel_selected_tab__'])) { - if (!empty($_COOKIE['fuel_tabs'])) + if ( ! empty($_COOKIE['fuel_tabs'])) { $tab_cookie = json_decode(urldecode($_COOKIE['fuel_tabs']), TRUE); - if (!empty($tab_cookie)) + + if ( ! empty($tab_cookie)) { $tab_cookie[$this->module.'_edit_'.$id] = $_POST['__fuel_selected_tab__']; $cookie_val = urlencode(json_encode($tab_cookie)); @@ -2088,20 +2127,21 @@ protected function _save_tab_state($id) //'path' => WEB_PATH 'path' => $this->fuel->config('fuel_cookie_path') ); + set_cookie($config); } } } } - + protected function _process_uploads($posted = NULL) { if (empty($posted)) $posted = $_POST; + $errors = FALSE; - - if (!empty($_FILES)) - { + if ( ! empty($_FILES)) + { // loop through uploaded files foreach ($_FILES as $file => $file_info) { @@ -2164,7 +2204,6 @@ protected function _process_uploads($posted = NULL) $posted[$tmp_field_name] = $file_val; $posted[$field_name] = $file_val; $posted[$file_tmp.'_file_name'] = $file_val; - } } @@ -2178,7 +2217,7 @@ protected function _process_uploads($posted = NULL) $params['posted'] = $posted; // UPLOAD!!! - if (!$this->fuel->assets->upload($params)) + if ( ! $this->fuel->assets->upload($params)) { $errors = TRUE; $msg = $this->fuel->assets->last_error(); @@ -2187,7 +2226,6 @@ protected function _process_uploads($posted = NULL) } else { - // do post processing of updating field values if they changed during upload due to overwrite being FALSE $uploaded_data = $this->fuel->assets->uploaded_data(); @@ -2198,20 +2236,17 @@ protected function _process_uploads($posted = NULL) $this->upload_data =& $uploaded_data; // now process the data related to upload a file including translated path names - if (!isset($field_name)) - { - $field_name = ''; - } + if ( ! isset($field_name)) $field_name = ''; + $this->_process_upload_data($field_name, $uploaded_data, $posted); - } } - return !$errors; + + return ! $errors; } protected function _process_upload_data($field_name, $uploaded_data, $posted) { - $field_name = end(explode('--', $field_name)); foreach($uploaded_data as $key => $val) @@ -2221,7 +2256,7 @@ protected function _process_upload_data($field_name, $uploaded_data, $posted) // get the file name field // if the file name field exists AND there is no specified hidden filename field to assign to it AND... // the model does not have an array key field AND there is a key field value posted - if (isset($field_name) AND !is_array($this->model->key_field()) AND isset($posted[$this->model->key_field()])) + if (isset($field_name) AND ! is_array($this->model->key_field()) AND isset($posted[$this->model->key_field()])) { $id = $posted[$this->model->key_field()]; $data = $this->model->find_one_array(array($this->model->table_name().'.'.$this->model->key_field() => $id)); @@ -2232,10 +2267,7 @@ protected function _process_upload_data($field_name, $uploaded_data, $posted) $field_name = substr($file_tmp, 0, ($file_tmp - 7)); } - if (isset($posted[$field_name])) - { - $save = TRUE; - } + if (isset($posted[$field_name])) $save = TRUE; // look for repeatable values that match if (preg_match('#(.+)_(\d+)_(.+)#', $file_tmp, $matches)) @@ -2249,7 +2281,6 @@ protected function _process_upload_data($field_name, $uploaded_data, $posted) if ($save) { - $data[$field_name] = $val['file_name']; // reset any validation to prevent issues with saving again (e.g. unique fields and the is_new function is problematic) diff --git a/fuel/modules/fuel/controllers/my_modules.php b/fuel/modules/fuel/controllers/my_modules.php index 68ddf0518..2e883bcc3 100644 --- a/fuel/modules/fuel/controllers/my_modules.php +++ b/fuel/modules/fuel/controllers/my_modules.php @@ -2,35 +2,32 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class My_modules extends Fuel_base_controller { - + public function __construct() { parent::__construct(); } - + public function index() { $vars['modules'] = $this->fuel->modules->advanced(); $crumbs = array(lang('section_my_modules')); $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('manage/my_modules', $vars); + $this->fuel->admin->render('manage/my_modules', $vars, '', FUEL_FOLDER); } - + public function install($module = NULL) { - $module = 'test'; //$this->fuel->modules->install($module); $this->fuel->install->activate('backup'); } - + public function uninstall($module = NULL) { $this->fuel->set_module($module); //$this->fuel->install->deactivate(); $this->fuel->$module->deactivate(); } - - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/my_profile.php b/fuel/modules/fuel/controllers/my_profile.php index 9b946b971..18030ab65 100644 --- a/fuel/modules/fuel/controllers/my_profile.php +++ b/fuel/modules/fuel/controllers/my_profile.php @@ -11,11 +11,10 @@ public function __construct() public function edit() { - $user = $this->fuel->auth->user_data(); $id = $user['id']; - - if (!empty($_POST)) + + if ( ! empty($_POST)) { if ($id) { @@ -26,6 +25,7 @@ public function edit() } } } + $this->_form($id); } @@ -34,17 +34,18 @@ public function _form($id = null) { $this->load->library('form_builder'); $this->js_controller_params['method'] = 'add_edit'; - + // create fields... start with the table info and go from there $values = array('id' => $id); $fields = $this->fuel_users_model->form_fields($values); - + // remove permissions unset($fields['permissions']); - + // get saved data $saved = array(); - if (!empty($id)) + + if ( ! empty($id)) { $saved = $this->fuel_users_model->user_info($id); } @@ -52,8 +53,7 @@ public function _form($id = null) // remove active from field list to prevent them from updating it unset($fields['active'], $fields['Permissions']); - - if (!empty($_POST)) + if ( ! empty($_POST)) { $field_values = $this->fuel_users_model->clean(); } @@ -61,31 +61,29 @@ public function _form($id = null) { $field_values = $saved; } - + $this->form_builder->form->validator = &$this->fuel_users_model->get_validation(); $this->form_builder->submit_value = lang('btn_save'); $this->form_builder->use_form_tag = false; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = false; $this->form_builder->set_field_values($field_values); + $vars['form'] = $this->form_builder->render(); - + // other variables $vars['id'] = $id; $vars['data'] = $saved; - + // active or publish fields $errors = $this->fuel_users_model->get_errors(); - if (!empty($errors)) - { - add_errors($errors); - } - + + if ( ! empty($errors)) add_errors($errors); + $this->fuel->admin->set_titlebar_icon('ico_users'); - + $crumbs = lang('section_my_profile'); $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('my_profile', $vars); + $this->fuel->admin->render('my_profile', $vars, '', FUEL_FOLDER); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/navigation.php b/fuel/modules/fuel/controllers/navigation.php index 4cec8b163..ecf9d5bfb 100644 --- a/fuel/modules/fuel/controllers/navigation.php +++ b/fuel/modules/fuel/controllers/navigation.php @@ -2,32 +2,34 @@ require_once('module.php'); class Navigation extends Module { - + public function __construct() { parent::__construct(); } - + public function upload() { $this->load->library('form_builder'); $this->load->module_model(FUEL_FOLDER, 'fuel_navigation_groups_model'); $this->load->module_model(FUEL_FOLDER, 'fuel_navigation_model'); + $this->js_controller_params['method'] = 'upload'; - - if (!empty($_POST)) + + if ( ! empty($_POST)) { $params = $this->input->post(); - - if (!empty($_FILES['file']['name'])) + + if ( ! empty($_FILES['file']['name'])) { $error = FALSE; $file_info = $_FILES['file']; + $params['file_path'] = $file_info['tmp_name']; $params['var'] = $this->input->post('variable') ? $this->input->post('variable', TRUE) : 'nav'; $params['language'] = $this->input->post('language', TRUE); - - if (!$this->fuel->navigation->upload($params)) + + if ( ! $this->fuel->navigation->upload($params)) { $error = TRUE; } @@ -40,21 +42,21 @@ public function upload() { // change list view page state to show the selected group id $this->fuel->admin->set_notification(lang('navigation_success_upload'), Fuel_admin::NOTIFICATION_SUCCESS); - + redirect(fuel_url('navigation?group_id='.$params['group_id'])); } - } else { add_error(lang('error_upload')); } } - + $fields = array(); $nav_groups = $this->fuel_navigation_groups_model->options_list('id', 'name', array('published' => 'yes'), 'id asc'); + if (empty($nav_groups)) $nav_groups = array('1' => 'main'); - + // load custom fields $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); @@ -66,7 +68,6 @@ public function upload() $fields['__fuel_module__'] = array('type' => 'hidden'); $fields['__fuel_module__']['value'] = $this->module; $fields['__fuel_module__']['class'] = '__fuel_module__'; - $fields['__fuel_module_uri__'] = array('type' => 'hidden'); $fields['__fuel_module_uri__']['value'] = $this->module_uri; $fields['__fuel_module_uri__']['class'] = '__fuel_module_uri__'; @@ -75,27 +76,31 @@ public function upload() $this->form_builder->submit_value = ''; $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_field_values($_POST); - + $vars['instructions'] = lang('navigation_import_instructions'); $vars['form'] = $this->form_builder->render(); $vars['back_action'] = ($this->fuel->admin->last_page() AND $this->fuel->admin->is_inline()) ? $this->fuel->admin->last_page() : fuel_uri($this->module_uri); $crumbs = array($this->module_uri => $this->module_name, lang('action_upload')); + $this->fuel->admin->set_titlebar($crumbs); - - $this->fuel->admin->render('upload', $vars, Fuel_admin::DISPLAY_NO_ACTION); + $this->fuel->admin->render('upload', $vars, Fuel_admin::DISPLAY_NO_ACTION, FUEL_FOLDER); } - + public function download() { - if (!empty($_POST['group_id'])) + if ( ! empty($_POST['group_id'])) { $this->load->helper('download'); + $where['group_id'] = $this->input->post('group_id', TRUE); $where['published'] = 'yes'; + $data = $this->model->find_all_array_assoc('nav_key', $where, 'parent_id asc, precedence asc'); + $var = '$nav'; $str = "<?php \n"; + foreach($data as $key => $val) { // add label @@ -107,7 +112,7 @@ public function download() $str .= "'location' => '".$val['location']."', "; } - if (!empty($val['parent_id'])) + if ( ! empty($val['parent_id'])) { $parent_data = $this->model->find_one_array(array('id' => $val['parent_id'])); $str .= "'parent_id' => '".$parent_data['nav_key']."', "; @@ -118,34 +123,40 @@ public function download() $str .= "'hidden' => 'yes', "; } - if (!empty($val['attributes'])) + if ( ! empty($val['attributes'])) { $str .= "'attributes' => '".$val['attributes']."', "; } - if (!empty($val['selected'])) + if ( ! empty($val['selected'])) { $str .= "'selected' => '".$val['selected']."', "; } + $str = substr($str, 0, -2); $str .= ");\n"; } + force_download('nav.php', $str); } } - + public function parents($group_id = NULL, $parent_id = NULL, $id = NULL) { - if (is_ajax() AND !empty($group_id)) + if (is_ajax() AND ! empty($group_id)) { $this->load->library('form'); + $where = array(); - if (!empty($group_id)) $where['group_id'] = $group_id; - if (!empty($id)) $where['id !='] = $id; - if (!empty($id)) $where['parent_id !='] = $id; - + + if ( ! empty($group_id)) $where['group_id'] = $group_id; + if ( ! empty($id)) $where['id !='] = $id; + if ( ! empty($id)) $where['parent_id !='] = $id; + $parent_options = $this->model->options_list('id', 'nav_key', $where); + $select = $this->form->select('parent_id', $parent_options, $parent_id, '', 'None'); + $this->output->set_output($select); } else if ($parent_id != 0) @@ -153,5 +164,4 @@ public function parents($group_id = NULL, $parent_id = NULL, $id = NULL) show_error(lang('error_missing_params')); } } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/page_router.php b/fuel/modules/fuel/controllers/page_router.php index 3a435d0ec..a6dddb55e 100644 --- a/fuel/modules/fuel/controllers/page_router.php +++ b/fuel/modules/fuel/controllers/page_router.php @@ -4,27 +4,29 @@ class Page_router extends CI_Controller { public $segments = array(); public $layout = ''; public $location; - + public function __construct() { parent::__construct(); } - + public function _remap($method) { $this->location = uri_path(TRUE); - + // if the rerouted file can't be found, look for the non-routed file' - if (!file_exists(APPPATH.'views/'.$this->location.EXT)) + if ( ! file_exists(APPPATH.'views/'.$this->location.EXT)) { $non_routed_uri = uri_path(FALSE); + if (file_exists(APPPATH.'views/'.$non_routed_uri.EXT)) { $this->location = $non_routed_uri; } + unset($non_routed_uri); } - + if (empty($this->location)) $this->location = $this->fuel->config('default_home_view'); $config = array(); @@ -37,14 +39,13 @@ public function _remap($method) $this->_remap_variables($page); } - // using FUEL admin else { if ($this->fuel->pages->mode() != 'cms') { - $config['render_mode'] = 'auto'; + if ($this->fuel->config('uri_view_overwrites')) { // loop through the pages array looking for wild-cards @@ -60,9 +61,10 @@ public function _remap($method) } } } + $page = $this->fuel->pages->create($config); - - if ((!$page->has_cms_data() AND $config['render_mode'] == 'auto') OR $config['render_mode'] == 'views') + + if (( ! $page->has_cms_data() AND $config['render_mode'] == 'auto') OR $config['render_mode'] == 'views') { $this->_remap_variables($page); return; @@ -73,13 +75,11 @@ public function _remap($method) $config['render_mode'] = 'cms'; $page = $this->fuel->pages->create($config); } - + $this->_remap_cms($page); } - } - - + /* * ------------------------------------------------------ * Checks database for page variables (FUEL CMS) @@ -107,9 +107,8 @@ public function _remap_cms($page) } else { - if (!empty($page->layout)) + if ( ! empty($page->layout)) { - // get output $output = $page->cms_render(TRUE, FALSE); @@ -121,7 +120,6 @@ public function _remap_cms($page) { $this->cache->save($cache_id, $output, $cache_group, $this->fuel->config('page_cache_ttl')); } - } else { @@ -132,15 +130,14 @@ public function _remap_cms($page) // fuelify $output = $page->fuelify($output); - + // render output $this->output->set_output($output); - + // call the post render layout hook $page->layout->call_hook($page_data['layout'], 'post_render', $output); - } - + /* * ------------------------------------------------------ * If a controller method exists then call it. Otherwise, @@ -156,36 +153,34 @@ public function _remap_variables($page) // set up cache info $cache_group = $this->fuel->config('page_cache_group'); $cache_id = $this->fuel->cache->create_id(); - if ($this->fuel->config('use_page_cache') !== 'cms' AND $this->cache->get($cache_id, $cache_group, FALSE) AND !is_fuelified()) + + if ($this->fuel->config('use_page_cache') !== 'cms' AND $this->cache->get($cache_id, $cache_group, FALSE) AND ! is_fuelified()) { $output = $this->cache->get($cache_id, $cache_group); } else { - // get the output $output = $page->variables_render(TRUE, FALSE); - + // save to cache but you must not be logged in for it to save - if ($this->fuel->config('use_page_cache') !== FALSE AND $this->fuel->config('use_page_cache') !== 'cms' AND !is_fuelified()) + if ($this->fuel->config('use_page_cache') !== FALSE AND $this->fuel->config('use_page_cache') !== 'cms' AND ! is_fuelified()) { $this->fuel->cache->save($cache_id, $output, $cache_group, $this->fuel->config('page_cache_ttl')); } } - + // show 404 if output is explicitly set to FALSE if ($output === FALSE) { // do any redirects... will exit script if any redirect_404(); } - + // fuelify output $output = $page->fuelify($output); - + // render output $this->output->set_output($output); - } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/pages.php b/fuel/modules/fuel/controllers/pages.php index 4136f3f75..d56934aa4 100644 --- a/fuel/modules/fuel/controllers/pages.php +++ b/fuel/modules/fuel/controllers/pages.php @@ -2,40 +2,46 @@ require_once('module.php'); class Pages extends Module { - + private $_importing = FALSE; - + public function __construct() { - parent::__construct(); + parent::__construct(FALSE); + + // allow the select URL page to show up regardless of permissions + $validate = (fuel_uri_segment(2) == 'select') ? FALSE : TRUE; + if ($validate) + { + $this->_validate_user($this->permission); + } $this->load->module_model(FUEL_FOLDER, 'fuel_pagevariables_model'); } public function create($field = NULL, $redirect = TRUE) { - // check that the action even exists and if not, show a 404 - if (!$this->fuel->auth->module_has_action('save')) + if ( ! $this->fuel->auth->module_has_action('save')) { show_404(); } - + // check permissions - if (!$this->fuel->auth->has_permission($this->module_obj->permission, 'create')) + if ( ! $this->fuel->auth->has_permission($this->module_obj->permission, 'create')) { show_error(lang('error_no_permissions')); } - + if (isset($_POST['id'])) // check for dupes { $posted = $this->_process(); - + // set publish status to no if you do not have the ability to publish - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { $posted['published'] = 'no'; } - + // reset dup id if ($_POST['id'] == 'dup') { @@ -49,7 +55,7 @@ public function create($field = NULL, $redirect = TRUE) // run before_save hook $this->_run_hook('before_save', $posted); - + // grab the layout $layout = $this->fuel->layouts->get($this->input->post('layout', TRUE)); @@ -70,25 +76,25 @@ public function create($field = NULL, $redirect = TRUE) { show_error(lang('error_saving')); } - - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { unset($_POST['published']); } - + if ($this->_save_page_vars($id, $vars, $fields)) { $this->_process_uploads($vars); $data = $this->model->find_one_array(array($this->model->table_name().'.id' => $id)); - + // run after_create hook $this->_run_hook('after_create', $data); // run after_save hook $this->_run_hook('after_save', $data); - if (!empty($data)) + if ( ! empty($data)) { $msg = lang('module_created', $this->module_name, $data[$this->display_field]); $url = fuel_uri('pages/edit/'.$id); @@ -100,28 +106,30 @@ public function create($field = NULL, $redirect = TRUE) { $url .= '?lang='.$this->input->post('language'); } + redirect($url); } } } } - } + $vars = $this->_form(); $crumbs = array($this->module_uri => $this->module_name, '' => 'Create'); + $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('pages/page_create_edit', $vars); + $this->fuel->admin->render('pages/page_create_edit', $vars, '', FUEL_FOLDER); } public function edit($id = NULL, $field = NULL, $redirect = TRUE) { - if (!$this->fuel->auth->module_has_action('save')) + if ( ! $this->fuel->auth->module_has_action('save')) { show_404(); } // check permissions - if (!$this->fuel->auth->has_permission($this->module_obj->permission, 'edit') AND !$this->fuel->auth->has_permission($this->module_obj->permission, 'create')) + if ( ! $this->fuel->auth->has_permission($this->module_obj->permission, 'edit') AND !$this->fuel->auth->has_permission($this->module_obj->permission, 'create')) { show_error(lang('error_no_permissions')); } @@ -129,12 +137,12 @@ public function edit($id = NULL, $field = NULL, $redirect = TRUE) if ($this->input->post('id')) { $posted = $this->_process(); - - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { unset($_POST['published']); } - + // run before_edit hook $this->_run_hook('before_edit', $posted); @@ -157,21 +165,20 @@ public function edit($id = NULL, $field = NULL, $redirect = TRUE) if ($this->_save_page_vars($id, $vars, $fields)) { - $this->_process_uploads($vars); $data = $this->model->find_one_array(array($this->model->table_name().'.id' => $id)); - + // run after_edit hook $this->_run_hook('after_edit', $data); // run after_save hook $this->_run_hook('after_save', $data); - $msg = lang('module_edited', $this->module_name, $data[$this->display_field]); $this->fuel->logs->write($msg); $url = fuel_uri('pages/edit/'.$id); + if ($this->input->post('language')) { $url .= '?lang='.$this->input->post('language'); @@ -183,72 +190,72 @@ public function edit($id = NULL, $field = NULL, $redirect = TRUE) } $vars = $this->_form($id); - $this->fuel->admin->render('pages/page_create_edit', $vars); + + $this->fuel->admin->render('pages/page_create_edit', $vars, '', FUEL_FOLDER); } - + public function _form($id = NULL) { $this->load->library('form_builder'); $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - + $this->fuel->load_model('fuel_navigation'); - + $this->load->helper('file'); $this->js_controller_params['method'] = 'add_edit'; // get saved data $saved = array(); - if (!empty($id)) + + if ( ! empty($id)) { $saved = $this->model->find_one_array(array($this->model->table_name().'.id' => $id)); - if (empty($saved)) - { - show_404(); - } + + if (empty($saved)) show_404(); } if ($this->input->get('lang')) { $saved['language'] = $this->input->get('lang', TRUE); } + //$this->model->add_required('location'); - + // create fields... start with the table info and go from there $fields = $this->model->form_fields($saved); $common_fields = $this->_common_fields($saved); $fields = array_merge($fields, $common_fields); - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { unset($fields['published']); } - + // layout name tweaks if ($this->input->post('layout')) { $layout = $this->input->post('layout', TRUE); } - else if (!empty($saved['layout'])) + else if ( ! empty($saved['layout'])) { - $layout = $saved['layout']; + $layout = $saved['layout']; } else { $layout = $this->fuel->layouts->default_layout; } - + // num uri params $fields['cache']['class'] = 'advanced'; - - $field_values = (!empty($_POST)) ? $_POST : $saved; + $field_values = ( ! empty($_POST)) ? $_POST : $saved; $field_values['layout'] = $layout; // substitute data values into preview path $this->preview_path = $this->module_obj->url($field_values); - + $sort_arr = (empty($fields['navigation_label'])) ? array('location', 'layout', 'published', 'cache') : array('location', 'layout', 'navigation_label', 'published', 'cache'); - + // create page form fields $this->form_builder->set_validator($this->model->get_validation()); $this->form_builder->question_keys = array(); @@ -257,7 +264,7 @@ public function _form($id = NULL) $this->form_builder->set_field_order($sort_arr); $this->form_builder->display_errors = FALSE; $this->form_builder->show_required = FALSE; - + // set this one to FALSE because the layout selection will execute the js again $this->form_builder->auto_execute_js = FALSE; $this->form_builder->set_fields($fields); @@ -267,11 +274,8 @@ public function _form($id = NULL) // clear the values hear to prevent issues in subsequent calls $this->form_builder->clear(); - - $this->form_builder->submit_value = lang('btn_save'); $this->form_builder->cancel_value = lang('btn_cancel'); - /***************************************************************************** // check for twin view file, controller and extra routing to generate warnings @@ -280,7 +284,8 @@ public function _form($id = NULL) $import_view = FALSE; $routes = array(); $uses_controller = FALSE; - if (!empty($field_values['location'])) + + if ( ! empty($field_values['location'])) { $view_twin = APPPATH.'views/'.$field_values['location'].EXT; $import_view = FALSE; @@ -288,8 +293,11 @@ public function _form($id = NULL) if (file_exists($view_twin)) { $view_twin_info = get_file_info($view_twin); - if (!empty($saved)) { + + if ( ! empty($saved)) + { $tz = date('T'); + if ($view_twin_info['date'] > strtotime($saved['last_modified'].' '.$tz) OR $saved['last_modified'] == $saved['date_added']) { @@ -297,11 +305,12 @@ public function _form($id = NULL) } } } - + // check if there is routing for this page and display warning require(APPPATH.'config/routes.php'); - + $page_vars = array(); + foreach ($route as $key => $val) { // Convert wild-cards to RegEx @@ -316,17 +325,18 @@ public function _form($id = NULL) // check if a controller and method already exists $segments = explode('/', $field_values['location']); - + if (file_exists(APPPATH.'controllers/'.$segments[0].EXT)) { require_once(APPPATH.'controllers/'.$segments[0].EXT); + $controller = $segments[0]; $method = (!empty($segments[1])) ? $segments[1] : 'index'; $class_methods = get_class_methods($segments[0]); + if (in_array($method, $class_methods)) $uses_controller = TRUE; - } - + if (file_exists(APPPATH.'controllers/'.$segments[0])) { // Is the controller in a sub-folder? @@ -339,9 +349,11 @@ public function _form($id = NULL) if ( file_exists(APPPATH.'controllers/'.$segments[0].'/'.$segments[1].EXT)) { require_once(APPPATH.'controllers/'.$segments[0].'/'.$segments[1].EXT); + $controller = $segments[1]; $method = (!empty($segments[2])) ? $segments[2] : 'index'; $class_methods = get_class_methods($segments[1]); + if (in_array($method, $class_methods)) $uses_controller = TRUE; } } @@ -350,7 +362,9 @@ public function _form($id = NULL) if (file_exists(APPPATH.'controllers/'.$segments[0].$route['default_controller'].EXT)) { require_once(APPPATH.'controllers/'.$segments[0].$route['default_controller'].EXT); + $class_methods = get_class_methods($route['default_controller']); + if (in_array('index', $class_methods)) $uses_controller = TRUE; } } @@ -359,19 +373,24 @@ public function _form($id = NULL) } $page_vars = array(); - if (!empty($_POST)) + + if ( ! empty($_POST)) { $page_vars = array(); + foreach($_POST as $key => $val) { $key = end(explode('--', $key)); $page_vars[$key] = $val; } } - if (!empty($id)) + + if ( ! empty($id)) { $lang = $this->input->get('lang'); - if (!$lang) $lang = $this->fuel->language->default_option(); + + if ( ! $lang) $lang = $this->fuel->language->default_option(); + $page_vars = array_merge($this->fuel_pagevariables_model->find_all_by_page_id($id, $lang), $page_vars); // the following will pre-populate fields of a different language to the default values @@ -379,28 +398,25 @@ public function _form($id = NULL) { $page_vars = $this->fuel_pagevariables_model->find_all_by_page_id($id, $this->fuel->language->default_option()); } - } - // page variables $layout = $this->fuel->layouts->get($layout); - if (!empty($layout)) + if ( ! empty($layout)) { $layout->set_field_values($page_vars); $fields = $layout->fields(); $import_field = $layout->import_field(); } - if (!empty($import_field)) + if ( ! empty($import_field)) { $this->js_controller_params['import_field'] = $import_field; } // since the form builder is cleared above, we'll add in a script tag to make sure that the initialize code gets executed again $this->form_builder->add_js('<script></script>'); - $this->form_builder->id = 'layout_fields'; $this->form_builder->name_prefix = 'vars'; $this->form_builder->set_fields($fields); @@ -408,10 +424,11 @@ public function _form($id = NULL) $conflict = $this->_has_conflict($fields); - if (!empty($conflict)) + if ( ! empty($conflict)) { $vars['layout_fields'] = $conflict; } + // else if (empty($id)) // { // $vars['layout_fields'] = $this->form_builder->render(); @@ -425,37 +442,38 @@ public function _form($id = NULL) // other variables $vars['id'] = $id; $vars['data'] = $saved; + $vars['action'] = ( ! empty($saved['id'])) ? 'edit' : 'create'; - $vars['action'] = (!empty($saved['id'])) ? 'edit' : 'create'; $action_uri = $vars['action'].'/'.$id.'/'; + $vars['form_action'] = ($this->fuel->admin->is_inline()) ? $this->module_uri.'/inline_'.$action_uri : $this->module_uri.'/'.$action_uri; $vars['versions'] = $this->fuel_archives_model->options_list($id, $this->model->table_name()); - $vars['publish'] = (!empty($saved['published']) && is_true_val($saved['published'])) ? 'Unpublish' : 'Publish'; $vars['import_view'] = $import_view; $vars['view_twin'] = $view_twin; $vars['routes'] = $routes; $vars['uses_controller'] = $uses_controller; $vars['others'] = $this->model->get_others('location', $id); - if (!empty($saved['location'])) + + if ( ! empty($saved['location'])) { $related = $saved; $related['page_vars'] = $page_vars; $vars['related_items'] = $this->model->related_items($related); } - $actions = $this->load->view('_blocks/module_create_edit_actions', $vars, TRUE); + $actions = $this->load->module_view(FUEL_FOLDER, '_blocks/module_create_edit_actions', $vars, TRUE); $vars['actions'] = $actions; $vars['error'] = $this->model->get_errors(); - - if (!empty($saved['last_modified'])) + + if ( ! empty($saved['last_modified'])) { $vars['last_updated'] = lang('pages_last_updated_by', english_date($vars['data']['last_modified'], true), $vars['data']['email']); } - - $notifications = $this->load->view('_blocks/notifications', $vars, TRUE); + + $notifications = $this->load->module_view(FUEL_FOLDER, '_blocks/notifications', $vars, TRUE); $vars['notifications'] = $notifications; - + if ($vars['action'] == 'edit') { $crumbs = array($this->module_uri => $this->module_name, '' => character_limiter(strip_tags($vars['data'][$this->display_field]), 50)); @@ -464,13 +482,15 @@ public function _form($id = NULL) { $crumbs = array($this->module_uri => $this->module_name, '' => lang('action_create')); } + $this->fuel->admin->set_titlebar($crumbs); // do this after rendering so it doesn't render current page' - if (!empty($vars['data'][$this->display_field])) + if ( ! empty($vars['data'][$this->display_field])) { $this->fuel->admin->add_recent_page($this->uri->uri_string(), $vars['data'][$this->display_field], $this->module); } + return $vars; } @@ -493,13 +513,14 @@ public function _process_page_vars($id, $posted, $fields, $layout) $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); $this->form_builder->set_fields($fields); $this->form_builder->set_field_values($vars); + $vars = $this->form_builder->post_process_field_values($vars);// manipulates the $_POST values directly // run layout variable processing $vars = $layout->process_saved_values($vars); // validate before deleting - if (!$layout->validate($vars)) + if ( ! $layout->validate($vars)) { add_errors($layout->errors()); return FALSE; @@ -510,15 +531,14 @@ public function _process_page_vars($id, $posted, $fields, $layout) public function _block_processing($fields, $posted) { - // add in block fields foreach($fields as $key => $val) { // check blocks for post processing of variables if (isset($val['type']) AND $val['type'] == 'block' AND isset($posted[$key]['block_name'])) { - $block_layout = $this->fuel->layouts->get($posted[$key]['block_name'], 'block'); + if ($block_layout) { $block_fields = $block_layout->fields(); @@ -527,7 +547,7 @@ public function _block_processing($fields, $posted) } // check for template layouts that may have nested fields... this is really ugly - if (!empty($val['fields']) AND is_array($val['fields'])) + if ( ! empty($val['fields']) AND is_array($val['fields'])) { //$fields = array_merge($fields, $val['fields']); foreach($val['fields'] as $k => $v) @@ -545,6 +565,7 @@ public function _block_processing($fields, $posted) if (isset($d['block_name'])) { $block_layout = $this->fuel->layouts->get($d['block_name'], 'block'); + if ($block_layout) { $block_fields = $block_layout->fields(); @@ -555,6 +576,7 @@ public function _block_processing($fields, $posted) $block_fields[$e]['subkey'] = $k; $block_fields[$e]['key'] = $key; } + $fields = array_merge($fields, $block_fields); } } @@ -566,41 +588,43 @@ public function _block_processing($fields, $posted) } } } + return $fields; } public function _save_page_vars($id, $vars, $fields) { $save = array(); - + $lang = $this->input->post('language', TRUE); - + // clear out all other variables $delete = array('page_id' => $id); + if ($this->input->post('language')) { $delete['language'] = $this->input->post('language', TRUE); } - $this->fuel_pagevariables_model->delete($delete); $pagevariable_table = $this->db->table_info($this->fuel_pagevariables_model->table_name()); $var_types = $pagevariable_table['type']['options']; $page_variables_archive = array(); - + // field types that shouldn't be saved $non_recordable_fields = array('section', 'copy', 'fieldset'); - + foreach($fields as $key => $val) { - if (!isset($val['type'])) + if ( ! isset($val['type'])) { $val['type'] = 'string'; } - if (!in_array($val['type'], $non_recordable_fields)) + if ( ! in_array($val['type'], $non_recordable_fields)) { $value = (!empty($vars[$key])) ? $vars[$key] : NULL; + if (is_array($value) OR $val['type'] == 'array' OR $val['type'] == 'multi') { //$value = array_map('zap_gremlins', $value); @@ -608,19 +632,20 @@ public function _save_page_vars($id, $vars, $fields) $val['type'] = 'array'; // force the type to be an array } - if (!in_array($val['type'], $var_types)) $val['type'] = 'string'; - + if ( ! in_array($val['type'], $var_types)) $val['type'] = 'string'; + $save = array('page_id' => $id, 'name' => $key, 'value' => $value, 'type' => $val['type']); $where = array('page_id' => $id, 'name' => $key, 'language' => $lang); + if ($lang) { $save['language'] = $lang; $where['language'] = $lang; } + $where = (!empty($id)) ? $where : array(); - - if (!$this->fuel_pagevariables_model->save($save, $where)) + if ( ! $this->fuel_pagevariables_model->save($save, $where)) { add_error(lang('error_saving')); return FALSE; @@ -635,13 +660,14 @@ public function _save_page_vars($id, $vars, $fields) $lang_where['language !='] = $lang; $duped_lang_vars = $this->fuel_pagevariables_model->find_all_array($lang_where); - if (!empty($duped_lang_vars)) + if ( ! empty($duped_lang_vars)) { foreach($duped_lang_vars as $duped_var) { $duped_var['id'] = NULL; $duped_var['page_id'] = $id; - if (!$this->fuel_pagevariables_model->save($duped_var)) + + if ( ! $this->fuel_pagevariables_model->save($duped_var)) { add_error(lang('error_saving')); return FALSE; @@ -649,59 +675,64 @@ public function _save_page_vars($id, $vars, $fields) } } } - + $page_variables_archive = $this->fuel_pagevariables_model->find_all_array(array('page_id' => $id)); // archive $archive = $this->model->cleaned_data(); $archive[$this->model->key_field()] = $id; $archive['variables'] = $page_variables_archive; - + $this->model->archive($id, $archive); - + // save to navigation if config allows it - if ($this->input->post('navigation_label')) { - + if ($this->input->post('navigation_label')) + { $this->fuel->load_model('fuel_navigation'); - + $save = array(); $save['label'] = $this->input->post('navigation_label', TRUE); $save['location'] = $this->input->post('location', TRUE); $save['group_id'] = $this->fuel->config('auto_page_navigation_group_id'); $save['parent_id'] = 0; $save['published'] = $this->input->post('published', TRUE); - if (!$this->fuel->auth->has_permission($this->permission, 'publish')) + + if ( ! $this->fuel->auth->has_permission($this->permission, 'publish')) { $save['published'] = 'no'; } + // reset $where and create where clause to try and find an existing navigation item $where = array(); $where['location'] = $save['location']; $where['group_id'] = $save['group_id']; $where['parent_id'] = $save['parent_id']; + $does_it_exist_already = $this->fuel_navigation_model->record_exists($where); - if (!$does_it_exist_already) + + if ( ! $does_it_exist_already) { // determine parent based off of location $location_arr = explode('/', $this->input->post('location', TRUE)); $parent_location = implode('/', array_slice($location_arr, 0, (count($location_arr) -1))); - - if (!empty($parent_location)) $parent = $this->fuel_navigation_model->find_by_location($parent_location); - if (!empty($parent)) { - $save['parent_id'] = $parent['id']; - } + + if ( ! empty($parent_location)) $parent = $this->fuel_navigation_model->find_by_location($parent_location); + + if ( ! empty($parent)) $save['parent_id'] = $parent['id']; + $this->fuel_navigation_model->add_validation('parent_id', array(&$this->fuel_navigation_model, 'no_location_and_parent_match'), lang('error_location_parents_match'), '{location}'); $this->fuel_navigation_model->save($save, array('location' => $this->input->post('location', TRUE), 'group_id' => $save['group_id'])); } } $this->fuel->admin->set_notification(lang('data_saved'), Fuel_admin::NOTIFICATION_SUCCESS); - + // reset cache for that page only if ($this->input->post('location')) { $this->fuel->cache->clear_page($this->input->post('location', TRUE)); } + return TRUE; } @@ -709,13 +740,12 @@ public function layout_fields($layout_name, $id = NULL, $lang = NULL, $vars = ar { // check to make sure there is no conflict between page columns and layout vars $layout = $this->fuel->layouts->get($layout_name); - if (!$layout) - { - return; - } + + if ( ! $layout) return; $pagevars = array(); - if (!empty($id)) + + if ( ! empty($id)) { $pagevars = $this->fuel_pagevariables_model->find_all_by_page_id($id, $lang); @@ -728,21 +758,23 @@ public function layout_fields($layout_name, $id = NULL, $lang = NULL, $vars = ar $pagevars = array_merge($pagevars, $vars); $layout->set_field_values($pagevars); } - + $fields = $layout->fields(); $fields['__layout__'] = array('type' => 'hidden', 'value' => $layout_name); $fields['__page_id__'] = array('type' => 'hidden', 'value' => $id); $conflict = $this->_has_conflict($fields); - if (!empty($conflict)) + + if ( ! empty($conflict)) { $this->output->set_output($conflict); return; } + $this->load->library('form_builder'); + $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - $this->form_builder->question_keys = array(); $this->form_builder->submit_value = lang('btn_save'); $this->form_builder->cancel_value = lang('btn_cancel'); @@ -755,7 +787,7 @@ public function layout_fields($layout_name, $id = NULL, $lang = NULL, $vars = ar $form = $this->form_builder->render(); $this->output->set_output($form); } - + public function _has_conflict($fields) { $page_columns = $this->model->form_fields(); @@ -770,78 +802,85 @@ public function _has_conflict($fields) return '<div class="notification"><p class="notification warning ico_warn">'.lang('error_page_layout_variable_conflict', implode(', ', $reserved_cols)).'</p></div>'; } } + return FALSE; } public function import_view() { - if (!empty($_POST['id'])) + if ( ! empty($_POST['id'])) { $id = $this->input->post('id', TRUE); $pagevars = $this->fuel->pages->import($this->input->post('id', TRUE), $this->sanitize_input); $layout = $pagevars['layout']; + unset($pagevars['layout']); + $this->layout_fields($layout, $id, NULL, $pagevars); return; } + $out = 'error'; $this->output->set_output($out); } - + public function import_view_cancel() { - if ($this->input->post('id')){ - + if ($this->input->post('id')) + { // don't need to pass anything because it will automatically update last_modified' $save['id'] = $this->input->post('id', TRUE); $save['location'] = $this->input->post('location', TRUE); $save['last_modified'] = datetime_now(); $where['id'] = $save['id']; + if ($this->model->update($save, $where)) { $this->output->set_output('success'); return; } } + $this->output->set_output('error'); } - + public function ajax_page_edit() { if (is_ajax()) { - if (!empty($_POST)) + if ( ! empty($_POST)) { $save = $this->_process(); + if ($this->model->save($save)) { $this->output->set_output('success'); return; } - } } + $this->output->set_output('error'); } public function select() { - $value = $this->input->get_post('selected', TRUE); $filter = rawurldecode($this->input->get_post('filter', TRUE)); // Convert wild-cards to RegEx $filter = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $filter)); $this->js_controller_params['method'] = 'select'; - + $this->load->helper('array'); $this->load->helper('form'); $this->load->library('form_builder'); + $pages = $this->fuel->pages->options_list(); $pdfs = $this->fuel->assets->dir_files('pdf', TRUE); - if (!empty($pdfs) AND !empty($_GET['pdfs'])) + if ( ! empty($pdfs) AND !empty($_GET['pdfs'])) { $options[lang('page_select_pages')] = array_combine($pages, $pages); $options[lang('page_select_pdfs')] = array_combine($pdfs, $pdfs); @@ -852,14 +891,15 @@ public function select() } // apply filter - if (!empty($filter)) + if ( ! empty($filter)) { $filter_callback = create_function('$a', 'return preg_match(\'#^'.$filter.'$#\', $a);'); $options = array_filter($options, $filter_callback); } - + // just return the options as json $fields['General'] = array('type' => 'fieldset', 'class' => 'tab'); + if (isset($_GET['options'])) { if (isset($_GET['format']) AND strtolower($_GET['format']) == 'json') @@ -871,23 +911,26 @@ public function select() else { $str = ''; + if (isset($_GET['first_option'])) { $first_option = $this->input->get('first_option', TRUE); $str .= "<option value=\"\" label=\"".Form::prep($first_option, FALSE)."\">".Form::prep($first_option, FALSE)."</option>\n"; } + foreach($options as $key => $val) { $str .= "<option value=\"".Form::prep($key, FALSE)."\" label=\"".Form::prep($val, FALSE)."\">".Form::prep($val, FALSE)."</option>\n"; } + echo $str; return; - } } $select_label = lang('form_label_page'); $display_label_select = FALSE; + if (isset($_GET['input'])) { $fields['input'] = array('value' => $this->input->get_post('input', TRUE), 'label' => lang('form_label_url'), 'size' => 100); @@ -896,16 +939,17 @@ public function select() } $fields['url_select'] = array('value' => $this->input->get_post('url_select', TRUE), 'label' => $select_label, 'type' => 'select', 'options' => $options, 'first_option' => lang('label_select_one'), 'display_label' => $display_label_select); - $fields['Advanced'] = array('type' => 'fieldset', 'class' => 'tab'); + if (isset($_GET['target'])) { $target_options = array( - '' => '', + '' => '', '_blank' => '_blank', '_parent' => '_parent', '_top' => '_top', - ); + ); + $fields['target'] = array('value' => $this->input->get_post('target', TRUE), 'label' => lang('form_label_target'), 'type' => 'select', 'options' => array('' => '', '_blank' => '_blank')); $fields['url_select']['display_label'] = TRUE; } @@ -928,13 +972,15 @@ public function select() $this->form_builder->use_form_tag = FALSE; $this->form_builder->set_fields($fields); $this->form_builder->display_errors = FALSE; + $vars['form'] = $this->form_builder->render(); $this->fuel->admin->set_inline(TRUE); $crumbs = array('' => $this->module_name, lang('pages_select_action')); + $this->fuel->admin->set_panel_display('notification', FALSE); $this->fuel->admin->set_titlebar($crumbs); - $this->fuel->admin->render('modal_select', $vars); + $this->fuel->admin->render('modal_select', $vars, '', FUEL_FOLDER); } public function upload() @@ -943,9 +989,10 @@ public function upload() $this->load->helper('security'); $this->load->library('form_builder'); $this->load->library('upload'); + $this->js_controller_params['method'] = 'upload'; - if (!empty($_POST) AND !empty($_FILES)) + if ( ! empty($_POST) AND !empty($_FILES)) { $params['upload_path'] = sys_get_temp_dir(); $params['allowed_types'] = 'php|html|txt'; @@ -963,21 +1010,22 @@ public function upload() 'text/html', 'text/x-php', 'application/x-httpd-php-source', - 'text/plain'); + 'text/plain' + ); if ($this->upload->do_upload('file')) { $upload_data = $this->upload->data(); $error = FALSE; - + // read in the file so we can filter it $file = read_file($upload_data['full_path']); - + // sanitize the file before saving $id = $this->input->post('id', TRUE); $pagevars = $this->fuel->pages->import($id); - if (!empty($pagevars)) + if ( ! empty($pagevars)) { $layout = $this->fuel->layouts->get($pagevars['layout']); unset($pagevars['layout']); @@ -986,12 +1034,15 @@ public function upload() { $where['page_id'] = $id; $where['name'] = $key; + $page_var = $this->fuel_pagevariables_model->find_one_array($where); + $save['id'] = (empty($page_var['id'])) ? NULL : $page_var['id']; $save['name'] = $key; $save['page_id'] = $id; $save['value'] = $val; - if (!$this->fuel_pagevariables_model->save($save)) + + if ( ! $this->fuel_pagevariables_model->save($save)) { add_error(lang('error_upload')); } @@ -1002,14 +1053,13 @@ public function upload() $page['last_modified'] = date('Y-m-d H:i:s', (time() + 1)); // to prevent window from popping up after upload $this->model->save($page); - if (!has_errors()) + if ( ! has_errors()) { // change list view page state to show the selected group id $this->fuel->admin->set_notification(lang('pages_success_upload'), Fuel_admin::NOTIFICATION_SUCCESS); - + redirect(fuel_url('pages/edit/'.$id)); } - } else { @@ -1022,32 +1072,34 @@ public function upload() add_error($error_msg); } } - + $fields = array(); $pages = $this->model->options_list('id', 'location', array('published' => 'yes'), 'location'); - + $fields['id'] = array('label' => lang('form_label_name'), 'type' => 'select', 'options' => $pages, 'class' => 'add_edit pages'); $fields['file'] = array('type' => 'file', 'accept' => ''); + $this->form_builder->hidden = array(); $this->form_builder->set_fields($fields); $this->form_builder->set_field_values($_POST); $this->form_builder->submit_value = ''; $this->form_builder->use_form_tag = FALSE; + $vars['instructions'] = lang('pages_upload_instructions'); $vars['form'] = $this->form_builder->render(); $vars['back_action'] = ($this->fuel->admin->last_page() AND $this->fuel->admin->is_inline()) ? $this->fuel->admin->last_page() : fuel_uri($this->module_uri); //$vars['back_action'] = fuel_uri($this->module_uri); $crumbs = array($this->module_uri => $this->module_name, '' => lang('action_upload')); + $this->fuel->admin->set_titlebar($crumbs); - - $this->fuel->admin->render('upload', $vars); + $this->fuel->admin->render('upload', $vars, '', FUEL_FOLDER); } - + public function refresh_field() { - if (is_ajax() AND (!empty($_POST) OR !empty($_GET))) + if (is_ajax() AND ( ! empty($_POST) OR ! empty($_GET))) { $layout = $this->input->get_post('layout', TRUE); $values = $this->input->get_post('values', TRUE); @@ -1059,11 +1111,11 @@ public function refresh_field() $field_key = end(explode('vars--', $field)); - if (!isset($fields[$field_key])) return; + if ( ! isset($fields[$field_key])) return; $field_id = $this->input->post('field_id', TRUE); $selected = $this->input->post('selected', TRUE); - + $this->load->library('form_builder'); $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); @@ -1073,7 +1125,7 @@ public function refresh_field() $selected = (array) $selected; $selected = array_merge($values, $selected); } - + $output = ''; // if template/nested field types, then we need to look at the sub field @@ -1081,41 +1133,46 @@ public function refresh_field() { //$fields['return_fields'] = TRUE; require_once(FUEL_PATH.'libraries/Fuel_custom_fields.php'); + $fuel_cf = new Fuel_custom_fields(); $index = $this->input->get_post('index', TRUE); $key = $this->input->get_post('key', TRUE); $field_name = $this->input->get_post('field_name', TRUE); + $params = $fields[$field_key]; $params['index'] = $index; $params['name'] = $field_name; $params['key'] = $field_name; $params['value'] = array(); $params['value'][0] = $selected; + $this->form_builder->name_prefix = 'vars'; $this->form_builder->name_array = $field_name; //$fb->set_field_values(); $params['instance'] =& $this->form_builder; $sub_fields = $fuel_cf->template($params, TRUE); - if (!empty($sub_fields[0][$key])) + + if ( ! empty($sub_fields[0][$key])) { $output = $sub_fields[0][$key]; } - } else { - if (!empty($selected)) $fields[$field_key]['value'] = $selected; + if ( ! empty($selected)) $fields[$field_key]['value'] = $selected; + $fields[$field_key]['name'] = $field_id; - + // if the field is an ID, then we will do a select instead of a text field if (isset($fields[$this->model->key_field()])) { $fields['id']['type'] = 'select'; $fields['id']['options'] = $this->model->options_list(); } - $output = $this->form_builder->create_field($fields[$field_key]); + + $output = $this->form_builder->create_field($fields[$field_key]); } - + $this->output->set_output($output); } } @@ -1131,9 +1188,8 @@ protected function _process_upload_data($field_name, $uploaded_data, $posted) // get the file name field // if the file name field exists AND there is no specified hidden filename field to assign to it AND... // the model does not have an array key field AND there is a key field value posted - if (isset($field_name) AND !is_array($this->model->key_field()) AND isset($posted['page_id'])) + if (isset($field_name) AND ! is_array($this->model->key_field()) AND isset($posted['page_id'])) { - $id = $posted['page_id']; $where = array($this->fuel_pagevariables_model->table_name().'.page_id'=> $id, 'name' => $field_name); $data = $this->fuel_pagevariables_model->find_one_array($where); @@ -1161,12 +1217,10 @@ protected function _process_upload_data($field_name, $uploaded_data, $posted) if ($save) { - $data['value'] = $val['file_name']; $this->fuel_pagevariables_model->save($data); } } } } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/pagevariables.php b/fuel/modules/fuel/controllers/pagevariables.php index b7958b6d3..cf2018893 100644 --- a/fuel/modules/fuel/controllers/pagevariables.php +++ b/fuel/modules/fuel/controllers/pagevariables.php @@ -2,43 +2,41 @@ require_once('module.php'); class Pagevariables extends Module { - + public function __construct() { parent::__construct(); } - // Thanks floorish! // http://www.getfuelcms.com/forums/discussion/comment/1216/#Comment_1216 public function inline_edit($field = NULL, $page_id = NULL) { - // try to get the id, if $var is a name $this->load->module_model(FUEL_FOLDER, 'fuel_pagevariables_model'); - + // set $id to $var if we didn't find a site variable // test if it is a string value first... // numeric name values won't work! $id = NULL; - if (!is_numeric($field)) + + if ( ! is_numeric($field)) { $language = $this->input->get('lang', TRUE); $var = $this->fuel_pagevariables_model->find_one_array(array('name' => $field, 'page_id' => $page_id, 'language' => $language)); - if (isset($var['id'])) - { - $id = $var['id']; - } + + if (isset($var['id'])) $id = $var['id']; } else { $id = $field; } - + if (empty($id)) { $output = '<div id="fuel_main_content_inner"><p style="font-size: 12px; font-family: \'Lucida Grande\', \'Gill Sans\', Arial, Helvetica, Sans-serif; width: 400px; height: 50px;">'.lang('error_inline_page_edit').'</p></div>'; $this->output->set_output($output); + return; } @@ -47,7 +45,7 @@ public function inline_edit($field = NULL, $page_id = NULL) { $_POST['value'] = NULL; } + parent::inline_edit($id, 'value'); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/preview.php b/fuel/modules/fuel/controllers/preview.php index ab4592aa9..bcb629a28 100644 --- a/fuel/modules/fuel/controllers/preview.php +++ b/fuel/modules/fuel/controllers/preview.php @@ -1,25 +1,26 @@ <?php require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); + class Preview extends Fuel_base_controller { - + public function __construct() { parent::__construct(); } - + public function index() { $this->load->helper('string'); $this->load->helper('typography'); $this->load->helper('markdown'); $this->load->library('parser'); - + // don't want to fuelify' define('FUELIFY', FALSE); // check for posted data $data = $this->input->get_post('data', FALSE); - + //if (empty($data)) show_error(lang('error_cannot_preview')); // load global variables @@ -27,11 +28,9 @@ public function index() { include(APPPATH.'views/_variables/global'.EXT); } - - /* - get query string parameters of module and field name if they exist so we can set those as variables - in the view to be used if they want to customize based on those parameters - */ + + // get query string parameters of module and field name if they exist so we can set those as variables + // in the view to be used if they want to customize based on those parameters $vars['module'] = $this->input->get('module', TRUE); $vars['field'] = $this->input->get('field', TRUE); $vars['preview'] = $this->input->get('preview', TRUE); @@ -41,8 +40,9 @@ public function index() $vars['body'] = $this->parser->parse_string($data, $vars, TRUE); $this->asset->assets_path = $this->config->item('assets_path'); + $view = ''; - + if (file_exists(APPPATH.'views/_admin/'.$vars['preview'].EXT)) { $view = $this->load->view('_admin/'.$vars['preview'], $vars, TRUE); @@ -59,5 +59,4 @@ public function index() // render the preview $this->output->set_output($view); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/recent.php b/fuel/modules/fuel/controllers/recent.php index 612a0c362..ec435aa24 100644 --- a/fuel/modules/fuel/controllers/recent.php +++ b/fuel/modules/fuel/controllers/recent.php @@ -2,25 +2,26 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Recent extends Fuel_base_controller { - + public function __construct() { parent::__construct(); } - + public function index() { $session_key = $this->fuel->auth->get_session_namespace(); $user_data = $this->fuel->auth->user_data(); - if (!empty($user_data['last_page'])) + + if ( ! empty($user_data['last_page'])) { - $redirect_to = $user_data['last_page']; } else { $redirect_to = $this->config->item('fuel_path', 'fuel').'dashboard'; } + redirect($redirect_to); } } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/reset.php b/fuel/modules/fuel/controllers/reset.php index 4dac4f59f..29a22abfb 100644 --- a/fuel/modules/fuel/controllers/reset.php +++ b/fuel/modules/fuel/controllers/reset.php @@ -6,32 +6,33 @@ public function __construct() parent::__construct(); $this->config->load('fuel', true); } - + public function _remap($method) { - if (!$this->config->item('allow_forgotten_password', 'fuel')) show_404(); + if ( ! $this->config->item('allow_forgotten_password', 'fuel')) show_404(); + $this->load->library('session'); $this->load->helper('string'); - $this->load->module_model(FUEL_FOLDER, 'fuel_users_model'); $this->load->module_language(FUEL_FOLDER, 'fuel'); - + $email = fuel_uri_segment(2); $reset_key = fuel_uri_segment(3); $user = $this->fuel_users_model->find_one('MD5(email) = "'.$email.'" AND MD5(reset_key) = "'.$reset_key.'"'); + if (isset($user->id)) { $new_pwd = random_string('alnum', 8); - $user->password = $new_pwd; $user->reset_key = ''; + if ($user->save()) { $params['to'] = $user->email; $params['subject'] = lang('pwd_reset_subject_success'); $params['message'] = lang('pwd_reset_email_success', $new_pwd); $params['use_dev_mode'] = FALSE; - + if ($this->fuel->notification->send($params)) { $this->session->set_flashdata('success', lang('pwd_reset_success')); @@ -51,8 +52,7 @@ public function _remap($method) { $this->session->set_flashdata('error', lang('error_pwd_reset')); } + redirect(fuel_url('login')); - } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/settings.php b/fuel/modules/fuel/controllers/settings.php index 8af22db8f..ccfa426af 100644 --- a/fuel/modules/fuel/controllers/settings.php +++ b/fuel/modules/fuel/controllers/settings.php @@ -7,7 +7,7 @@ class Settings extends Fuel_base_controller { public function __construct() { parent::__construct(); - + $this->_validate_user('settings'); $crumbs = array(lang('section_settings')); @@ -17,9 +17,10 @@ public function __construct() public function index() { $this->_validate_user('settings'); - + $settings = array(); $modules = $this->fuel->modules->advanced(TRUE); + foreach ($modules as $key => $module) { if ($module->has_settings()) @@ -27,28 +28,27 @@ public function index() $settings[$module->name()] = $module; } } + $vars['settings'] = $settings; - - + $crumbs = array(lang('section_settings')); + $this->fuel->admin->set_titlebar($crumbs, 'ico_settings'); - - $this->fuel->admin->render('settings', $vars); + $this->fuel->admin->render('settings', $vars, '', FUEL_FOLDER); } public function manage($module = '') { - if (empty($module)) - { - redirect('fuel/settings'); - } - - if (!empty($module) AND $module != FUEL_FOLDER) + if (empty($module)) redirect('fuel/settings'); + + if ( ! empty($module) AND $module != FUEL_FOLDER) { $mod_install_config = $this->fuel->installer->config($module); + if (isset($mod_install_config['permissions'])) { $perm = $mod_install_config['permissions']; + if (is_array($perm)) { if (count($perm) > 1) @@ -76,40 +76,38 @@ public function manage($module = '') } $this->js_controller_params['method'] = 'add_edit'; - + $mod = $this->fuel->modules->get($module); $settings = $this->fuel->modules->get($module)->settings_fields(); - + if (empty($settings)) { show_error(lang('settings_problem', $module, $module, $module)); } - - + $this->load->library('form_builder'); $this->form_builder->load_custom_fields(APPPATH.'config/custom_fields.php'); - - if (!empty($_POST)) + if ( ! empty($_POST)) { $new_settings = $this->input->post('settings', TRUE); $fields = $settings; $this->form_builder->set_fields($fields); $new_settings = $this->form_builder->post_process_field_values($new_settings);// manipulates the $_POST values directly + if ($this->fuel->settings->process($module, $settings, $new_settings)) { $this->fuel->cache->clear_module($module); $this->session->set_flashdata('success', lang('data_saved')); + redirect($this->uri->uri_string()); } } - $field_values = $this->fuel->settings->get($module); - $this->form_builder->label_layout = 'left'; $this->form_builder->form->validator = $this->fuel->settings->get_validation(); $this->form_builder->use_form_tag = FALSE; @@ -124,9 +122,8 @@ public function manage($module = '') $vars['form'] = $this->form_builder->render(); $crumbs = array('settings' => lang('section_settings'), $mod->friendly_name()); + $this->fuel->admin->set_titlebar($crumbs, 'ico_settings'); - - $this->fuel->admin->render('manage/settings', $vars, Fuel_admin::DISPLAY_NO_ACTION); + $this->fuel->admin->render('manage/settings', $vars, Fuel_admin::DISPLAY_NO_ACTION, FUEL_FOLDER); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/site_docs.php b/fuel/modules/fuel/controllers/site_docs.php index caaeb5c3f..123ade9b9 100644 --- a/fuel/modules/fuel/controllers/site_docs.php +++ b/fuel/modules/fuel/controllers/site_docs.php @@ -2,27 +2,28 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Site_docs extends Fuel_base_controller { - + public function __construct() { parent::__construct(); $this->_validate_user('site_docs'); } - + public function _remap() { if ($this->fuel->modules->exists('user_guide') AND defined('USER_GUIDE_FOLDER')) { $this->load->helper(USER_GUIDE_FOLDER, 'user_guide'); } - + $this->load->helper('text'); $page = uri_path(TRUE, 1); if (empty($page)) $page = 'index'; + $this->fuel->pagevars->vars_path = APPPATH.'views/_variables/'; $this->fuel->pagevars->location = $page; - + $vars = $this->fuel->pagevars->view('site_docs'); $vars['body'] = 'index'; @@ -31,16 +32,17 @@ public function _remap() { // use app module which is the application directory $vars['body'] = $this->load->module_view('app', '_docs/'.$page, $vars, TRUE); - + $vars['page_title'] = $this->config->item('site_name', 'fuel'); + // get layout page if (file_exists(APPPATH.'views/_layouts/documentation.php')) { - $this->load->module_view(NULL, '_layouts/documentation', $vars); + define('FUELIFY', FALSE); + $this->load->module_view('app', '_layouts/documentation', $vars); } - else if (file_exists(FUEL_PATH.'views/_layouts/documentation'.EXT)) + else if (file_exists(FUEL_PATH.'views/_layouts/documentation'.EXT) AND defined('USER_GUIDE_PATH')) { - $vars['page_title'] = $this->config->item('site_name', 'fuel'); - $this->load->view('_layouts/documentation', $vars); + $this->load->module_view(FUEL_FOLDER, '_layouts/documentation', $vars); } else { @@ -51,7 +53,5 @@ public function _remap() { show_404(); } - - } } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/sitevariables.php b/fuel/modules/fuel/controllers/sitevariables.php index 3286b8404..f8d7185eb 100644 --- a/fuel/modules/fuel/controllers/sitevariables.php +++ b/fuel/modules/fuel/controllers/sitevariables.php @@ -2,18 +2,18 @@ require_once('module.php'); class Sitevariables extends Module { - + // Thanks floorish! // http://www.getfuelcms.com/forums/discussion/comment/1216/#Comment_1216 public function inline_edit($var = NULL, $field = NULL) { // try to get the id, if $var is a name $this->load->module_model(FUEL_FOLDER, 'fuel_sitevariables_model'); - + // set $id to $var if we didn't find a site variable // test if it is a string value first... // numeric name values won't work! - if (!empty($var) AND !is_numeric($var)) + if ( ! empty($var) AND !is_numeric($var)) { $site_var = $this->fuel_sitevariables_model->find_one_array(array('name' => $var)); $id = $site_var['id']; @@ -22,7 +22,7 @@ public function inline_edit($var = NULL, $field = NULL) { $id = $var; } + parent::inline_edit($id, 'value'); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/start.php b/fuel/modules/fuel/controllers/start.php index a19b5c7d0..3352a8850 100644 --- a/fuel/modules/fuel/controllers/start.php +++ b/fuel/modules/fuel/controllers/start.php @@ -1,12 +1,12 @@ <?php class Start extends CI_Controller { - + public function __construct() { parent::__construct(); } - + public function _remap($segment) { redirect($this->fuel->config('login_redirect')); diff --git a/fuel/modules/fuel/controllers/tools.php b/fuel/modules/fuel/controllers/tools.php index 02a210968..8a0ca864f 100644 --- a/fuel/modules/fuel/controllers/tools.php +++ b/fuel/modules/fuel/controllers/tools.php @@ -2,20 +2,19 @@ require_once(FUEL_PATH.'/libraries/Fuel_base_controller.php'); class Tools extends Fuel_base_controller { - + public function __construct() { parent::__construct(); } - + public function index() { $this->_validate_user('tools'); - + $vars['page_title'] = $this->fuel->admin->page_title(lang('section_tools'), FALSE); + $this->fuel->admin->set_titlebar(lang('module_tools'), 'ico_tools'); - - $this->fuel->admin->render('tools', $vars, Fuel_admin::DISPLAY_NO_ACTION); + $this->fuel->admin->render('tools', $vars, Fuel_admin::DISPLAY_NO_ACTION, FUEL_FOLDER); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/controllers/users.php b/fuel/modules/fuel/controllers/users.php index 732fcd24d..340178472 100644 --- a/fuel/modules/fuel/controllers/users.php +++ b/fuel/modules/fuel/controllers/users.php @@ -2,31 +2,33 @@ require_once('module.php'); class Users extends Module { - + var $module = ''; - + public function __construct() { parent::__construct(); } - + public function edit($id = NULL, $field = NULL, $redirect = TRUE) { $user = $this->model->find_by_key($id, 'array'); - if (!empty($user)) + + if ( ! empty($user)) { // security precaution to make sure that you can't edit a super admins profile unless you are one - if (!$this->fuel->auth->is_super_admin() AND is_true_val($user['super_admin'])) + if ( ! $this->fuel->auth->is_super_admin() AND is_true_val($user['super_admin'])) { show_404(); } } // security precaution to remove permissions from $_POST if you don't have permissions for err... assigning permissions - if (!empty($_POST['permissions']) AND !$this->fuel->auth->has_permission('permissions')) + if ( ! empty($_POST['permissions']) AND ! $this->fuel->auth->has_permission('permissions')) { unset($_POST['permissions']); } + parent::edit($id, NULL); } @@ -37,15 +39,21 @@ public function login_as($id, $original_user_hash = '') { $this->load->library('session'); $this->load->module_model('fuel', 'fuel_users_model'); + $change_logged_in_user = $this->fuel->auth->is_super_admin(); - if ($original_user_hash AND ($this->session->userdata('original_user_hash') == $original_user_hash)) { + + if ($original_user_hash AND ($this->session->userdata('original_user_hash') == $original_user_hash)) + { $change_logged_in_user = TRUE; } + if ($change_logged_in_user) { $curr_user = $this->fuel->auth->user_data(); $valid_user = $this->fuel_users_model->find_one_array(array('id' => $id)); + $this->fuel->auth->set_valid_user($valid_user); + if ($original_user_hash) { $this->session->unset_userdata('original_user_id'); @@ -57,6 +65,7 @@ public function login_as($id, $original_user_hash = '') $this->session->set_userdata('original_user_hash', random_string('sha1')); } } + redirect($this->fuel->config('login_redirect')); } @@ -71,7 +80,7 @@ protected function _process_create() $_POST['first_name'] = ''; $_POST['last_name'] = ''; } - + return parent::_process_create(); } @@ -84,18 +93,19 @@ public function _toggle_callback($cols, $heading) $col_txt = lang('click_to_toggle'); // boolean fields - if (!is_true_val($cols[$heading])) + if ( ! is_true_val($cols[$heading])) { $text_class = ($can_publish) ? "publish_text unpublished toggle_on" : "unpublished"; $action_class = ($can_publish) ? "publish_action unpublished hidden" : "unpublished hidden"; + return '<span class="publish_hover"><span class="'.$text_class.'" id="row_published_'.$cols[$this->model->key_field()].'" data-field="'.$heading.'">'.$no.'</span><span class="'.$action_class.'">'.$col_txt.'</span></span>'; } else { $text_class = ($can_publish) ? "publish_text published toggle_off" : "published"; $action_class = ($can_publish) ? "publish_action published hidden" : "published hidden"; + return '<span class="publish_hover"><span class="'.$text_class.'" id="row_published_'.$cols[$this->model->key_field()].'" data-field="'.$heading.'">'.$yes.'</span><span class="'.$action_class.'">'.$col_txt.'</span></span>'; - } } } \ No newline at end of file diff --git a/fuel/modules/fuel/core/MY_Model.php b/fuel/modules/fuel/core/MY_Model.php index db03fb5de..51c34e9ff 100755 --- a/fuel/modules/fuel/core/MY_Model.php +++ b/fuel/modules/fuel/core/MY_Model.php @@ -742,11 +742,23 @@ public function find_all($where = array(), $order_by = NULL, $limit = NULL, $off $this->_handle_where($where); - $params = array('order_by', 'limit', 'offset'); - foreach($params as $method) + // set order + if (!empty($order_by)) $this->db->order_by($order_by); + + // set limit + if (isset($limit)) { - if (!empty($$method)) $this->db->$method($$method); + $limit = (int) $limit; + $this->db->limit($limit); } + + // set offset + if (isset($offset)) + { + $offset = (int) $offset; + $this->db->offset($offset); + } + $query = $this->get(TRUE, $return_method, $assoc_key); if ($return_method == 'query') return $query; @@ -1677,11 +1689,11 @@ public function save_related($model, $key_field, $data) * @param string $mode, has_many or belongs_to (optional) * @return array */ - public function get_related_keys($values, $related_model, $mode = 'has_many', $rel_config = '') + public function get_related_keys($related_field, $values, $related_model, $mode = 'has_many', $rel_config = '') { $CI =& get_instance(); $use_rel_tbl = $this->is_using_relationship_table($rel_config); - $fields = $this->relationship_field_names($mode); + $fields = $this->relationship_field_names($mode, $related_field); if (is_array($related_model)) { @@ -2311,7 +2323,7 @@ protected function auto_validate_field($field, $value) break; case 'number': $this->validator->add_rule($field, 'is_numeric', lang('error_not_number', $field_name), $value); - if ($field_data['type'] != 'float') $this->validator->add_rule($field, 'length_max', lang('error_value_exceeds_length', $field_name), array($value, $field_data['max_length'])); + if ($field_data['type'] != 'float' AND $field_data['type'] != 'double') $this->validator->add_rule($field, 'length_max', lang('error_value_exceeds_length', $field_name), array($value, $field_data['max_length'])); break; case 'date': if (strncmp($value, '0000', 4) !== 0) @@ -2721,7 +2733,7 @@ public function form_fields($values = array(), $related = array()) if (!empty($val['where'])) { $where = $val['where']; - $where = $this->_replace_placeholders($where, $values); + $where = self::replace_placeholders($where, $values); unset($val['where']); } if (!empty($val['order'])) @@ -2777,7 +2789,7 @@ public function form_fields($values = array(), $related = array()) if (!empty($rel_config['where'])) { $where = $rel_config['where']; - $where = $this->_replace_placeholders($where, $values); + $where = self::replace_placeholders($where, $values); } if (!empty($rel_config['order'])) @@ -2786,7 +2798,7 @@ public function form_fields($values = array(), $related = array()) } } $related_options = $CI->$related_model->options_list(NULL, NULL, $where, $order); - $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($values, $related_model, 'has_many', $rel_config) : array(); + $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($related_field, $values, $related_model, 'has_many', $rel_config) : array(); $fields[$related_field] = array('label' => humanize($related_field), 'type' => 'multi', 'options' => $related_options, 'value' => $related_vals, 'mode' => 'multi', 'module' => $CI->$related_model->short_name(TRUE)); } } @@ -2802,7 +2814,7 @@ public function form_fields($values = array(), $related = array()) if (!empty($rel_config['where'])) { $where = $rel_config['where']; - $where = $this->_replace_placeholders($where, $values); + $where = self::replace_placeholders($where, $values); } if (!empty($rel_config['order'])) @@ -2810,10 +2822,9 @@ public function form_fields($values = array(), $related = array()) $order = $rel_config['order']; } } - $related_model = $this->load_related_model($rel_config); $related_options = $CI->$related_model->options_list(NULL, NULL, $where, $order); - $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($values, $related_model, 'belongs_to', $rel_config) : array(); + $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($related_field, $values, $related_model, 'belongs_to', $rel_config, $related_field) : array(); $fields[$related_field] = array('label' => lang('label_belongs_to').'<br />' . humanize($related_field), 'type' => 'multi', 'options' => $related_options, 'value' => $related_vals, 'mode' => 'multi', 'module' => $CI->$related_model->short_name(TRUE)); } } @@ -2826,7 +2837,7 @@ public function form_fields($values = array(), $related = array()) { $related_model = $this->load_related_model($rel_config); $related_options = $this->$related_model->options_list(); - $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($values, $related_model, 'has_many', $rel_config) : array(); + $related_vals = ( ! empty($values['id'])) ? $this->get_related_keys($related_field, $values, $related_model, 'has_many', $rel_config) : array(); $fields[$related_field] = array('label' => humanize($related_field), 'type' => 'select', 'options' => $related_options, 'value' => $related_vals, 'first_option' => lang('label_select_one')); } } @@ -3166,16 +3177,16 @@ public function process_relationships($id) // handle has_many relationships if ( ! empty($this->has_many)) { - $fields = $this->relationship_field_names('has_many'); - $relationships_model = $this->load_model($fields['relationships_model']); - - + $rel_fields = $this->relationship_field_names('has_many'); + // first delete in case there are multiple saves to the same relationship table foreach ($this->has_many as $related_field => $related_model) { $clear_on_save = ((strtoupper($this->clear_related_on_save) == 'AUTO' AND isset($this->normalized_save_data['exists_'.$related_field])) OR $this->clear_related_on_save === TRUE); if ($clear_on_save) { + $fields = $rel_fields[$related_field]; + // remove pre-existing relationships if (!empty($fields['candidate_table'])) { @@ -3185,6 +3196,7 @@ public function process_relationships($id) { $del_where = array($fields['candidate_key'] => $id); } + $relationships_model = $this->load_model($fields['relationships_model']); $CI->$relationships_model->delete($del_where); } } @@ -3194,7 +3206,10 @@ public function process_relationships($id) { if ( ! empty($this->normalized_save_data[$related_field])) { + + $fields = $rel_fields[$related_field]; $related_model = $this->load_related_model($related_model); + $relationships_model = $this->load_model($fields['relationships_model']); // create relationships foreach ($this->normalized_save_data[$related_field] as $foreign_id) @@ -3203,19 +3218,22 @@ public function process_relationships($id) } } } + } // handle belongs_to relationships if ( ! empty($this->belongs_to)) { - $fields = $this->relationship_field_names('belongs_to'); - $relationships_model = $this->load_model($fields['relationships_model']); $related_models = array(); + $rel_fields = $this->relationship_field_names('belongs_to'); // first delete in case there are multiple saves to the same relationship table foreach ($this->belongs_to as $related_field => $related_model) { + $fields = $rel_fields[$related_field]; + $relationships_model = $this->load_model($fields['relationships_model']); + // cache the loaded models here for reference below $related_models[$related_field] =& $this->load_related_model($related_model); @@ -3242,6 +3260,8 @@ public function process_relationships($id) { if ( ! empty($this->normalized_save_data[$related_field])) { + $fields = $rel_fields[$related_field]; + $related_model = $related_models[$related_field]; // create relationships @@ -3266,14 +3286,16 @@ public function process_relationships($id) public function process_relationships_delete($id) { $CI =& get_instance(); - + // clear out any relationships if ( ! empty($this->has_many)) { - $fields = $this->relationship_field_names('has_many'); + $rel_fields = $this->relationship_field_names('has_many'); foreach ($this->has_many as $related_field => $related_model) { + $fields = $rel_fields[$related_field]; + $relationships_model = $this->load_model($fields['relationships_model']); if (!empty($fields['candidate_table'])) { @@ -3288,9 +3310,13 @@ public function process_relationships_delete($id) } if ( ! empty($this->belongs_to)) { - $fields = $this->relationship_field_names('belongs_to'); + + $rel_fields = $this->relationship_field_names('belongs_to'); + foreach ($this->belongs_to as $related_field => $related_model) { + $fields = $rel_fields[$related_field]; + $related_model = $this->load_related_model($related_model); $relationships_model = $this->load_model($fields['relationships_model']); if (!empty($fields['foreign_table']) AND !empty($fields['foreign_table'])) @@ -3615,7 +3641,7 @@ public function load_related_model($related_model) * @param string relationship type * @return array */ - public function relationship_field_names($relationship_type) + public function relationship_field_names($relationship_type, $field = NULL) { $valid_rel_types = array('has_many', 'belongs_to'); if ( ! in_array($relationship_type, $valid_rel_types)) @@ -3627,30 +3653,37 @@ public function relationship_field_names($relationship_type) { return FALSE; } - + + $return = array(); + $fields = array( - 'candidate_table' => 'candidate_table', - 'foreign_table' => 'foreign_table', - 'foreign_key' => 'foreign_key', - 'candidate_key' => 'candidate_key', - 'relationships_model'=> array(FUEL_FOLDER => 'fuel_relationships_model'), - ); + 'candidate_table' => 'candidate_table', + 'foreign_table' => 'foreign_table', + 'foreign_key' => 'foreign_key', + 'candidate_key' => 'candidate_key', + 'relationships_model'=> array(FUEL_FOLDER => 'fuel_relationships_model'), + ); foreach($this->$relationship_type as $key => $rel_config) { + $return[$key] = $fields; if (is_array($rel_config)) { - // loop - foreach($fields as $k => $v) + foreach($return[$key] as $k => $v) { if (isset($rel_config[$k])) { - $fields[$k] = $rel_config[$k]; + $return[$key][$k] = $rel_config[$k]; } } } } - return $fields; + + if (!empty($field)) + { + return $return[$field]; + } + return $return; } // -------------------------------------------------------------------- @@ -4125,8 +4158,10 @@ protected function _is_nested_array($record) * @param mixed * @return boolean */ - protected function _replace_placeholders($str, $values) + public static function replace_placeholders($str, $values) { + $return = $str; + if (is_string($str)) { if (strpos($str, '{') !== FALSE) @@ -4144,8 +4179,35 @@ protected function _replace_placeholders($str, $values) $str = ''; } } + $return = $str; } - return $str; + elseif (is_array($str)) + { + $return = array(); + foreach($str as $key => $val) + { + if (strpos($val, '{') !== FALSE) + { + if (!empty($values)) + { + foreach($values as $k => $v) + { + $return[$key] = str_replace('{'.$k.'}', $v, $val); + } + } + else + { + // returns nothing to prevent SQL errors + $return = array(); + } + } + else + { + $return[$key] = $val; + } + } + } + return $return; } // -------------------------------------------------------------------- @@ -4608,7 +4670,7 @@ public function values($include_derived = FALSE) $reflection = new ReflectionClass(get_class($this)); foreach($methods as $method) { - if (strncmp($method, 'get_', 4) === 0 AND $reflection->getMethod($method)->getNumberOfParameters() == 0) + if (strncmp($method, 'get_', 4) === 0 AND $reflection->getMethod($method)->getNumberOfRequiredParameters() == 0) { $key = substr($method, 4); // remove get_ $values[$key] = $this->$method(); @@ -4641,7 +4703,7 @@ public function duplicate() // call on duplicate method $values = $this->_parent_model->on_duplicate($values); - $dup->fill($$values); + $dup->fill($values); // NULL out key values so as not to overwrite existing objects $key_field = (array) $this->_parent_model->key_field(); @@ -5322,7 +5384,7 @@ public function __set($var, $val) $set_method = "set_".$var; $this->$set_method($val); } - // set in foreign keys only if it is an object + // set any foreign keys only if it is an object else if (is_object($val) AND ($val instanceof Data_record) AND in_array($var.'_id', array_keys($foreign_keys))) { $this->_fields[$var] = $val; @@ -5465,7 +5527,7 @@ protected function _get_relationship($var, $return_object = FALSE, $relationship } $rel = $this->_parent_model->$relationship_type; - $fields = $this->_parent_model->relationship_field_names($relationship_type); + $fields = $this->_parent_model->relationship_field_names($relationship_type, $var); $id_field = ''; $rel_config = $rel[$var]; $use_rel_tbl = $this->_parent_model->is_using_relationship_table($rel_config); @@ -5523,7 +5585,7 @@ protected function _get_relationship($var, $return_object = FALSE, $relationship { if (! empty($rel_config['where'])) { - $this->_CI->$foreign_model->db()->where($rel_config['where']); + $this->_CI->$foreign_model->db()->where(MY_Model::replace_placeholders($rel_config['where'], $this->values())); } if (! empty($rel_config['order'])) @@ -5553,7 +5615,7 @@ protected function _get_relationship($var, $return_object = FALSE, $relationship { // maintain the order of the related data - if (!empty($rel_ids)) + if (!empty($rel_ids) AND empty($rel_config['order'])) { $rel_ids_flipped = array_flip($rel_ids); foreach ($foreign_data as $row) diff --git a/fuel/modules/fuel/helpers/MY_array_helper.php b/fuel/modules/fuel/helpers/MY_array_helper.php index a8eeb9331..e17e1d4b2 100644 --- a/fuel/modules/fuel/helpers/MY_array_helper.php +++ b/fuel/modules/fuel/helpers/MY_array_helper.php @@ -191,5 +191,83 @@ function array_group($array, $groups) return array_chunk($array, $items_in_each_group); } +/** + * Converts a .csv file to an associative array. Must have header row. + * + * @access public + * @param string file name + * @param string the delimiter that separates each column + * @param int the index for where the header row starts + * @param int must be greater then the maximum line length. Setting to 0 is slightly slower, but works for any length + * @return array + */ +function csv_to_array($filename = '', $delimiter = ',', $header_row = 0, $length = 0) +{ + if(!file_exists($filename) || !is_readable($filename)) + { + return FALSE; + } + + $header = NULL; + $data = array(); + if (($handle = fopen($filename, 'r')) !== FALSE) + { + $i = -1; + while (($row = fgetcsv($handle, $length, $delimiter)) !== FALSE) + { + $i++; + if ($i >= $header_row) { + if(!$header) + { + $header = $row; + } + else + { + $data[] = array_combine($header, $row); + } + } + } + fclose($handle); + } + return $data; +} + +// -------------------------------------------------------------------- + +/** + * Return the value from an associative array or an object. + * credit: borrowed from Vanilla forums GetValueR function + * + * @access public + * @param string $key The key or property name of the value. + * @param mixed $array The array or object to search. + * @param mixed $default The value to return if the key does not exist. + * @return mixed The value from the array or object. + */ +function array_dot($key, $array, $default = FALSE) +{ + $path = explode('.', $key); + + $value = $array; + for ($i = 0; $i < count($path); ++$i) + { + $sub_key = $path[$i]; + + if (is_array($value) AND isset($value[$sub_key])) + { + $value = $value[$sub_key]; + } + elseif (is_object($value) AND isset($value->$sub_key)) + { + $value = $value->$sub_key; + } + else + { + return $default; + } + } + return $value; +} + /* End of file MY_array_helper.php */ /* Location: ./modules/fuel/helpers/MY_array_helper.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/helpers/MY_date_helper.php b/fuel/modules/fuel/helpers/MY_date_helper.php index cf93ae2e9..f04155f53 100644 --- a/fuel/modules/fuel/helpers/MY_date_helper.php +++ b/fuel/modules/fuel/helpers/MY_date_helper.php @@ -92,7 +92,7 @@ function datetime_now($hms = TRUE){ function is_date_format($date) { return (is_string($date) AND (!empty($date) AND (int)$date != 0) AND - (is_date_english_format($date) OR is_date_db_format($date))); + (preg_match('#([0-9]{1,2})[/\-\.]([0-9]{1,2})[/\-\.]([0-9]{4})#', $date) OR is_date_db_format($date))); } // -------------------------------------------------------------------- @@ -248,7 +248,7 @@ function english_date_to_db_format($date, $hour = 0, $min = 0, $sec = 0, $ampm = { $hour = 0; } - $date_arr = preg_split('#-|/#', $date); + $date_arr = preg_split('#-|/|\.#', $date); if (count($date_arr) != 3) return 'invalid'; @@ -268,7 +268,7 @@ function english_date_to_db_format($date, $hour = 0, $min = 0, $sec = 0, $ampm = } $new_date = $date_arr[2].'-'.$date_arr[0].'-'.$date_arr[1].' '.$hour.':'.$min.':'.$sec; } - else if (preg_match("#([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})#", $date)) + else if (preg_match("#([0-9]{1,2})[\-\.]([0-9]{1,2})[\-\.]([0-9]{4})#", $date)) { if (!checkdate($date_arr[1], $date_arr[0], $date_arr[2])) { @@ -735,4 +735,4 @@ function is_midnight($date) /* End of file MY_date_helper.php */ -/* Location: ./modules/fuel/helpers/MY_date_helper.php */ \ No newline at end of file +/* Location: ./modules/fuel/helpers/MY_date_helper.php */ diff --git a/fuel/modules/fuel/helpers/MY_string_helper.php b/fuel/modules/fuel/helpers/MY_string_helper.php index f7aea19b4..e7f98749a 100644 --- a/fuel/modules/fuel/helpers/MY_string_helper.php +++ b/fuel/modules/fuel/helpers/MY_string_helper.php @@ -77,6 +77,11 @@ function eval_string($str, $vars = array()) // function pluralize($num, $str = '', $plural = 's') { + if (is_array($num)) + { + $num = count($num); + } + if ($num != 1) { $str .= $plural; @@ -261,10 +266,27 @@ function php_to_template_syntax($str) $str = preg_replace_callback('#'.$l_delim.'(.+)(!)\s*?empty\((.+)\)#U', $callback, $str); // remove paranthesis from within if conditional - $callback2 = create_function('$matches', 'return str_replace(array("(", ")"), array(" ", ""), $matches[0]);'); + //$callback2 = create_function('$matches', 'return str_replace(array("(", ")"), array(" ", ""), $matches[0]);'); + $callback2 = create_function('$matches', ' + $CI =& get_instance(); + $allowed_funcs = $CI->parser->allowed_functions(); + $str = $matches[0]; + $ldlim = "___<"; + $rdlim = ">___"; + + // loop through all allowed function and escape any paranthis + foreach($allowed_funcs as $func) + { + $regex = "#(.*)".preg_quote($func)."\((.*)\)(.*)#U"; + $str = preg_replace($regex, "$1".$func.$ldlim."$2".$rdlim."$3", $str); + } + + // now replace any other paranthesis + $str = str_replace(array("(", ")"), array(" ", ""), $str); + $str = str_replace(array($ldlim, $rdlim), array("(", ")"), $str); + return $str;'); $str = preg_replace_callback('#'.$l_delim.'if.+'.$r_delim.'#U', $callback2, $str); - // fix arrays $callback = create_function('$matches', ' if (strstr($matches[0], "=>")) diff --git a/fuel/modules/fuel/helpers/fuel_helper.php b/fuel/modules/fuel/helpers/fuel_helper.php index 17287c187..8b3b71b0a 100755 --- a/fuel/modules/fuel/helpers/fuel_helper.php +++ b/fuel/modules/fuel/helpers/fuel_helper.php @@ -551,7 +551,7 @@ function fuel_url($uri = '', $query_string = FALSE) { $CI =& get_instance(); $uri = fuel_uri($uri, $query_string); - return site_url($uri); + return site_url($uri, NULL, FALSE); } // -------------------------------------------------------------------- diff --git a/fuel/modules/fuel/helpers/google_helper.php b/fuel/modules/fuel/helpers/google_helper.php index fb9865b5e..29d1def64 100644 --- a/fuel/modules/fuel/helpers/google_helper.php +++ b/fuel/modules/fuel/helpers/google_helper.php @@ -360,7 +360,7 @@ function google_geolocate($data, $return = 'all') $address = urlencode($address); unset($data); - $url = "https://maps.googleapis.com/maps/api/geocode/json?address=".$address."&sensor=false"; + $url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$address."&sensor=false"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); diff --git a/fuel/modules/fuel/helpers/validator_helper.php b/fuel/modules/fuel/helpers/validator_helper.php index 496b1c609..083a59dbd 100644 --- a/fuel/modules/fuel/helpers/validator_helper.php +++ b/fuel/modules/fuel/helpers/validator_helper.php @@ -53,7 +53,7 @@ function required($var) return !empty($var); } // automatically set integer values to TRUE - else if (is_int($var)) + else if (is_numeric($var)) { return TRUE; } @@ -115,7 +115,8 @@ function has_one_of_these($args = null) { function valid_email($email) { - return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $email)) ? FALSE : TRUE; + //return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,10}$/ix", $email)) ? FALSE : TRUE; + return filter_var($email, FILTER_VALIDATE_EMAIL); } } // -------------------------------------------------------------------- diff --git a/fuel/modules/fuel/language/english/fuel_js_lang.php b/fuel/modules/fuel/language/english/fuel_js_lang.php index 0d995b71d..fe126a3df 100644 --- a/fuel/modules/fuel/language/english/fuel_js_lang.php +++ b/fuel/modules/fuel/language/english/fuel_js_lang.php @@ -88,5 +88,12 @@ $lang['btn_add_another'] = 'Add Another'; $lang['btn_remove'] = 'Remove'; +/* +|-------------------------------------------------------------------------- +| Assets +|-------------------------------------------------------------------------- +*/ +$lang['assets_need_to_save'] = 'Click "Save" to use this image.'; + /* End of file fuel_js_lang.php */ /* Location: ./modules/fuel/language/english/fuel_js_lang.php */ \ No newline at end of file diff --git a/fuel/modules/fuel/libraries/Form_builder.php b/fuel/modules/fuel/libraries/Form_builder.php index da93f90da..9b7849e60 100644 --- a/fuel/modules/fuel/libraries/Form_builder.php +++ b/fuel/modules/fuel/libraries/Form_builder.php @@ -1962,6 +1962,7 @@ public function create_enum($params) $default = (isset($params['value'])) ? $params['value'] : FALSE; foreach($params['options'] as $key => $val) { + $attrs['data']['orig_checked'] = '0'; $str .= '<'.$params['wrapper_tag'].' class="'.$params['wrapper_class'].'">'; $attrs = array( 'class' => $params['class'], @@ -1977,6 +1978,7 @@ public function create_enum($params) if (($i == 0 AND !$default) OR ($default == $key)) { $attrs['checked'] = 'checked'; + $attrs['data']['orig_checked'] = '1'; } } $str .= $this->form->radio($params['name'], $key, $attrs); @@ -2196,7 +2198,8 @@ public function create_date($params) 'min_date' => date($params['date_format'], strtotime('01/01/2000')), 'max_date' => date($params['date_format'], strtotime('12/31/2030')), 'first_day' => 0, - 'show_on' => 'button' + 'show_on' => 'button', + 'button_image' => NULL, ); $params = $this->normalize_params($params, $defaults); @@ -2205,7 +2208,7 @@ public function create_date($params) // check date to format it if ((!empty($params['value']) AND (int) $params['value'] != 0) && (preg_match("#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#", $params['value'], $regs1) - || preg_match("#([0-9]{1,2})[/\-]([0-9]{1,2})[/\-]([0-9]{4})#", $params['value'], $regs2))) + || preg_match("#([0-9]{1,2})[/\-\.]([0-9]{1,2})[/\-\.]([0-9]{4})#", $params['value'], $regs2))) { $params['value'] = date($params['date_format'], strtotime($params['value'])); } else { @@ -2215,7 +2218,7 @@ public function create_date($params) $params['size'] = 12; // extra room for cramped styling // create the right format for placeholder display based on the date format - $date_arr = preg_split('#-|/#', $params['date_format']); + $date_arr = preg_split('#-|/|\.#', $params['date_format']); $format = ''; // order counts here! @@ -2240,6 +2243,10 @@ public function create_date($params) $params['data']['max_date'] = $params['max_date']; $params['data']['first_day'] = $params['first_day']; $params['data']['show_on'] = $params['show_on']; + if (!empty($params['button_image'])) + { + $params['data']['button_image'] = $params['button_image']; + } $params['placeholder'] = $format; $params['type'] = 'text'; return $this->create_text($params); @@ -3522,7 +3529,7 @@ public function get_js($js = NULL) * * @access public * @param string A CSS file name - * @param mixed A key value to associate with the CSS file (so it only gets loaded once). Or an associative array of keyed javascript file names + * @param mixed A key value to associate with the CSS file (so it only gets loaded once). Or an associative array of keyed CSS file names * @return void */ public function add_css($css = NULL, $key = NULL) @@ -3544,17 +3551,9 @@ public function add_css($css = NULL, $key = NULL) } else { - if (empty($key)) + if (empty($key) AND !in_array($css, $this->css)) { - if (is_array($css)) - { - $this->css = array_merge($this->css, $css); - } - else if (!in_array($css, $this->css)) - { - $this->css[] = $css; - } - + $this->css[] = $css; } else if (!in_array($css, $this->css)) { @@ -3781,7 +3780,6 @@ protected function _render_js() if ($this->no_css_js) return ''; $_js = $this->get_js(); - if (empty($_js)) return ''; $str = ''; $str_inline = ''; @@ -3795,45 +3793,49 @@ protected function _render_js() $orig_asset_output = $this->CI->asset->assets_output; $this->CI->asset->assets_output = FALSE; - // loop through to generate javascript - foreach($_js as $type => $js) + if (!empty($_js)) { - - // if $js is a PHP array and the js asset function exists, then we'll use that to render' - if (is_array($js)) + + // loop through to generate javascript + foreach($_js as $type => $js) { - $j = current($js); - - // TODO if the value is another array, then the key is the name of the function and the value is the name of a file to load - if (is_array($j)) + + // if $js is a PHP array and the js asset function exists, then we'll use that to render' + if (is_array($js)) { + $j = current($js); + // TODO if the value is another array, then the key is the name of the function and the value is the name of a file to load + if (is_array($j)) + { + + } + $str_files .= js($js); + } + // if a string with a slash in it, then we will assume it's just a single file to load' + else if (strpos($js, '/') !== FALSE AND strpos($js, '<script') === FALSE) + { + $str_files .= js($js); + } + // if it starts with a script tag and does NOT have a src attribute + else if (preg_match($script_regex, $js)) + { + $str_files .= $js; + } + + // if it starts with a script tag and DOES have a src attribute + else if (strpos($js, '<script') !== FALSE) + { + $str_inline .= $js; + } + + // else it will simply call a function if it exists + else + { + $str .= "if (".$js." != undefined){\n"; + $str .= "\t".$js."();\n"; + $str .= "}\n"; } - $str_files .= js($js); - } - // if a string with a slash in it, then we will assume it's just a single file to load' - else if (strpos($js, '/') !== FALSE AND strpos($js, '<script') === FALSE) - { - $str_files .= js($js); - } - // if it starts with a script tag and does NOT have a src attribute - else if (preg_match($script_regex, $js)) - { - $str_files .= $js; - } - - // if it starts with a script tag and DOES have a src attribute - else if (strpos($js, '<script') !== FALSE) - { - $str_inline .= $js; - } - - // else it will simply call a function if it exists - else - { - $str .= "if (".$js." != undefined){\n"; - $str .= "\t".$js."();\n"; - $str .= "}\n"; } } @@ -3854,31 +3856,36 @@ protected function _render_js() } } - - // change ignore value on asset back to original - $this->CI->asset->ignore_if_loaded = $orig_ignore; - $this->CI->asset->assets_output = $orig_asset_output; - - // sort the javascript - $js_exec = $this->_fields_sorter($js_exec, 'order'); - - $out = $str_files; - $out .= $str_inline; - $out .= "<script type=\"text/javascript\">\n"; - $out .= "//<![CDATA[\n"; - $out .= ""; - $out .= $str."\n"; - $out .= 'if (jQuery){ jQuery(function(){'; - $out .= 'if (jQuery.fn.formBuilder) {'; - $out .= 'if (typeof(window[\'formBuilderFuncs\']) == "undefined") { window[\'formBuilderFuncs\'] = {}; };'; - $out .= 'window[\'formBuilderFuncs\'] = jQuery.extend(window[\'formBuilderFuncs\'], '.json_encode($js_exec).');'; - $out .= 'jQuery("#'.$this->id.'").formBuilder(window[\'formBuilderFuncs\']);'; - if ($this->auto_execute_js) $out .= 'jQuery("#'.$this->id.'").formBuilder().initialize();'; - $out .= '}'; - $out .= '})}'; - $out .= "\n//]]>\n"; - $out .= "</script>\n"; - return $out; + if (!empty($js_exec) OR !empty($str_files) OR !empty($str_inline) OR !empty($str)) + { + // change ignore value on asset back to original + $this->CI->asset->ignore_if_loaded = $orig_ignore; + $this->CI->asset->assets_output = $orig_asset_output; + + // sort the javascript + $js_exec = $this->_fields_sorter($js_exec, 'order'); + + $out = $str_files; + $out .= $str_inline; + $out .= "<script type=\"text/javascript\">\n"; + $out .= ""; + $out .= $str."\n"; + + if (!empty($js_exec)) + { + $out .= 'if (jQuery){ jQuery(function(){'; + $out .= 'if (jQuery.fn.formBuilder) {'; + $out .= 'if (typeof(window[\'formBuilderFuncs\']) == "undefined") { window[\'formBuilderFuncs\'] = {}; };'; + $out .= 'window[\'formBuilderFuncs\'] = jQuery.extend(window[\'formBuilderFuncs\'], '.json_encode($js_exec).');'; + $out .= 'jQuery("#'.$this->id.'").formBuilder(window[\'formBuilderFuncs\']);'; + if ($this->auto_execute_js) $out .= 'jQuery("#'.$this->id.'").formBuilder().initialize();'; + $out .= '}'; + $out .= '})}'; + } + + $out .= "</script>\n"; + return $out; + } } // -------------------------------------------------------------------- @@ -3919,7 +3926,6 @@ protected function _apply_css() foreach($css as $k => $c) { $module = (is_string($k)) ? $k : NULL; - if (is_array($c)) { foreach($c as $file) diff --git a/fuel/modules/fuel/libraries/Fuel_advanced_module.php b/fuel/modules/fuel/libraries/Fuel_advanced_module.php index f501906c6..437a4e8c2 100644 --- a/fuel/modules/fuel/libraries/Fuel_advanced_module.php +++ b/fuel/modules/fuel/libraries/Fuel_advanced_module.php @@ -1082,7 +1082,7 @@ public function load_config($config = NULL) $this->CI->load->module_config('app', $config, FALSE, TRUE); $app_config = $this->CI->config->item($this->name); - // now get the blog configuration + // now get the module's configuration $this->CI->load->module_config($this->folder(), $config, FALSE, TRUE); $module_config = $this->CI->config->item($this->name); diff --git a/fuel/modules/fuel/libraries/Fuel_assets.php b/fuel/modules/fuel/libraries/Fuel_assets.php index 853c12068..7cf1613b6 100644 --- a/fuel/modules/fuel/libraries/Fuel_assets.php +++ b/fuel/modules/fuel/libraries/Fuel_assets.php @@ -275,7 +275,15 @@ public function upload($params = array()) $params['file_name'] = url_title($file_name, 'underscore', FALSE); } } - + + // replace {file} with placeholder of file name + if (strpos($params['file_name'], '{') !== FALSE ) + { + $params['file_name'] = preg_replace('#(.*)\{file\}(.*)#U', '$1'.pathinfo($file['name'], PATHINFO_FILENAME).'$2', $params['file_name']); + } + + + // set overwrite $params['overwrite'] = (is_true_val($params['overwrite'])); diff --git a/fuel/modules/fuel/libraries/Fuel_auth.php b/fuel/modules/fuel/libraries/Fuel_auth.php index 7b556ca39..093098339 100644 --- a/fuel/modules/fuel/libraries/Fuel_auth.php +++ b/fuel/modules/fuel/libraries/Fuel_auth.php @@ -118,6 +118,7 @@ public function set_valid_user($valid_user) $session_data['super_admin'] = $valid_user['super_admin']; $session_data['user_name'] = $valid_user['user_name']; $session_data['language'] = $valid_user['language']; + $session_data['email'] = $valid_user['email']; $this->CI->session->set_userdata($this->get_session_namespace(), $session_data); } @@ -338,9 +339,16 @@ public function has_permission($permission, $type = '') if (is_array($permission)) { $foreign_module = NULL; - if ((isset($permission[0]) AND $permission[0] != $this->CI->module) AND in_array($permission[0], array_keys($this->CI->fuel->modules->get()))) { - $foreign_module = $permission[0]; + + if (isset($permission[0]) AND in_array($permission[0], array_keys($this->CI->fuel->modules->get()))) + { + // broken out to simplify + if (!isset($this->CI->module) OR (isset($this->CI->module) AND $permission[0] != $this->CI->module)) + { + $foreign_module = $permission[0]; + } } + foreach($permission as $key => $val) { if (is_int($key) && !empty($this->CI->module)) diff --git a/fuel/modules/fuel/libraries/Fuel_custom_fields.php b/fuel/modules/fuel/libraries/Fuel_custom_fields.php index dd8a648f5..ff0552600 100644 --- a/fuel/modules/fuel/libraries/Fuel_custom_fields.php +++ b/fuel/modules/fuel/libraries/Fuel_custom_fields.php @@ -350,87 +350,92 @@ public function asset($params) 'multiple' => $multiple, 'separator' => $separator, 'folder' => $params['folder'], + 'orig' => $params['value'], ); - if (!empty($params['value'])) - { - if (is_string($params['value'])) - { - // unserialize if it is a serialized string - if (is_json_str($params['value'])) - // if (is_serialized_str($params['value'])) - { - $assets = json_decode($params['value'], TRUE); - //$assets = unserialize($params['value']); - } - else if ($multiple) - { - // create assoc array with key being the image and the value being either the image name again or the caption - $assets = preg_split('#\s*,\s*|\n#', $params['value']); - - } - else - { - $assets = array($params['value']); - } - - $preview_str = ''; - - // loop through all the assets and concatenate them - foreach($assets as $asset) - { - if (!empty($asset)) - { - $asset_path = ''; - foreach($editable_filetypes as $folder => $regex) - { - if (!is_http_path($asset)) - { - if (preg_match('#'.$regex.'#i', $asset)) - { - $path = trim($params['folder'], '/').'/'.$asset; - $asset_path = assets_path($path); - break; - } - } - else - { - $asset_path = $asset; - } - } - - if (!empty($asset_path)) - { - $preview_str .= '<a href="'.$asset_path.'" target="_blank">'; - if (isset($params['is_image']) OR (!isset($params['is_image']) AND is_image_file($asset))) - { - $preview_str .= '<img src="'.$asset_path.'" style="'.$params['img_styles'].'"/>'; - } - else - { - $preview_str .= $asset; - } - $preview_str .= '</a>'; - } - } - } - } - $preview = ''; - if (!empty($preview_str)) - { - $img_container_styles = $params['img_container_styles']; - if ($multiple == FALSE AND !empty($params['img_styles'])) - { - $img_container_styles = $params['img_styles']; - } + // NO LONGER NEEDED BECAUSE IT'S DONE DYNAMICALLY WITH JAVASCRIPT + + // if (!empty($params['value'])) + // { + // if (is_string($params['value'])) + // { + // // unserialize if it is a serialized string + // if (is_json_str($params['value'])) + // // if (is_serialized_str($params['value'])) + // { + // $assets = json_decode($params['value'], TRUE); + // //$assets = unserialize($params['value']); + // } + // else if ($multiple) + // { + // // create assoc array with key being the image and the value being either the image name again or the caption + // $assets = preg_split('#\s*,\s*|\n#', $params['value']); + + // } + // else + // { + // $assets = array($params['value']); + // } + + // $preview_str = ''; + + // // loop through all the assets and concatenate them + // foreach($assets as $asset) + // { + // if (!empty($asset)) + // { + // $asset_path = ''; + + // foreach($editable_filetypes as $folder => $regex) + // { + // if (!is_http_path($asset)) + // { + // if (preg_match('#'.$regex.'#i', $asset)) + // { + // $path = trim($params['folder'], '/').'/'.$asset; + // $asset_path = assets_path($path); + // break; + // } + // } + // else + // { + // $asset_path = $asset; + // } + // } + + // // NO LONGER NEEDED BECAUSE IT IS DONE DYNAMICALLY + // if (!empty($asset_path)) + // { + // $preview_str .= '<a href="'.$asset_path.'" target="_blank">'; + // if (isset($params['is_image']) OR (!isset($params['is_image']) AND is_image_file($asset))) + // { + // $preview_str .= '<img src="'.$asset_path.'" style="'.$params['img_styles'].'"/>'; + // } + // else + // { + // $preview_str .= $asset; + // } + // $preview_str .= '</a>'; + // } + // } + // } + // } + // $preview = ''; + // // if (!empty($preview_str)) + // // { + // $img_container_styles = $params['img_container_styles']; + // if ($multiple == FALSE AND !empty($params['img_styles'])) + // { + // $img_container_styles = $params['img_styles']; + // } - $preview = '<br /><div class="noclone" style="'.$img_container_styles.'">'; - - $preview .= $preview_str; - $preview .= '</div><div class="clear"></div>'; - } - $params['after_html'] = $preview; - } + // $preview = '<br /><div class="img_preview noclone" style="'.$img_container_styles.'" data-imgStyles="'.$params['img_styles'].'">'; + // // $preview .= $preview_str; + // $preview .= '</div><div class="clear"></div>'; + // // } + // $params['after_html'] = $preview; + // } + // $params['type'] = ''; if ($multiple) @@ -539,7 +544,8 @@ public function asset($params) $data_params['resize_method'] = (isset($params['resize_method'])) ? $params['resize_method'] : 'maintain_ratio'; $data_params['hide_options'] = (isset($params['hide_options'])) ? (bool)$params['hide_options'] : FALSE; $data_params['accept'] = (isset($params['accept'])) ? $params['accept'] : ''; - + $data_params['multiple'] = (isset($params['multiple'])) ? (bool)$params['multiple'] : ''; + if (isset($params['hide_image_options'])) { $data_params['hide_image_options'] = (isset($params['hide_image_options'])) ? (bool)$params['hide_image_options'] : FALSE; @@ -564,7 +570,17 @@ public function asset($params) { $str = $form_builder->create_text($params); } - $str .= $params['after_html']; + $preview = ''; + $img_container_styles = $params['img_container_styles']; + if ($multiple == FALSE AND !empty($params['img_styles'])) + { + $img_container_styles = $params['img_styles']; + } + + $preview = '<br /><div class="img_preview noclone" style="'.$img_container_styles.'" data-imgstyles="'.$params['img_styles'].'">'; + $preview .= '</div><div class="clear"></div>'; + + $str .= $preview; return $str; } @@ -1732,7 +1748,7 @@ public function keyval($params) $params['value'] = ''; } - $params['class'] = 'no_editor'; + $params['class'] = (!empty($params['class'])) ? $params['class'].' no_editor': 'no_editor'; return $form_builder->create_textarea($params); } diff --git a/fuel/modules/fuel/libraries/Fuel_language.php b/fuel/modules/fuel/libraries/Fuel_language.php index 21eb5fb69..eae448dc9 100644 --- a/fuel/modules/fuel/libraries/Fuel_language.php +++ b/fuel/modules/fuel/libraries/Fuel_language.php @@ -262,7 +262,7 @@ public function is_default($lang) return TRUE; } // the default is the first option of the list - $default = key($this->options); + $default = $this->default_option(); return $lang == $default; } @@ -606,7 +606,7 @@ function lang_segment($uri = NULL, $routed = 'both') * Cleans a URI string value of any language segements * * @access public - * @param string The URI string to check. If none provided, will use the regment_array or rsegment_array on the URI object (optional) + * @param string The URI string to check. If none provided, will use the rsegment_array or rsegment_array on the URI object (optional) * @param boolean Determines whether to use a routed (TRUE), non-routed (FALSE) when looking at the URI segment if one is not provided in first argument (optional) * @return string */ @@ -622,7 +622,7 @@ function cleaned_uri($uri = NULL, $routed = FALSE) * Cleans a URI segments of any language segements * * @access public - * @param string The URI string to check. If none provided, will use the regment_array or rsegment_array on the URI object (optional) + * @param string The URI string to check. If none provided, will use the rsegment_array or rsegment_array on the URI object (optional) * @param boolean Determines whether to use a routed (TRUE), non-routed (FALSE) when looking at the URI segment if one is not provided in first argument (optional) * @return string */ @@ -728,7 +728,7 @@ function uri($uri = '', $lang = NULL) $uri = $this->cleaned_uri($uri); // if $lang is set then we will check to see if it is a legit language and use it - if (!empty($lang) AND $lang != $this->is_default($lang) AND !in_array($lang_seg, $no_lang)) + if (!empty($lang) AND ($lang != $this->is_default($lang) OR $this->fuel->config('language_force_default_to_site_url')) AND !in_array($lang_seg, $no_lang)) { if (!$this->is_mode('query_string')) { diff --git a/fuel/modules/fuel/libraries/Fuel_layouts.php b/fuel/modules/fuel/libraries/Fuel_layouts.php index 46b748656..a789bc4a8 100644 --- a/fuel/modules/fuel/libraries/Fuel_layouts.php +++ b/fuel/modules/fuel/libraries/Fuel_layouts.php @@ -287,16 +287,19 @@ public function options_list($blocks = FALSE, $group = '') } // add all layouts without a group first - foreach($layouts as $k => $layout) + if (empty($group)) { - if (empty($layout->group) AND !$layout->is_hidden()) + foreach($layouts as $k => $layout) { - $options[$layout->name] = $layout->label; - // reduce array down - unset($layouts[$k]); + if (empty($layout->group) AND !$layout->is_hidden()) + { + $options[$layout->name] = $layout->label; + // reduce array down + unset($layouts[$k]); + } } } - + //ksort($options); if (!empty($group)) diff --git a/fuel/modules/fuel/libraries/Fuel_modules.php b/fuel/modules/fuel/libraries/Fuel_modules.php index 505e58f32..8bd0d9d39 100644 --- a/fuel/modules/fuel/libraries/Fuel_modules.php +++ b/fuel/modules/fuel/libraries/Fuel_modules.php @@ -474,7 +474,7 @@ public function install($module) { $module = $this->get($module); } - $key = Fuel_install::INSTALLED_SETTINGS_KEY; + $key = Fuel_installer::INSTALLED_SETTINGS_KEY; $installed = $this->fuel->settings->get($module->name(), $key); if (empty($installed)) @@ -503,7 +503,7 @@ public function uninstall($module) $module = $this->get($module); } - $key = Fuel_install::INSTALLED_SETTINGS_KEY; + $key = Fuel_installer::INSTALLED_SETTINGS_KEY; $installed = $this->fuel->settings->get($module->name(), $key); if (empty($installed)) { @@ -762,7 +762,7 @@ public function info($prop = NULL) break; } } - if (empty($this->_info['display_field'])) $this->_info['display_field'] = $this->_info[1]; // usually the second field is the display_field... first is the id + if (empty($this->_info['display_field'])) $this->_info['display_field'] = $fields[1]; // usually the second field is the display_field... first is the id } } if (empty($prop)) diff --git a/fuel/modules/fuel/libraries/Fuel_pages.php b/fuel/modules/fuel/libraries/Fuel_pages.php index b7c737ff1..e007ded27 100644 --- a/fuel/modules/fuel/libraries/Fuel_pages.php +++ b/fuel/modules/fuel/libraries/Fuel_pages.php @@ -94,9 +94,10 @@ public function set_active(&$page) * * @access public * @param string The page to set as active + * @param array An array of initializtion parameters * @return object */ - public function get($location) + public function get($location, $init = array()) { $init['location'] = $location; $page = $this->create($init, FALSE); diff --git a/fuel/modules/fuel/libraries/MY_Parser.php b/fuel/modules/fuel/libraries/MY_Parser.php index 2d1f13959..279324552 100644 --- a/fuel/modules/fuel/libraries/MY_Parser.php +++ b/fuel/modules/fuel/libraries/MY_Parser.php @@ -337,6 +337,35 @@ public function _parse_compiled($string, $data, $return = FALSE, $cache_id = NUL } // -------------------------------------------------------------------- + + + /** + * Returns an array of allowed PHP functions + * + * @access public + * @return array + */ + public function allowed_functions() + { + return $this->_parser_allowed_php_functions; + } + + // -------------------------------------------------------------------- + + /** + * Returns an array of allowed PHP functions + * 1 - Encode tags + * 2 - Remove tags + * 3 - Allow tags + * + * @access public + * @return int + */ + public function allow_php_tags() + { + return $this->_parser_allow_php_tags; + } + } class MY_Security_Policy extends Dwoo_Security_Policy { diff --git a/fuel/modules/fuel/libraries/Validator.php b/fuel/modules/fuel/libraries/Validator.php index a489cd631..608b87550 100644 --- a/fuel/modules/fuel/libraries/Validator.php +++ b/fuel/modules/fuel/libraries/Validator.php @@ -129,6 +129,7 @@ public function add_rule($field, $func, $msg, $params = array()) if (empty($params)) { if (!empty($_POST[$field])) $params = $_POST[$field]; + if (empty($params[$field]) AND !empty($_FILES[$field])) $params = $_FILES[$field]; } $rule = new Validator_Rule($func, $msg, $params); $this->_fields[$field][] = $rule; diff --git a/fuel/modules/fuel/models/base_module_model.php b/fuel/modules/fuel/models/base_module_model.php index acb480d70..7d0a8e56e 100644 --- a/fuel/modules/fuel/models/base_module_model.php +++ b/fuel/modules/fuel/models/base_module_model.php @@ -690,7 +690,8 @@ public function get_others($display_field, $id = NULL, $val_field = NULL) if (in_array($CI->language_col, $fields)) { - $display_field = 'CONCAT('.$display_field.', " - ", '.$CI->language_col.') AS val_field'; + if (strpos($display_field, '.') === FALSE) $display_field = $this->table_name.'.'.$display_field; + $display_field = 'CONCAT('.$display_field.', " - ", '.$this->table_name.'.'.$CI->language_col.') AS val_field'; $orderby = 'val_field ASC'; } } @@ -731,7 +732,7 @@ public function get_languages($field = NULL) { $this->db->distinct($field); } - + if (strpos($field, '.') === FALSE) $field = $this->table_name.'.'.$field; $where[$field.' !='] = ''; $options = $this->options_list($field, $field, $where, TRUE, FALSE); return $options; diff --git a/fuel/modules/fuel/models/fuel_assets_model.php b/fuel/modules/fuel/models/fuel_assets_model.php index d984816e7..e6734eb5c 100644 --- a/fuel/modules/fuel/models/fuel_assets_model.php +++ b/fuel/modules/fuel/models/fuel_assets_model.php @@ -403,7 +403,7 @@ public function form_fields($values = array()) $fields['userfile_file_name'] = array('label' => lang('form_label_new_file_name'), 'comment' => lang('assets_comment_filename')); if ($CI->config->item('assets_allow_subfolder_creation', 'fuel')) { - $fields['subfolder'] = array('label' => lang('form_label_subfolder'), 'comment' => lang('assets_comment_filename')); + $fields['subfolder'] = array('label' => lang('form_label_subfolder'), 'comment' => lang('assets_comment_subfolder')); } $fields['overwrite'] = array('label' => lang('form_label_overwrite'), 'type' => 'checkbox', 'comment' => lang('assets_comment_overwrite'), 'checked' => true, 'value' => '1'); $fields['unzip'] = array('type' => 'checkbox', 'label' => lang('form_label_unzip'), 'comment' => lang('assets_comment_unzip'), 'value' => 1); diff --git a/fuel/modules/fuel/models/fuel_categories_model.php b/fuel/modules/fuel/models/fuel_categories_model.php index fc8c950b9..dff45d253 100644 --- a/fuel/modules/fuel/models/fuel_categories_model.php +++ b/fuel/modules/fuel/models/fuel_categories_model.php @@ -248,6 +248,30 @@ public function get_children($where = array(), $order = NULL, $limit = NULL, $of // -------------------------------------------------------------------- + /** + * Magic method that will allow you to return the model object by doing something like $cateogry->get_products(TRUE); + * + * @access public + * @param string field name + * @param array arguments + * @return mixed + */ + public function __call($method, $args) + { + if (preg_match("/^get_(.*)/", $method, $found)) + { + $model = $this->get($found[1]); + if ($model) + { + $data = (isset($args[0]) AND $args[0] === TRUE) ? $model : $model->find_all(); + return $data; + } + } + return parent::__call($method, $args); + } + + // -------------------------------------------------------------------- + /** * Magic method to return first property, method, then field values * diff --git a/fuel/modules/fuel/models/fuel_pages_model.php b/fuel/modules/fuel/models/fuel_pages_model.php index 6e48e7c25..241c8e5c2 100644 --- a/fuel/modules/fuel/models/fuel_pages_model.php +++ b/fuel/modules/fuel/models/fuel_pages_model.php @@ -31,6 +31,7 @@ class Fuel_pages_model extends Base_module_model { + public $filter_join = 'and'; public $required = array('location'); // The location field is required public $unique_fields = array('location'); // The location field is unique public $hidden_fields = array('last_modified', 'last_modified_by'); // The Last modified and Last modified by are hidden fields diff --git a/fuel/modules/fuel/models/fuel_tags_model.php b/fuel/modules/fuel/models/fuel_tags_model.php index 9790a6d84..9a8a3b4fb 100644 --- a/fuel/modules/fuel/models/fuel_tags_model.php +++ b/fuel/modules/fuel/models/fuel_tags_model.php @@ -169,17 +169,17 @@ public function options_list($key = 'id', $val = 'name', $where = array(), $orde { $this->db->join($this->_tables['fuel_categories'], $this->_tables['fuel_categories'].'.id = '.$this->_tables['fuel_tags'].'.category_id', 'LEFT'); - if (empty($key)) $key = 'id'; - if (empty($val)) $val = 'name'; + if (empty($key)) $key = $this->_tables['fuel_categories'].'.id'; + if (empty($val)) $val = $this->_tables['fuel_categories'].'.name'; // needed to prevent ambiguity - if (strpos($key, '.') === FALSE) + if (strpos($key, '.') === FALSE AND strpos($key, '(') === FALSE) { $key = $this->_tables['fuel_tags'].'.'.$key; } // needed to prevent ambiguity - if (strpos($val, '.') === FALSE) + if (strpos($val, '.') === FALSE AND strpos($val, '(') === FALSE) { $val = $this->_tables['fuel_tags'].'.'.$val; } diff --git a/fuel/modules/fuel/views/_blocks/fuel_footer.php b/fuel/modules/fuel/views/_blocks/fuel_footer.php index e7aea1e1d..c926f41f4 100644 --- a/fuel/modules/fuel/views/_blocks/fuel_footer.php +++ b/fuel/modules/fuel/views/_blocks/fuel_footer.php @@ -1,6 +1,3 @@ - <script type="text/javascript"> - <?=$this->load->module_view(FUEL_FOLDER, '_blocks/fuel_header_jqx', array(), TRUE)?> - </script> <?=js('jqx/jqx', 'fuel')?> <?php $fuel_js = $this->fuel->config('fuel_javascript'); ?> <?php foreach($fuel_js as $m => $j) : echo js(array($m => $j))."\n\t"; endforeach; ?> diff --git a/fuel/modules/fuel/views/_blocks/fuel_header.php b/fuel/modules/fuel/views/_blocks/fuel_header.php index 40b432410..fb9f6c7be 100644 --- a/fuel/modules/fuel/views/_blocks/fuel_header.php +++ b/fuel/modules/fuel/views/_blocks/fuel_header.php @@ -12,4 +12,8 @@ <?php foreach($css as $m => $c) : echo css(array($m => $c))."\n\t"; endforeach; ?> <?=js('jquery/jquery', 'fuel')?> + <script type="text/javascript"> + <?=$this->load->module_view(FUEL_FOLDER, '_blocks/fuel_header_jqx', array(), TRUE)?> + </script> + </head> \ No newline at end of file diff --git a/fuel/modules/fuel/views/_docs/general/javascript.php b/fuel/modules/fuel/views/_docs/general/javascript.php index da6e784bc..444085059 100644 --- a/fuel/modules/fuel/views/_docs/general/javascript.php +++ b/fuel/modules/fuel/views/_docs/general/javascript.php @@ -114,7 +114,7 @@ <ul> <li><strong>js_controller</strong>: the name of the file and thus controller to use. The default is the BaseFuelController.js</li> <li><strong>js_controller_path</strong>: the object/folder path to the controller. The default is <dfn>fuel.controller.BaseFuelController</dfn> (folder slashes are simply replaced with dots)</li> - <li><strong>js_controller_params</strong>: an initialization object of parameters to pass to the controller.</li> + <li><strong>js_controller_params</strong>: an initialization object of parameters to pass to the controller</li> <li><strong>js_localized</strong>: an array of localized string keys to be accessible via the <dfn>fuel.lang()</dfn> function</li> </ul> diff --git a/fuel/modules/fuel/views/_docs/general/models.php b/fuel/modules/fuel/views/_docs/general/models.php index da28c8939..5f530efc9 100644 --- a/fuel/modules/fuel/views/_docs/general/models.php +++ b/fuel/modules/fuel/views/_docs/general/models.php @@ -525,12 +525,12 @@ function __construct() <p class="important"> By default, FUEL uses the built-in relationships model to save relationship data. However, if you want to change the model, as well as the field names it uses to store the key information, - you can pass the following parameters in your <dfn>has_many</dfn> or <dfn>belongs_to</dfn> properties array: <dfn>fuel_relationships_model</dfn>, <dfn>foreign_key</dfn>, <dfn>candidate_key</dfn>. An Example is below: + you can pass the following parameters in your <dfn>has_many</dfn> or <dfn>belongs_to</dfn> properties array: <dfn>relationships_model</dfn>, <dfn>foreign_key</dfn>, <dfn>candidate_key</dfn>. An Example is below: </p> <pre class="brush:php"> class Products_model extends Base_module_model { - public $has_many = array('attributes' => array('model' => array(FUEL_FOLDER => 'fuel_tags_model'), 'fuel_relationships_model' => 'my_relationship_model', 'foreign_key' => 'my_foreign_key', 'candidate_key' => 'candidate_key')); + public $has_many = array('attributes' => array('model' => array(FUEL_FOLDER => 'fuel_tags_model'), 'relationships_model' => 'my_relationship_model', 'foreign_key' => 'my_foreign_key', 'candidate_key' => 'candidate_key')); function __construct() { diff --git a/fuel/modules/fuel/views/_docs/installation/requirements.php b/fuel/modules/fuel/views/_docs/installation/requirements.php index fcd9dc00d..518973162 100644 --- a/fuel/modules/fuel/views/_docs/installation/requirements.php +++ b/fuel/modules/fuel/views/_docs/installation/requirements.php @@ -1,6 +1,6 @@ <h1>Server Requirements</h1> <ul> <li>Apache server with .htaccess.</li> - <li><a href="http://www.php.net" target="_blank">PHP</a> version 5.1.6 or greater.</li> + <li><a href="http://www.php.net" target="_blank">PHP</a> version 5.2 or greater.</li> <li>A <a href="http://www.mysql.com" target="_blank">MySQL 4+</a> database if using the FUEL admin. Currently does not support other databases.</li> </ul> \ No newline at end of file diff --git a/fuel/modules/fuel/views/_docs/modules/tutorial.php b/fuel/modules/fuel/views/_docs/modules/tutorial.php index 7fa788e73..747492dab 100644 --- a/fuel/modules/fuel/views/_docs/modules/tutorial.php +++ b/fuel/modules/fuel/views/_docs/modules/tutorial.php @@ -233,7 +233,7 @@ class Article_model extends Base_module_record { echo $tag->name; } </pre> -<p class="important">In the latter example above, the record property <kbd>tags</kbd> can be called as a method as well by pre-pending "get_" in front of the properties name (e.g. get_tags()). +<p class="important">In the latter example above, the record property <kbd>tags</kbd> can be called as a method as well by pre-appending "get_" in front of the properties name (e.g. get_tags()). This allows us to pass additional parameters.</p> @@ -339,7 +339,7 @@ class and gets passed to a <a href="<?=user_guide_url('libraries/form_builder')? <p>There are a few modifications we'd like to make. The first thing we'd like to change is the image selection/upload button on the content field's wysiwyg editor to pull from the folder <span class="file">assets/images/articles</span> instead of the default <span class="file">assets/images</span> folder. To make this change, - you'll need to create that folder and make sure it is writable by PHP. Then you can add the following parameter to the content field in hte form_fields method:</p> + you'll need to create that folder and make sure it is writable by PHP. Then you can add the following parameter to the content field in the form_fields method:</p> <pre class="brush: php"> function form_fields($values = array(), $related = array()) { diff --git a/fuel/modules/fuel/views/_generate/advanced/controllers/{module}_module.php b/fuel/modules/fuel/views/_generate/advanced/controllers/{module}_module.php index 642295057..eb74939cf 100644 --- a/fuel/modules/fuel/views/_generate/advanced/controllers/{module}_module.php +++ b/fuel/modules/fuel/views/_generate/advanced/controllers/{module}_module.php @@ -4,20 +4,18 @@ class {model_name}_module extends Fuel_base_controller { public $nav_selected = '{module}|{module}/:any'; - function __construct() { parent::__construct(); } - + function index() { $vars['page_title'] = $this->fuel->admin->page_title(array(lang('module_{module}')), FALSE); $crumbs = array('tools' => lang('section_tools'), lang('module_{module}')); - $this->fuel->admin->set_titlebar($crumbs, 'ico_{module}'); - $this->fuel->admin->render('_admin/{module}', $vars); + $this->fuel->admin->set_titlebar($crumbs, 'ico_{module}'); + $this->fuel->admin->render('_admin/{module}', $vars, '', FUEL_FOLDER); } - } \ No newline at end of file diff --git a/fuel/modules/fuel/views/_generate/advanced/libraries/Fuel_{module}.php b/fuel/modules/fuel/views/_generate/advanced/libraries/Fuel_{module}.php index 1cfab0a8f..9905f2468 100644 --- a/fuel/modules/fuel/views/_generate/advanced/libraries/Fuel_{module}.php +++ b/fuel/modules/fuel/views/_generate/advanced/libraries/Fuel_{module}.php @@ -20,7 +20,7 @@ // ------------------------------------------------------------------------ class Fuel_{module} extends Fuel_advanced_module { - + public $name = "{module}"; // the folder name of the module /** @@ -33,9 +33,9 @@ function __construct($params = array()) parent::__construct(); $this->initialize($params); } - + // -------------------------------------------------------------------- - + /** * Initialize the backup object * @@ -53,10 +53,9 @@ function initialize($params) } // -------------------------------------------------------------------- - + /** * Add your custom methods for this advanced module below. * You will be able to access it via $this->fuel->{module}->my_method() - */ - + */ } \ No newline at end of file diff --git a/fuel/modules/fuel/views/_generate/advanced/views/_docs/index.php b/fuel/modules/fuel/views/_generate/advanced/views/_docs/index.php index dfdc74663..7a1b4eed4 100644 --- a/fuel/modules/fuel/views/_generate/advanced/views/_docs/index.php +++ b/fuel/modules/fuel/views/_generate/advanced/views/_docs/index.php @@ -3,6 +3,4 @@ <?=generate_config_info()?> -<?=generate_toc()?> - - +<?=generate_toc()?> \ No newline at end of file diff --git a/fuel/modules/fuel/views/_generate/model/{model}_model.php b/fuel/modules/fuel/views/_generate/model/{model}_model.php index 4ef1aa63b..d89a2f189 100644 --- a/fuel/modules/fuel/views/_generate/model/{model}_model.php +++ b/fuel/modules/fuel/views/_generate/model/{model}_model.php @@ -29,7 +29,7 @@ function __construct() parent::__construct('{table}'); // table name } - function list_items($limit = NULL, $offset = NULL, $col = 'precedence', $order = 'desc', $just_count = FALSE) + function list_items($limit = NULL, $offset = NULL, $col = 'precedence', $order = 'asc', $just_count = FALSE) { $data = parent::list_items($limit, $offset, $col, $order, $just_count = FALSE); return $data; diff --git a/fuel/modules/fuel/views/login.php b/fuel/modules/fuel/views/login.php index 7409fcd98..f2fc58a69 100644 --- a/fuel/modules/fuel/views/login.php +++ b/fuel/modules/fuel/views/login.php @@ -9,7 +9,7 @@ <?=$css?> <?php endif; ?> <script type="text/javascript"> - <?=$this->load->module_view('fuel', '_blocks/fuel_header_jqx', array(), TRUE)?> + <?=$this->load->module_view(FUEL_FOLDER, '_blocks/fuel_header_jqx', array(), TRUE)?> </script> <?=js('jquery/jquery', FUEL_FOLDER)?> <?=js('jqx/jqx', FUEL_FOLDER)?> diff --git a/fuel/modules/fuel/views/pages/page_create_edit.php b/fuel/modules/fuel/views/pages/page_create_edit.php index 89eda47b3..84b3d5d9d 100644 --- a/fuel/modules/fuel/views/pages/page_create_edit.php +++ b/fuel/modules/fuel/views/pages/page_create_edit.php @@ -1,4 +1,4 @@ -<?php $this->load->view('_blocks/related_items'); ?> +<?php $this->load->module_view(FUEL_FOLDER, '_blocks/related_items'); ?> <div id="notification_extra" class="notification"> <?php if (!empty($data['published']) && !is_true_val($data['published'])) : ?> diff --git a/fuel/modules/fuel/views/pwd_reset.php b/fuel/modules/fuel/views/pwd_reset.php index d13ae80ea..c58ce7014 100644 --- a/fuel/modules/fuel/views/pwd_reset.php +++ b/fuel/modules/fuel/views/pwd_reset.php @@ -9,7 +9,7 @@ <?=$css?> <?php endif; ?> <script type="text/javascript"> - <?=$this->load->module_view('fuel', '_blocks/fuel_header_jqx', array(), true)?> + <?=$this->load->module_view(FUEL_FOLDER, '_blocks/fuel_header_jqx', array(), true)?> </script> <?=js('jquery/jquery', FUEL_FOLDER)?> <?=js('jqx/jqx', FUEL_FOLDER)?>