Updated alternate interface to look nicer based on changes by Zimi
@@ -20,11 +20,11 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author Adam Zammit <adam.zammit@acspri.org.au>
|
* @author Adam Zammit <adam.zammit@deakin.edu.au>
|
||||||
* @copyright Australian Consortium for Social and Political Research Inc 2007,2008
|
* @copyright Deakin University 2007,2008
|
||||||
* @package queXS
|
* @package queXS
|
||||||
* @subpackage user
|
* @subpackage user
|
||||||
* @link http://www.acspri.org.au/ queXS was writen for Australian Consortium for Social and Political Research Incorporated (ACSPRI)
|
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
|
||||||
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|||||||
BIN
css/images/appointments.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
css/images/appointments_act.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
css/images/arrow_down.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
css/images/arrow_up.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
css/images/btn_field.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
css/images/details.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
css/images/details_act.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
css/images/end.jpg
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
css/images/history.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
css/images/history_act.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
css/images/info.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
css/images/info_act.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
css/images/info_field.jpg
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
css/images/notes.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
css/images/notes_act.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
css/images/play.jpg
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
css/images/plius.jpg
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
css/images/tab_field.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
@@ -1,12 +1,326 @@
|
|||||||
|
/** RESET **/
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font-weight: inherit;
|
||||||
|
font-style: inherit;
|
||||||
|
font-size: 100%;
|
||||||
|
font-family: inherit;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear:both;
|
||||||
|
font-size:0;
|
||||||
|
height:0;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #FFFFFF;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#wrapper_e {
|
||||||
|
}
|
||||||
|
.full_height_wrapper{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
text-align: justify;
|
||||||
|
height:285px;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
min-width:1024px;
|
||||||
|
}
|
||||||
|
.half_height_wrapper{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
text-align: justify;
|
||||||
|
height:94px;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
min-width:1024px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top_page {
|
||||||
|
}
|
||||||
|
#top_page_in_e {
|
||||||
|
}
|
||||||
|
|
||||||
|
.full_height_top_page{
|
||||||
|
height: 207px;
|
||||||
|
}
|
||||||
|
.half_height_top_page{
|
||||||
|
height: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full_height{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #FFF;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 271px;
|
||||||
|
padding-top:14px;
|
||||||
|
}
|
||||||
|
.half_height{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #FFF;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 80px;
|
||||||
|
padding-top:14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#header_line {
|
||||||
|
margin: 16px 0px 0px 12px;
|
||||||
|
padding: 0;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#menu_left_e {
|
||||||
|
}
|
||||||
|
.menu_full_height {
|
||||||
|
padding: 0;
|
||||||
|
height: 137px;
|
||||||
|
width:145px;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
padding:9px 22px 0px 44px;
|
||||||
|
padding-left:44px;
|
||||||
|
padding-top:9px;
|
||||||
|
list-style:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu_half_height {
|
||||||
|
padding: 0;
|
||||||
|
height: 47px;
|
||||||
|
list-style:none;
|
||||||
|
width:145px;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
padding:9px 22px 0px 44px;
|
||||||
|
padding-left:44px;
|
||||||
|
padding-top:9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu_left li {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_1 a{
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
color:#9f9f9f;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:8px 0px 0px 18px;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_1 a:hover{
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#49b848;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_2_e a{
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_2_full_height a{
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#9f9f9f;
|
||||||
|
padding:8px 0px 0px 18px;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
.item_2_half_height a{
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 1px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#b8b8ba;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.item_2_full_height a:hover{
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#05b0f7;
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_2_e a:hover{
|
||||||
|
}
|
||||||
|
.item_2_half_height {
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 1px;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_3_e a{
|
||||||
|
}
|
||||||
|
.item_3_half_height {
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 1px;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.item_3_full_height a{
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#9f9f9f;
|
||||||
|
padding:8px 0px 0px 18px;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
.item_3_half_height a{
|
||||||
|
}
|
||||||
|
.item_3_full_height a:hover{
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#ff3506;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item_3_e a:hover{
|
||||||
|
}
|
||||||
|
|
||||||
|
#info_e {
|
||||||
|
}
|
||||||
|
|
||||||
|
.info_full_height{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #CCC;
|
||||||
|
border: 1px solid #e9e9eb;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
height: 137px;
|
||||||
|
width:214px;
|
||||||
|
padding-right:115px;
|
||||||
|
}
|
||||||
|
.info_half_height{
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #CCC;
|
||||||
|
border: 1px solid #e9e9eb;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
height: 56px;
|
||||||
|
width:214px;
|
||||||
|
padding-right:115px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a:active {
|
||||||
|
/* border: 4px inset;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#arrow_up_e {
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow_up_full_height {
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0;
|
||||||
|
background: #EEE;
|
||||||
|
background: url(images/arrow_up.png) no-repeat left top;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 20px;
|
||||||
|
width:20px;
|
||||||
|
position:absolute;
|
||||||
|
left:480px;
|
||||||
|
top:270px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow_up_half_height {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#arrow_down_e {
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow_down_full_height {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.arrow_down_half_height {
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0;
|
||||||
|
background: #EEE;
|
||||||
|
background: url(images/arrow_down.jpg) no-repeat left top;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 20px;
|
||||||
|
width:20px;
|
||||||
|
left:480px;
|
||||||
|
top:80px;
|
||||||
|
position:absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bottom_page {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0;
|
||||||
|
background: #CCC;
|
||||||
|
text-align: justify;
|
||||||
|
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.headerexpand {
|
.headerexpand {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
right: 0px;
|
right: 20%;
|
||||||
}
|
}
|
||||||
#headerexpandimage {
|
#headerexpandimage {
|
||||||
height: 20px;
|
height: 15px;
|
||||||
}.box {
|
}
|
||||||
|
.box {
|
||||||
margin: 18px;
|
margin: 18px;
|
||||||
}
|
}
|
||||||
.online {
|
.online {
|
||||||
@@ -16,66 +330,155 @@
|
|||||||
background: #FF0000;
|
background: #FF0000;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
padding: 3px 0.5em;
|
/*padding: 3px 0.5em;
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
border: 1px solid #778;
|
border: 1px solid #778;
|
||||||
background: #DDE;
|
background: #DDE;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: black;
|
color: black;*/
|
||||||
}
|
}
|
||||||
a:active {
|
a:active {
|
||||||
border: 4px inset;
|
/* border: 4px inset;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#header {
|
.header {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : 20%;
|
width : 20%;
|
||||||
height : 30%;
|
height : 38%;
|
||||||
top : 0;
|
top : 40%;
|
||||||
right : 0;
|
right : 0;
|
||||||
bottom : auto;
|
bottom : auto;
|
||||||
left : 0;
|
left : 0;
|
||||||
/*border-bottom: 1px solid #aaa;*/
|
/*max-height:136px;*/
|
||||||
}
|
}
|
||||||
#calllist {
|
#calllist {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : 50%;
|
width : 50%;
|
||||||
height : 30%;
|
height : 38%;
|
||||||
|
top : 2%;
|
||||||
left : 50%;
|
left : 50%;
|
||||||
top : 0;
|
|
||||||
right : 0;
|
right : 0;
|
||||||
|
/*max-height:180px;*/
|
||||||
bottom : auto;
|
bottom : auto;
|
||||||
}
|
}
|
||||||
#qstatus {
|
#qstatus {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : 30%;
|
width : 30%;
|
||||||
height : 30%;
|
height : 38%;
|
||||||
top : 0;
|
top : 2%;
|
||||||
right : 0;
|
right : 0;
|
||||||
left: 20%;
|
left: 20%;
|
||||||
bottom : auto;
|
bottom : auto;
|
||||||
/*border: 1px solid #aaa;*/
|
/*max-height:38%;*/
|
||||||
}
|
}
|
||||||
#casefunctions {
|
#casefunctions {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
width : 20%;
|
width : 17%;
|
||||||
height : 30%;
|
height : 38%;
|
||||||
top : 0;
|
top : 2%;
|
||||||
right : 0;
|
right : 0;
|
||||||
left: 0;
|
left: 3%;
|
||||||
|
font-size:15px;
|
||||||
bottom : auto;
|
bottom : auto;
|
||||||
}
|
}
|
||||||
|
#casefunctions li {
|
||||||
|
list-style:none;
|
||||||
|
}
|
||||||
#content {
|
#content {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
top : 30%;
|
top : 40%;
|
||||||
left : 0;
|
left : 0;
|
||||||
bottom : auto;
|
bottom : auto;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
height : 70%;
|
height : 60%;
|
||||||
}
|
}
|
||||||
.embeddedobject {
|
.embeddedobject {
|
||||||
width:100%;
|
width:100%;
|
||||||
height:100%;
|
height:100%;
|
||||||
position:absolute;
|
position:absolute;
|
||||||
}
|
}
|
||||||
|
#main-qstatus {
|
||||||
|
width:185px;
|
||||||
|
/*max-height:116px;*/
|
||||||
|
position:absolute;
|
||||||
|
left:3%;
|
||||||
|
top:2%;
|
||||||
|
height:90%;
|
||||||
|
border: 2px solid #e9e9eb;
|
||||||
|
border-radius: 15px;
|
||||||
|
-moz-border-radius: 15px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#main-casenotes{
|
||||||
|
height:85%;
|
||||||
|
}
|
||||||
|
#main-contactdetails{
|
||||||
|
/*height:85%;*/
|
||||||
|
}
|
||||||
|
#main-calllist{
|
||||||
|
/*height:85%;*/
|
||||||
|
}
|
||||||
|
#main-appointmentlist{
|
||||||
|
height:85%;
|
||||||
|
}
|
||||||
|
#main-projectinfo{
|
||||||
|
height:85%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wait_wrapper{
|
||||||
|
margin: 0 auto;
|
||||||
|
position:absolute;
|
||||||
|
top:40%;
|
||||||
|
height:60%;
|
||||||
|
width:160px;
|
||||||
|
left:40%;
|
||||||
|
list-style:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.wait_li_1 a{
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
color:#9f9f9f;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:8px 0px 0px 18px;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wait_li_1 a:hover{
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#49b848;
|
||||||
|
}
|
||||||
|
.wait_li_2 a{
|
||||||
|
background: url(images/btn_field.jpg) no-repeat left top;
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
color:#9f9f9f;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:8px 0px 0px 18px;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wait_li_2 a:hover{
|
||||||
|
list-style: none;
|
||||||
|
display: inline;
|
||||||
|
float: left;
|
||||||
|
width: 145px;
|
||||||
|
height: 36px;
|
||||||
|
text-decoration:none;
|
||||||
|
color:#ff3506;
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,3 +11,8 @@
|
|||||||
.addresp{
|
.addresp{
|
||||||
font-style:italic;
|
font-style:italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text{
|
||||||
|
font-size:14px;
|
||||||
|
font-family:Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
34
css/status_interface2.css
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
.statusbox {
|
||||||
|
padding: 1px 1px;
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px solid #778;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
float: left;
|
||||||
|
text-align: center;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.statusbutton {
|
||||||
|
padding: 1px 1px;
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px solid #778;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
text-align: center;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.online {
|
||||||
|
background: #00FF00;
|
||||||
|
}
|
||||||
|
.offline {
|
||||||
|
background: #FF0000;
|
||||||
|
}
|
||||||
|
.tobecoded {
|
||||||
|
background: orange;
|
||||||
|
}
|
||||||
|
.text {
|
||||||
|
float: left;
|
||||||
|
font-size:14px;
|
||||||
|
font-family:Tahoma, Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
118
css/tabber_interface2.css
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
REQUIRED to hide the non-active tab content.
|
||||||
|
But do not hide them in the print stylesheet!
|
||||||
|
--------------------------------------------------*/
|
||||||
|
.tabberlive .tabbertabhide {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
.tabber = before the tabber interface is set up
|
||||||
|
.tabberlive = after the tabber interface is set up
|
||||||
|
--------------------------------------------------*/
|
||||||
|
.tabber {
|
||||||
|
}
|
||||||
|
.tabberlive {
|
||||||
|
/*margin-top:1em;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
ul.tabbernav = the tab navigation list
|
||||||
|
li.tabberactive = the active tab
|
||||||
|
--------------------------------------------------*/
|
||||||
|
ul.tabbernav
|
||||||
|
{
|
||||||
|
margin:0;
|
||||||
|
padding: 3px 0;
|
||||||
|
border-bottom: 1px solid #e9e9eb;
|
||||||
|
font: bold 10px Verdana, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tabbernav li
|
||||||
|
{
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tabbernav li a
|
||||||
|
{
|
||||||
|
padding: 3px 0.5em;
|
||||||
|
margin-left: 3px;
|
||||||
|
border: 1px solid #e9e9eb;
|
||||||
|
border-bottom: none;
|
||||||
|
background: #e9e9eb;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 9px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tabbernav li a:link { color: #448; }
|
||||||
|
ul.tabbernav li a:visited { color: #667; }
|
||||||
|
|
||||||
|
ul.tabbernav li a:hover
|
||||||
|
{
|
||||||
|
color: #000;
|
||||||
|
background: #AAE;
|
||||||
|
border-color: #227;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tabbernav li.tabberactive a
|
||||||
|
{
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.tabbernav li.tabberactive a:hover
|
||||||
|
{
|
||||||
|
color: #000;
|
||||||
|
background: white;
|
||||||
|
border-bottom: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
.tabbertab = the tab content
|
||||||
|
Add style only after the tabber interface is set up (.tabberlive)
|
||||||
|
--------------------------------------------------*/
|
||||||
|
.tabberlive .tabbertab {
|
||||||
|
position:absolute;
|
||||||
|
border: 2px solid #e9e9eb;
|
||||||
|
border-bottom-left-radius: 15px;
|
||||||
|
-moz-border-radius-bottomleft: 15px;
|
||||||
|
border-bottom-right-radius: 15px;
|
||||||
|
-moz-border-radius-bottomright: 15px;
|
||||||
|
|
||||||
|
border-top:0;
|
||||||
|
top: 1.25em;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If desired, hide the heading since a heading is provided by the tab */
|
||||||
|
.tabberlive .tabbertab h2 {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.tabberlive .tabbertab h3 {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Example of using an ID to set different styles for the tabs on the page*/
|
||||||
|
.tabberlive#tab1 {
|
||||||
|
}
|
||||||
|
.tabberlive#tab2 {
|
||||||
|
}
|
||||||
|
.tabberlive#tab2 .tabbertab {
|
||||||
|
height:100%;
|
||||||
|
overflow:auto;
|
||||||
|
}
|
||||||
BIN
images/arrow-down-2.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
images/arrow-up-2.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
@@ -108,7 +108,38 @@ if (isset($_GET['endcase']))
|
|||||||
$rs = $db->GetRow($sql);
|
$rs = $db->GetRow($sql);
|
||||||
|
|
||||||
if (!empty($rs) && $rs['tryanother'] == 1)
|
if (!empty($rs) && $rs['tryanother'] == 1)
|
||||||
$endthecase = false;
|
{
|
||||||
|
//we can try another number...
|
||||||
|
|
||||||
|
$case_id = get_case_id($operator_id,false);
|
||||||
|
$call_attempt_id = get_call_attempt($operator_id,false);
|
||||||
|
//check if there is another number to try...
|
||||||
|
$sql = "SELECT c. *
|
||||||
|
FROM contact_phone AS c
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT contact_phone.contact_phone_id
|
||||||
|
FROM contact_phone
|
||||||
|
LEFT JOIN `call` ON ( call.contact_phone_id = contact_phone.contact_phone_id )
|
||||||
|
LEFT JOIN outcome ON ( call.outcome_id = outcome.outcome_id )
|
||||||
|
WHERE contact_phone.case_id = '$case_id'
|
||||||
|
AND outcome.tryagain =0
|
||||||
|
) AS l ON l.contact_phone_id = c.contact_phone_id
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT contact_phone_id
|
||||||
|
FROM `call`
|
||||||
|
WHERE call_attempt_id = '$call_attempt_id'
|
||||||
|
AND outcome_id != 18
|
||||||
|
) as ca on ca.contact_phone_id = c.contact_phone_id
|
||||||
|
WHERE c.case_id = '$case_id'
|
||||||
|
AND l.contact_phone_id IS NULL
|
||||||
|
AND ca.contact_phone_id IS NULL"; //only select numbers that should be tried again and have not been tried in this attempt which are not the accidental hang up outcome
|
||||||
|
|
||||||
|
$rs = $db->GetAll($sql);
|
||||||
|
|
||||||
|
if (!empty($rs))
|
||||||
|
$endthecase = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($endthecase)
|
if ($endthecase)
|
||||||
@@ -121,6 +152,7 @@ if (isset($_GET['endcase']))
|
|||||||
include("waitnextcase_interface2.php");
|
include("waitnextcase_interface2.php");
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$js = array("js/popup.js","js/tabber.js","include/jquery-ui/js/jquery-1.4.2.min.js","include/jquery-ui/js/jquery-ui-1.8.2.custom.min.js");
|
$js = array("js/popup.js","js/tabber.js","include/jquery-ui/js/jquery-1.4.2.min.js","include/jquery-ui/js/jquery-ui-1.8.2.custom.min.js");
|
||||||
@@ -148,29 +180,30 @@ if ($popupcall)
|
|||||||
|
|
||||||
if (HEADER_EXPANDER)
|
if (HEADER_EXPANDER)
|
||||||
{
|
{
|
||||||
$js[] = "js/headerexpand.js";
|
$js[] = "js/headerexpand_interface2.js";
|
||||||
$js[] = "js/headerexpandmanual.js";
|
$js[] = "js/headerexpandmanual_interface2.js";
|
||||||
}
|
}
|
||||||
else if (HEADER_EXPANDER_MANUAL)
|
else if (HEADER_EXPANDER_MANUAL)
|
||||||
{
|
{
|
||||||
$js[] = "js/headerexpand.js";
|
$js[] = "js/headerexpand_interface2.js";
|
||||||
$js[] = "js/headerexpandmanual.js";
|
$js[] = "js/headerexpandmanual_interface2.js";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xhtml_head(T_("queXS"), $body, array("css/index_interface2.css","css/tabber.css","include/jquery-ui/css/smoothness/jquery-ui-1.8.2.custom.css") , $js);
|
xhtml_head(T_("queXS"), $body, array("css/index_interface2.css","css/tabber_interface2.css","include/jquery-ui/css/smoothness/jquery-ui-1.8.2.custom.css") , $js);
|
||||||
print $script;
|
print $script;
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div id="casefunctions" class="header">
|
<ul id="casefunctions" class="header">
|
||||||
<div class='box important'><a href="javascript:poptastic('call_interface2.php');"><? echo T_("Assign outcome"); ?></a></div>
|
<li id="item_1"><a href="javascript:poptastic('call_interface2.php');"><? echo T_("Outcome"); ?> <img src="css/images/play.jpg" /></a></li>
|
||||||
<div class='box'><a href="javascript:poptastic('appointment.php');"><? echo T_("Appointment"); ?></a></div>
|
<li id="item_2_e" class="item_2_full_height"><a href="javascript:poptastic('appointment.php');"><? echo T_("Appointment"); ?> <img src="css/images/plius.jpg" /></a></li>
|
||||||
<div class='box'><a href="?endwork=endwork"><? echo T_("End work"); ?></a></div>
|
<li id="item_3_e" class="item_3_full_height"><a href="?endwork=endwork"><? echo T_("End work"); ?> <img src="css/images/end.jpg" /></a></li>
|
||||||
<? if (HEADER_EXPANDER_MANUAL){ ?> <div class='headerexpand'><img id='headerexpandimage' src='./images/arrow-up-2.png' alt='<? echo T_('Arrow for expanding or contracting'); ?>'/></div> <? } ?>
|
</ul>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="content" class="content">
|
<div id="content" class="content">
|
||||||
<?
|
<?
|
||||||
@@ -199,11 +232,29 @@ if (!$call_id)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
//create a call on the first available number by priority
|
//create a call on the first available number by priority
|
||||||
$sql = "SELECT *
|
$sql = "SELECT c. *
|
||||||
FROM contact_phone
|
FROM contact_phone AS c
|
||||||
WHERE case_id = '$case_id'
|
LEFT JOIN (
|
||||||
ORDER BY priority ASC
|
SELECT contact_phone.contact_phone_id
|
||||||
LIMIT 1";
|
FROM contact_phone
|
||||||
|
LEFT JOIN `call` ON ( call.contact_phone_id = contact_phone.contact_phone_id )
|
||||||
|
LEFT JOIN outcome ON ( call.outcome_id = outcome.outcome_id )
|
||||||
|
WHERE contact_phone.case_id = '$case_id'
|
||||||
|
AND outcome.tryagain =0
|
||||||
|
) AS l ON l.contact_phone_id = c.contact_phone_id
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT contact_phone_id
|
||||||
|
FROM `call`
|
||||||
|
WHERE call_attempt_id = '$ca'
|
||||||
|
AND outcome_id != 18
|
||||||
|
) as ca on ca.contact_phone_id = c.contact_phone_id
|
||||||
|
WHERE c.case_id = '$case_id'
|
||||||
|
AND l.contact_phone_id IS NULL
|
||||||
|
AND ca.contact_phone_id IS NULL
|
||||||
|
order by c.priority ASC";
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
$rs = $db->GetRow($sql);
|
$rs = $db->GetRow($sql);
|
||||||
|
|
||||||
@@ -228,6 +279,7 @@ xhtml_object($data,"main-content");
|
|||||||
|
|
||||||
<div id="qstatus" class="header">
|
<div id="qstatus" class="header">
|
||||||
<?xhtml_object("status_interface2.php","main-qstatus");?>
|
<?xhtml_object("status_interface2.php","main-qstatus");?>
|
||||||
|
<? if (HEADER_EXPANDER_MANUAL){ ?> <div class='headerexpand'><img id='headerexpandimage' src='./images/arrow-up-2.jpg' alt='<? echo T_('Arrow for expanding or contracting'); ?>'/></div> <? } ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
20
js/headerexpand_interface2.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
function headerexpand()
|
||||||
|
{
|
||||||
|
$(".header").css("height","38%");
|
||||||
|
$(".content").css("height","60%");
|
||||||
|
$(".content").css("top","40%");
|
||||||
|
$(".box:not(.important)").css("display","");
|
||||||
|
// $(".item_2_half_height").removeClass("item_2_half_height").addClass("item_2_full_height");
|
||||||
|
$(".item_3_half_height").removeClass("item_3_half_height").addClass("item_3_full_height");
|
||||||
|
}
|
||||||
|
|
||||||
|
function headercontract()
|
||||||
|
{
|
||||||
|
$(".header").css("height","13%");
|
||||||
|
$(".content").css("height","80%");
|
||||||
|
$(".content").css("top","15%");
|
||||||
|
$(".box:not(.important)").css("display","none");
|
||||||
|
// $(".item_2_full_height").removeClass("item_2_full_height").addClass("item_2_half_height");
|
||||||
|
$(".item_3_full_height").removeClass("item_3_full_height").addClass("item_3_half_height");
|
||||||
|
|
||||||
|
}
|
||||||
26
js/headerexpandmanual_interface2.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//Apply to all items of class header
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("#headerexpandimage").click(headertogglemanual);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function headerforcecontract()
|
||||||
|
{
|
||||||
|
$("#headerexpandimage").attr('src',"./images/arrow-down-2.jpg");
|
||||||
|
headercontract();
|
||||||
|
}
|
||||||
|
|
||||||
|
function headertogglemanual()
|
||||||
|
{
|
||||||
|
if ($("#headerexpandimage").attr('src') == './images/arrow-up-2.jpg')
|
||||||
|
{
|
||||||
|
$("#headerexpandimage").attr('src',"./images/arrow-down-2.jpg");
|
||||||
|
headercontract();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#headerexpandimage").attr('src',"./images/arrow-up-2.jpg");
|
||||||
|
headerexpand();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
542
js/tabber_interface2.js
Normal file
@@ -0,0 +1,542 @@
|
|||||||
|
/*==================================================
|
||||||
|
$Id: tabber.js,v 1.9 2006/04/27 20:51:51 pat Exp $
|
||||||
|
tabber.js by Patrick Fitzgerald pat@barelyfitz.com
|
||||||
|
|
||||||
|
Documentation can be found at the following URL:
|
||||||
|
http://www.barelyfitz.com/projects/tabber/
|
||||||
|
|
||||||
|
License (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
|
||||||
|
Copyright (c) 2006 Patrick Fitzgerald
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation files
|
||||||
|
(the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge,
|
||||||
|
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
==================================================*/
|
||||||
|
|
||||||
|
var tabberOptions = { 'onLoad': function(argsObj) {
|
||||||
|
if (jQuery.support.boxModel == false)
|
||||||
|
{
|
||||||
|
var w = $("#tab-main").width();
|
||||||
|
var h = $("#casefunctions").height();
|
||||||
|
|
||||||
|
//$(".tabberdiv").css("width",w);
|
||||||
|
//$(".tabberdiv").css("height",h);
|
||||||
|
$(".tabberdiv").css("width","100%");
|
||||||
|
$(".tabberdiv").css("height",h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function tabberObj(argsObj)
|
||||||
|
{
|
||||||
|
var arg; /* name of an argument to override */
|
||||||
|
|
||||||
|
/* Element for the main tabber div. If you supply this in argsObj,
|
||||||
|
then the init() method will be called.
|
||||||
|
*/
|
||||||
|
this.div = null;
|
||||||
|
|
||||||
|
/* Class of the main tabber div */
|
||||||
|
this.classMain = "tabber";
|
||||||
|
|
||||||
|
/* Rename classMain to classMainLive after tabifying
|
||||||
|
(so a different style can be applied)
|
||||||
|
*/
|
||||||
|
this.classMainLive = "tabberlive";
|
||||||
|
|
||||||
|
/* Class of each DIV that contains a tab */
|
||||||
|
this.classTab = "tabbertab";
|
||||||
|
|
||||||
|
/* Class to indicate which tab should be active on startup */
|
||||||
|
this.classTabDefault = "tabbertabdefault";
|
||||||
|
|
||||||
|
/* Class for the navigation UL */
|
||||||
|
this.classNav = "tabbernav";
|
||||||
|
|
||||||
|
/* When a tab is to be hidden, instead of setting display='none', we
|
||||||
|
set the class of the div to classTabHide. In your screen
|
||||||
|
stylesheet you should set classTabHide to display:none. In your
|
||||||
|
print stylesheet you should set display:block to ensure that all
|
||||||
|
the information is printed.
|
||||||
|
*/
|
||||||
|
this.classTabHide = "tabbertabhide";
|
||||||
|
|
||||||
|
/* Class to set the navigation LI when the tab is active, so you can
|
||||||
|
use a different style on the active tab.
|
||||||
|
*/
|
||||||
|
this.classNavActive = "tabberactive";
|
||||||
|
|
||||||
|
/* Elements that might contain the title for the tab, only used if a
|
||||||
|
title is not specified in the TITLE attribute of DIV classTab.
|
||||||
|
*/
|
||||||
|
this.titleElements = ['h2','h3','h4','h5','h6'];
|
||||||
|
|
||||||
|
/* Should we strip out the HTML from the innerHTML of the title elements?
|
||||||
|
This should usually be true.
|
||||||
|
*/
|
||||||
|
this.titleElementsStripHTML = true;
|
||||||
|
|
||||||
|
/* If the user specified the tab names using a TITLE attribute on
|
||||||
|
the DIV, then the browser will display a tooltip whenever the
|
||||||
|
mouse is over the DIV. To prevent this tooltip, we can remove the
|
||||||
|
TITLE attribute after getting the tab name.
|
||||||
|
*/
|
||||||
|
this.removeTitle = true;
|
||||||
|
|
||||||
|
/* If you want to add an id to each link set this to true */
|
||||||
|
this.addLinkId = false;
|
||||||
|
|
||||||
|
/* If addIds==true, then you can set a format for the ids.
|
||||||
|
<tabberid> will be replaced with the id of the main tabber div.
|
||||||
|
<tabnumberzero> will be replaced with the tab number
|
||||||
|
(tab numbers starting at zero)
|
||||||
|
<tabnumberone> will be replaced with the tab number
|
||||||
|
(tab numbers starting at one)
|
||||||
|
<tabtitle> will be replaced by the tab title
|
||||||
|
(with all non-alphanumeric characters removed)
|
||||||
|
*/
|
||||||
|
this.linkIdFormat = '<tabberid>nav<tabnumberone>';
|
||||||
|
|
||||||
|
/* You can override the defaults listed above by passing in an object:
|
||||||
|
var mytab = new tabber({property:value,property:value});
|
||||||
|
*/
|
||||||
|
for (arg in argsObj) { this[arg] = argsObj[arg]; }
|
||||||
|
|
||||||
|
/* Create regular expressions for the class names; Note: if you
|
||||||
|
change the class names after a new object is created you must
|
||||||
|
also change these regular expressions.
|
||||||
|
*/
|
||||||
|
this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
|
||||||
|
this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
|
||||||
|
this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
|
||||||
|
this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
|
||||||
|
this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');
|
||||||
|
|
||||||
|
/* Array of objects holding info about each tab */
|
||||||
|
this.tabs = new Array();
|
||||||
|
|
||||||
|
/* If the main tabber div was specified, call init() now */
|
||||||
|
if (this.div) {
|
||||||
|
|
||||||
|
this.init(this.div);
|
||||||
|
|
||||||
|
/* We don't need the main div anymore, and to prevent a memory leak
|
||||||
|
in IE, we must remove the circular reference between the div
|
||||||
|
and the tabber object. */
|
||||||
|
this.div = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
Methods for tabberObj
|
||||||
|
--------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.init = function(e)
|
||||||
|
{
|
||||||
|
/* Set up the tabber interface.
|
||||||
|
|
||||||
|
e = element (the main containing div)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
init(document.getElementById('mytabberdiv'))
|
||||||
|
*/
|
||||||
|
|
||||||
|
var
|
||||||
|
childNodes, /* child nodes of the tabber div */
|
||||||
|
i, i2, /* loop indices */
|
||||||
|
t, /* object to store info about a single tab */
|
||||||
|
defaultTab=0, /* which tab to select by default */
|
||||||
|
DOM_ul, /* tabbernav list */
|
||||||
|
DOM_li, /* tabbernav list item */
|
||||||
|
DOM_a, /* tabbernav link */
|
||||||
|
aId, /* A unique id for DOM_a */
|
||||||
|
headingElement; /* searching for text to use in the tab */
|
||||||
|
|
||||||
|
/* Verify that the browser supports DOM scripting */
|
||||||
|
if (!document.getElementsByTagName) { return false; }
|
||||||
|
|
||||||
|
/* If the main DIV has an ID then save it. */
|
||||||
|
if (e.id) {
|
||||||
|
this.id = e.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the tabs array (but it should normally be empty) */
|
||||||
|
this.tabs.length = 0;
|
||||||
|
|
||||||
|
/* Loop through an array of all the child nodes within our tabber element. */
|
||||||
|
childNodes = e.childNodes;
|
||||||
|
for(i=0; i < childNodes.length; i++) {
|
||||||
|
|
||||||
|
/* Find the nodes where class="tabbertab" */
|
||||||
|
if(childNodes[i].className &&
|
||||||
|
childNodes[i].className.match(this.REclassTab)) {
|
||||||
|
|
||||||
|
/* Create a new object to save info about this tab */
|
||||||
|
t = new Object();
|
||||||
|
|
||||||
|
/* Save a pointer to the div for this tab */
|
||||||
|
t.div = childNodes[i];
|
||||||
|
|
||||||
|
/* Add the new object to the array of tabs */
|
||||||
|
this.tabs[this.tabs.length] = t;
|
||||||
|
|
||||||
|
/* If the class name contains classTabDefault,
|
||||||
|
then select this tab by default.
|
||||||
|
*/
|
||||||
|
if (childNodes[i].className.match(this.REclassTabDefault)) {
|
||||||
|
defaultTab = this.tabs.length-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a new UL list to hold the tab headings */
|
||||||
|
DOM_ul = document.createElement("ul");
|
||||||
|
DOM_ul.className = this.classNav;
|
||||||
|
|
||||||
|
DOM_ul.id = 'tabs_menu';
|
||||||
|
|
||||||
|
/* Loop through each tab we found */
|
||||||
|
for (i=0; i < this.tabs.length; i++) {
|
||||||
|
|
||||||
|
t = this.tabs[i];
|
||||||
|
|
||||||
|
/* Get the label to use for this tab:
|
||||||
|
From the title attribute on the DIV,
|
||||||
|
Or from one of the this.titleElements[] elements,
|
||||||
|
Or use an automatically generated number.
|
||||||
|
*/
|
||||||
|
t.headingText = t.div.title;
|
||||||
|
|
||||||
|
/* Remove the title attribute to prevent a tooltip from appearing */
|
||||||
|
if (this.removeTitle) { t.div.title = ''; }
|
||||||
|
|
||||||
|
if (!t.headingText) {
|
||||||
|
|
||||||
|
/* Title was not defined in the title of the DIV,
|
||||||
|
So try to get the title from an element within the DIV.
|
||||||
|
Go through the list of elements in this.titleElements
|
||||||
|
(typically heading elements ['h2','h3','h4'])
|
||||||
|
*/
|
||||||
|
for (i2=0; i2<this.titleElements.length; i2++) {
|
||||||
|
headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
|
||||||
|
if (headingElement) {
|
||||||
|
t.headingText = headingElement.innerHTML;
|
||||||
|
if (this.titleElementsStripHTML) {
|
||||||
|
t.headingText.replace(/<br>/gi," ");
|
||||||
|
t.headingText = t.headingText.replace(/<[^>]+>/g,"");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!t.headingText) {
|
||||||
|
/* Title was not found (or is blank) so automatically generate a
|
||||||
|
number for the tab.
|
||||||
|
*/
|
||||||
|
t.headingText = i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a list element for the tab */
|
||||||
|
DOM_li = document.createElement("li");
|
||||||
|
DOM_li.id = 'tab_li_'+i;
|
||||||
|
|
||||||
|
|
||||||
|
/* Save a reference to this list item so we can later change it to
|
||||||
|
the "active" class */
|
||||||
|
t.li = DOM_li;
|
||||||
|
|
||||||
|
/* Create a link to activate the tab */
|
||||||
|
DOM_a = document.createElement("a");
|
||||||
|
DOM_a.appendChild(document.createTextNode(t.headingText));
|
||||||
|
DOM_a.href = "javascript:void(null);";
|
||||||
|
DOM_a.title = t.headingText;
|
||||||
|
DOM_a.onclick = this.navClick;
|
||||||
|
|
||||||
|
/* Add some properties to the link so we can identify which tab
|
||||||
|
was clicked. Later the navClick method will need this.
|
||||||
|
*/
|
||||||
|
DOM_a.tabber = this;
|
||||||
|
DOM_a.tabberIndex = i;
|
||||||
|
|
||||||
|
/* Do we need to add an id to DOM_a? */
|
||||||
|
if (this.addLinkId && this.linkIdFormat) {
|
||||||
|
|
||||||
|
/* Determine the id name */
|
||||||
|
aId = this.linkIdFormat;
|
||||||
|
aId = aId.replace(/<tabberid>/gi, this.id);
|
||||||
|
aId = aId.replace(/<tabnumberzero>/gi, i);
|
||||||
|
aId = aId.replace(/<tabnumberone>/gi, i+1);
|
||||||
|
aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));
|
||||||
|
|
||||||
|
DOM_a.id = aId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the link to the list element */
|
||||||
|
DOM_li.appendChild(DOM_a);
|
||||||
|
|
||||||
|
/* Add the list element to the list */
|
||||||
|
DOM_ul.appendChild(DOM_li);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the UL list to the beginning of the tabber div */
|
||||||
|
e.insertBefore(DOM_ul, e.firstChild);
|
||||||
|
|
||||||
|
/* Make the tabber div "live" so different CSS can be applied */
|
||||||
|
e.className = e.className.replace(this.REclassMain, this.classMainLive);
|
||||||
|
|
||||||
|
/* Activate the default tab, and do not call the onclick handler */
|
||||||
|
this.tabShow(defaultTab);
|
||||||
|
|
||||||
|
/* If the user specified an onLoad function, call it now. */
|
||||||
|
if (typeof this.onLoad == 'function') {
|
||||||
|
this.onLoad({tabber:this});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.navClick = function(event)
|
||||||
|
{
|
||||||
|
/* This method should only be called by the onClick event of an <A>
|
||||||
|
element, in which case we will determine which tab was clicked by
|
||||||
|
examining a property that we previously attached to the <A>
|
||||||
|
element.
|
||||||
|
|
||||||
|
Since this was triggered from an onClick event, the variable
|
||||||
|
"this" refers to the <A> element that triggered the onClick
|
||||||
|
event (and not to the tabberObj).
|
||||||
|
|
||||||
|
When tabberObj was initialized, we added some extra properties
|
||||||
|
to the <A> element, for the purpose of retrieving them now. Get
|
||||||
|
the tabberObj object, plus the tab number that was clicked.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var
|
||||||
|
rVal, /* Return value from the user onclick function */
|
||||||
|
a, /* element that triggered the onclick event */
|
||||||
|
self, /* the tabber object */
|
||||||
|
tabberIndex, /* index of the tab that triggered the event */
|
||||||
|
onClickArgs; /* args to send the onclick function */
|
||||||
|
|
||||||
|
a = this;
|
||||||
|
if (!a.tabber) { return false; }
|
||||||
|
|
||||||
|
self = a.tabber;
|
||||||
|
tabberIndex = a.tabberIndex;
|
||||||
|
|
||||||
|
/* Remove focus from the link because it looks ugly.
|
||||||
|
I don't know if this is a good idea...
|
||||||
|
*/
|
||||||
|
a.blur();
|
||||||
|
|
||||||
|
/* If the user specified an onClick function, call it now.
|
||||||
|
If the function returns false then do not continue.
|
||||||
|
*/
|
||||||
|
if (typeof self.onClick == 'function') {
|
||||||
|
|
||||||
|
onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};
|
||||||
|
|
||||||
|
/* IE uses a different way to access the event object */
|
||||||
|
if (!event) { onClickArgs.event = window.event; }
|
||||||
|
|
||||||
|
rVal = self.onClick(onClickArgs);
|
||||||
|
if (rVal === false) { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
self.tabShow(tabberIndex);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.tabHideAll = function()
|
||||||
|
{
|
||||||
|
var i; /* counter */
|
||||||
|
|
||||||
|
/* Hide all tabs and make all navigation links inactive */
|
||||||
|
for (i = 0; i < this.tabs.length; i++) {
|
||||||
|
this.tabHide(i);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.tabHide = function(tabberIndex)
|
||||||
|
{
|
||||||
|
var div;
|
||||||
|
|
||||||
|
if (!this.tabs[tabberIndex]) { return false; }
|
||||||
|
|
||||||
|
/* Hide a single tab and make its navigation link inactive */
|
||||||
|
div = this.tabs[tabberIndex].div;
|
||||||
|
|
||||||
|
/* Hide the tab contents by adding classTabHide to the div */
|
||||||
|
if (!div.className.match(this.REclassTabHide)) {
|
||||||
|
div.className += ' ' + this.classTabHide;
|
||||||
|
}
|
||||||
|
this.navClearActive(tabberIndex);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.tabShow = function(tabberIndex)
|
||||||
|
{
|
||||||
|
/* Show the tabberIndex tab and hide all the other tabs */
|
||||||
|
|
||||||
|
var div;
|
||||||
|
|
||||||
|
if (!this.tabs[tabberIndex]) { return false; }
|
||||||
|
|
||||||
|
/* Hide all the tabs first */
|
||||||
|
this.tabHideAll();
|
||||||
|
|
||||||
|
/* Get the div that holds this tab */
|
||||||
|
div = this.tabs[tabberIndex].div;
|
||||||
|
|
||||||
|
/* Remove classTabHide from the div */
|
||||||
|
div.className = div.className.replace(this.REclassTabHide, '');
|
||||||
|
|
||||||
|
/* Mark this tab navigation link as "active" */
|
||||||
|
this.navSetActive(tabberIndex);
|
||||||
|
|
||||||
|
/* If the user specified an onTabDisplay function, call it now. */
|
||||||
|
if (typeof this.onTabDisplay == 'function') {
|
||||||
|
this.onTabDisplay({'tabber':this, 'index':tabberIndex});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
tabberObj.prototype.navSetActive = function(tabberIndex)
|
||||||
|
{
|
||||||
|
/* Note: this method does *not* enforce the rule
|
||||||
|
that only one nav item can be active at a time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Set classNavActive for the navigation list item */
|
||||||
|
this.tabs[tabberIndex].li.className = this.classNavActive;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
tabberObj.prototype.navClearActive = function(tabberIndex)
|
||||||
|
{
|
||||||
|
/* Note: this method does *not* enforce the rule
|
||||||
|
that one nav should always be active.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Remove classNavActive from the navigation list item */
|
||||||
|
this.tabs[tabberIndex].li.className = '';
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*==================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
function tabberAutomatic(tabberArgs)
|
||||||
|
{
|
||||||
|
/* This function finds all DIV elements in the document where
|
||||||
|
class=tabber.classMain, then converts them to use the tabber
|
||||||
|
interface.
|
||||||
|
|
||||||
|
tabberArgs = an object to send to "new tabber()"
|
||||||
|
*/
|
||||||
|
var
|
||||||
|
tempObj, /* Temporary tabber object */
|
||||||
|
divs, /* Array of all divs on the page */
|
||||||
|
i; /* Loop index */
|
||||||
|
|
||||||
|
if (!tabberArgs) { tabberArgs = {}; }
|
||||||
|
|
||||||
|
/* Create a tabber object so we can get the value of classMain */
|
||||||
|
tempObj = new tabberObj(tabberArgs);
|
||||||
|
|
||||||
|
/* Find all DIV elements in the document that have class=tabber */
|
||||||
|
|
||||||
|
/* First get an array of all DIV elements and loop through them */
|
||||||
|
divs = document.getElementsByTagName("div");
|
||||||
|
for (i=0; i < divs.length; i++) {
|
||||||
|
|
||||||
|
/* Is this DIV the correct class? */
|
||||||
|
if (divs[i].className &&
|
||||||
|
divs[i].className.match(tempObj.REclassMain)) {
|
||||||
|
|
||||||
|
/* Now tabify the DIV */
|
||||||
|
tabberArgs.div = divs[i];
|
||||||
|
divs[i].tabber = new tabberObj(tabberArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*==================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
function tabberAutomaticOnLoad(tabberArgs)
|
||||||
|
{
|
||||||
|
/* This function adds tabberAutomatic to the window.onload event,
|
||||||
|
so it will run after the document has finished loading.
|
||||||
|
*/
|
||||||
|
var oldOnLoad;
|
||||||
|
|
||||||
|
if (!tabberArgs) { tabberArgs = {}; }
|
||||||
|
|
||||||
|
/* Taken from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */
|
||||||
|
|
||||||
|
oldOnLoad = window.onload;
|
||||||
|
if (typeof window.onload != 'function') {
|
||||||
|
window.onload = function() {
|
||||||
|
tabberAutomatic(tabberArgs);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
window.onload = function() {
|
||||||
|
oldOnLoad();
|
||||||
|
tabberAutomatic(tabberArgs);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*==================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */
|
||||||
|
|
||||||
|
if (typeof tabberOptions == 'undefined') {
|
||||||
|
|
||||||
|
tabberAutomaticOnLoad();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!tabberOptions['manualStartup']) {
|
||||||
|
tabberAutomaticOnLoad(tabberOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -95,7 +95,7 @@ if (limesurvey_percent_complete($case_id) == false)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
?>
|
?>
|
||||||
<p class='rsoption'><a href="rs_project_intro.php"><? echo T_("Yes - Continue"); ?></a></p>
|
<p class='rsoption'><a href="rs_project_intro_interface2.php"><? echo T_("Yes - Continue"); ?></a></p>
|
||||||
<?
|
<?
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -20,11 +20,11 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author Adam Zammit <adam.zammit@acspri.org.au>
|
* @author Adam Zammit <adam.zammit@deakin.edu.au>
|
||||||
* @copyright Australian Consortium for Social and Political Research Inc 2007,2008
|
* @copyright Deakin University 2007,2008
|
||||||
* @package queXS
|
* @package queXS
|
||||||
* @subpackage user
|
* @subpackage user
|
||||||
* @link http://www.acspri.org.au/ queXS was writen for Australian Consortium for Social and Political Research Incorporated (ACSPRI)
|
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
|
||||||
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -67,7 +67,7 @@ if (AUTO_LOGOUT_MINUTES !== false)
|
|||||||
$js[] = "js/childnap.js";
|
$js[] = "js/childnap.js";
|
||||||
}
|
}
|
||||||
|
|
||||||
xhtml_head(T_("Status"),true,array("css/status.css"),$js);
|
xhtml_head(T_("Status"),true,array("css/status_interface2.css"),$js);
|
||||||
|
|
||||||
$ca = get_call_attempt($operator_id,false);
|
$ca = get_call_attempt($operator_id,false);
|
||||||
if ($ca)
|
if ($ca)
|
||||||
@@ -76,7 +76,7 @@ if ($ca)
|
|||||||
$case_id = get_case_id($operator_id);
|
$case_id = get_case_id($operator_id);
|
||||||
$fname = get_respondent_variable("firstName",$respondent_id);
|
$fname = get_respondent_variable("firstName",$respondent_id);
|
||||||
$lname = get_respondent_variable("lastName",$respondent_id);
|
$lname = get_respondent_variable("lastName",$respondent_id);
|
||||||
print "<p>" . T_("Name") . ": $fname $lname</p>";
|
print "<p class='text'>" . T_("Name") . ": $fname $lname</p>";
|
||||||
|
|
||||||
$appointment = is_on_appointment($ca);
|
$appointment = is_on_appointment($ca);
|
||||||
|
|
||||||
@@ -114,31 +114,51 @@ if ($ca)
|
|||||||
|
|
||||||
if (!$call_id)
|
if (!$call_id)
|
||||||
{
|
{
|
||||||
if ($appointment)
|
$sql = "SELECT c. *
|
||||||
|
FROM contact_phone AS c
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT contact_phone.contact_phone_id
|
||||||
|
FROM contact_phone
|
||||||
|
LEFT JOIN `call` ON ( call.contact_phone_id = contact_phone.contact_phone_id )
|
||||||
|
LEFT JOIN outcome ON ( call.outcome_id = outcome.outcome_id )
|
||||||
|
WHERE contact_phone.case_id = '$case_id'
|
||||||
|
AND outcome.tryagain =0
|
||||||
|
) AS l ON l.contact_phone_id = c.contact_phone_id
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT contact_phone_id
|
||||||
|
FROM `call`
|
||||||
|
WHERE call_attempt_id = '$ca'
|
||||||
|
AND outcome_id != 18
|
||||||
|
) as ca on ca.contact_phone_id = c.contact_phone_id
|
||||||
|
WHERE c.case_id = '$case_id'
|
||||||
|
AND l.contact_phone_id IS NULL
|
||||||
|
AND ca.contact_phone_id IS NULL
|
||||||
|
order by c.priority ASC";
|
||||||
|
|
||||||
|
$numsa = $db->GetRow($sql);
|
||||||
|
|
||||||
|
if (!empty($numsa))
|
||||||
{
|
{
|
||||||
//create a call on the appointment number
|
if ($appointment)
|
||||||
$sql = "SELECT cp.*
|
{
|
||||||
FROM contact_phone as cp, appointment as a
|
//create a call on the appointment number
|
||||||
WHERE cp.case_id = '$case_id'
|
$sql = "SELECT cp.*
|
||||||
AND a.appointment_id = '$appointment'
|
FROM contact_phone as cp, appointment as a
|
||||||
AND a.contact_phone_id = cp.contact_phone_id";
|
WHERE cp.case_id = '$case_id'
|
||||||
|
AND a.appointment_id = '$appointment'
|
||||||
|
AND a.contact_phone_id = cp.contact_phone_id";
|
||||||
|
|
||||||
|
$rs = $db->GetRow($sql);
|
||||||
|
$contact_phone_id = $rs['contact_phone_id'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$contact_phone_id = $numsa['contact_phone_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$call_id = get_call($operator_id,$respondent_id,$contact_phone_id,true);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
//create a call on the first available number by priority
|
|
||||||
$sql = "SELECT *
|
|
||||||
FROM contact_phone
|
|
||||||
WHERE case_id = '$case_id'
|
|
||||||
ORDER BY priority ASC
|
|
||||||
LIMIT 1";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$rs = $db->GetRow($sql);
|
|
||||||
$contact_phone_id = $rs['contact_phone_id'];
|
|
||||||
|
|
||||||
$call_id = get_call($operator_id,$respondent_id,$contact_phone_id,true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($appointment)
|
if ($appointment)
|
||||||
@@ -157,48 +177,52 @@ if ($ca)
|
|||||||
//if (missed_appointment($ca)) print "<div class='tobecoded statusbutton'>" . T_("MISSED") . "</div>";
|
//if (missed_appointment($ca)) print "<div class='tobecoded statusbutton'>" . T_("MISSED") . "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($call_id)
|
||||||
$sql = "SELECT c.*, CASE WHEN c.contact_phone_id = ccc.contact_phone_id THEN 'checked=\"checked\"' ELSE '' END as checked
|
|
||||||
FROM contact_phone as c
|
|
||||||
LEFT JOIN `call` as ccc ON (ccc.call_id = '$call_id')
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT contact_phone.contact_phone_id
|
|
||||||
FROM contact_phone
|
|
||||||
LEFT JOIN `call` ON ( call.contact_phone_id = contact_phone.contact_phone_id )
|
|
||||||
LEFT JOIN outcome ON ( call.outcome_id = outcome.outcome_id )
|
|
||||||
WHERE contact_phone.case_id = '$case_id'
|
|
||||||
AND outcome.tryagain =0
|
|
||||||
) AS l ON l.contact_phone_id = c.contact_phone_id
|
|
||||||
LEFT JOIN
|
|
||||||
(
|
|
||||||
SELECT contact_phone_id
|
|
||||||
FROM `call`
|
|
||||||
WHERE call_attempt_id = '$ca'
|
|
||||||
AND outcome_id != 18
|
|
||||||
AND outcome_id != 0
|
|
||||||
) as ca on ca.contact_phone_id = c.contact_phone_id
|
|
||||||
WHERE c.case_id = '$case_id'
|
|
||||||
AND l.contact_phone_id IS NULL
|
|
||||||
AND ca.contact_phone_id IS NULL";
|
|
||||||
|
|
||||||
|
|
||||||
$rs = $db->GetAll($sql);
|
|
||||||
|
|
||||||
|
|
||||||
//Display all available numbers for this case as a list of radio buttons
|
|
||||||
//By default, the selected radio button should have a "call" started for it
|
|
||||||
//When then next one clicked, it should bring up call screen if no outcome otherwise start new call
|
|
||||||
print "<div>";
|
|
||||||
foreach($rs as $r)
|
|
||||||
{
|
{
|
||||||
print "<form method='post' action='?'><div>";
|
$sql = "SELECT c.*, CASE WHEN c.contact_phone_id = ccc.contact_phone_id THEN 'checked=\"checked\"' ELSE '' END as checked
|
||||||
print "<input onclick='this.form.submit();' type='radio' name='contactphone' value='{$r['contact_phone_id']}' id='contactphone{$r['contact_phone_id']}' {$r['checked']}/>";
|
FROM contact_phone as c
|
||||||
print "<label for='contactphone{$r['contact_phone_id']}'>{$r['phone']}";
|
LEFT JOIN `call` as ccc ON (ccc.call_id = '$call_id')
|
||||||
if (!empty($r['description'])) print " - " . $r['description'];
|
LEFT JOIN (
|
||||||
print "</label>";
|
SELECT contact_phone.contact_phone_id
|
||||||
print "</div></form>";
|
FROM contact_phone
|
||||||
|
LEFT JOIN `call` ON ( call.contact_phone_id = contact_phone.contact_phone_id )
|
||||||
|
LEFT JOIN outcome ON ( call.outcome_id = outcome.outcome_id )
|
||||||
|
WHERE contact_phone.case_id = '$case_id'
|
||||||
|
AND outcome.tryagain =0
|
||||||
|
) AS l ON l.contact_phone_id = c.contact_phone_id
|
||||||
|
LEFT JOIN
|
||||||
|
(
|
||||||
|
SELECT contact_phone_id
|
||||||
|
FROM `call`
|
||||||
|
WHERE call_attempt_id = '$ca'
|
||||||
|
AND outcome_id != 18
|
||||||
|
AND outcome_id != 0
|
||||||
|
) as ca on ca.contact_phone_id = c.contact_phone_id
|
||||||
|
WHERE c.case_id = '$case_id'
|
||||||
|
AND l.contact_phone_id IS NULL
|
||||||
|
AND ca.contact_phone_id IS NULL";
|
||||||
|
|
||||||
|
|
||||||
|
$rs = $db->GetAll($sql);
|
||||||
|
|
||||||
|
|
||||||
|
//Display all available numbers for this case as a list of radio buttons
|
||||||
|
//By default, the selected radio button should have a "call" started for it
|
||||||
|
//When then next one clicked, it should bring up call screen if no outcome otherwise start new call
|
||||||
|
print "<div>";
|
||||||
|
foreach($rs as $r)
|
||||||
|
{
|
||||||
|
print "<form method='post' action='?'><div class='text'>";
|
||||||
|
print "<input onclick='this.form.submit();' type='radio' name='contactphone' value='{$r['contact_phone_id']}' id='contactphone{$r['contact_phone_id']}' {$r['checked']}/>";
|
||||||
|
print "<label for='contactphone{$r['contact_phone_id']}'>{$r['phone']}";
|
||||||
|
if (!empty($r['description'])) print " - " . $r['description'];
|
||||||
|
print "</label>";
|
||||||
|
print "</div></form><br />";
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
}
|
}
|
||||||
print "</div>";
|
else
|
||||||
|
print "<div class='text'>" . T_("No more numbers to call") . "</div>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
print "<div class='text'>" . T_("No more numbers to call") . "</div>";
|
print "<div class='text'>" . T_("No more numbers to call") . "</div>";
|
||||||
|
|||||||
@@ -20,11 +20,11 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @author Adam Zammit <adam.zammit@acspri.org.au>
|
* @author Adam Zammit <adam.zammit@deakin.edu.au>
|
||||||
* @copyright Australian Consortium for Social and Political Research Inc 2007,2008
|
* @copyright Deakin University 2007,2008
|
||||||
* @package queXS
|
* @package queXS
|
||||||
* @subpackage user
|
* @subpackage user
|
||||||
* @link http://www.acspri.org.au/ queXS was writen for Australian Consortium for Social and Political Research Incorporated (ACSPRI)
|
* @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility
|
||||||
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
* @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@@ -46,36 +46,15 @@ include_once("functions/functions.xhtml.php");
|
|||||||
include_once("functions/functions.operator.php");
|
include_once("functions/functions.operator.php");
|
||||||
|
|
||||||
|
|
||||||
xhtml_head(T_("queXS"), false, array("css/index_interface2.css","css/tabber.css"),array("js/tabber.js"));
|
xhtml_head(T_("queXS"), false, array("css/index_interface2.css","css/tabber_interface2.css"),array("js/tabber_interface2.js"));
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
<div id="header_line"></div>
|
||||||
|
<ul class="wait_wrapper">
|
||||||
|
<li class="wait_li_1"><a href="index_interface2.php"><? echo T_("Get a new case"); ?> <img src="css/images/play.jpg" /></a></li>
|
||||||
|
<li class="wait_li_2"><a href="endwork.php"><? echo T_("End work"); ?> <img src="css/images/end.jpg" /></a></li>
|
||||||
|
|
||||||
<div id="casefunctions">
|
</ul>
|
||||||
<div class='box'><a href="index_interface2.php"><? echo T_("Get a new case"); ?></a></div>
|
|
||||||
<div class='box'><a href="endwork.php"><? echo T_("End work"); ?></a></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="content">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="respondent">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="qstatus">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="calllist">
|
|
||||||
<div class="tabber" id="tab-main">
|
|
||||||
<div class="tabbertab">
|
|
||||||
<h2><? echo T_("Info"); ?></h2>
|
|
||||||
<div id="div-info" class="tabberdiv"><?xhtml_object("info.php","main-info");?></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<?
|
<?
|
||||||
|
|
||||||
|
|||||||