00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00031 require_once (PATH_t3lib."class.t3lib_tceforms.php");
00032 require_once (PATH_t3lib."class.t3lib_tcemain.php");
00033
00034 class tx_systodos extends mod_user_task {
00035 var $todoTypesCache = array();
00036 var $insCounter=0;
00037
00038 function overview_main(&$pObj) {
00039 $icon = '<img src="'.$this->backPath.t3lib_extMgm::extRelPath("sys_todos").'ext_icon.gif" width=18 height=16 class="absmiddle">';
00040 $content.=$pObj->doc->section($icon." ".$this->headLink("tx_systodos",1),$this->renderTaskList(),1,1,0,1);
00041 return $content;
00042 }
00043 function main() {
00044 global $SOBE,$BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
00045
00046 return $this->renderTasks();
00047 }
00048
00049
00050
00051
00052
00053
00054 function renderTaskList() {
00055 global $LANG;
00056
00057 $res = $this->exec_todos_getQueryForTodoRels(" AND sys_todos_users_mm.finished_instance=0");
00058 $lines=array();
00059 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00060 $lines[]='<nobr>'.$this->todos_link('<img src="'.$this->backPath.'gfx/todoicon_'.($row["cruser_id"]==$this->BE_USER->user["uid"]?"user":"group").'.gif" width="18" hspace=6 height="10" align=top border=0><strong>'.$this->fixed_lgd($row["title"]),-$row["mm_uid"]).'</strong></nobr><BR>';
00061 }
00062
00063 $res = $this->exec_todos_getQueryForTodoRels("", "count(*)", 1);
00064 list($mc) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
00065 $lines[]='<nobr>'.$this->todos_link(sprintf($LANG->getLL("todos_index_msgs"),$mc),"0").'</nobr><BR>';
00066
00067 $out = implode("",$lines);
00068 return $out;
00069 }
00070 function todos_link($str,$id) {
00071 $str='<a href="index.php?SET[function]=tx_systodos&sys_todos_uid='.$id.'#todo" target="list_frame" onClick="this.blur();">'.$str.'</a>';
00072 return $str;
00073 }
00074 function tasks_makeTargetSelector($be_user_Array,$be_group_Array,$type,$returnOptsOnly=0) {
00075 global $LANG;
00076
00077 $opt=array();
00078 reset($be_user_Array);
00079 $opt[]='<option value="'.$this->BE_USER->user["uid"].'">'.$this->BE_USER->user["username"].' ['.$LANG->getLL("lSelf").']</option>';
00080 while(list($uid,$dat)=each($be_user_Array)) {
00081 if ($uid!=$this->BE_USER->user["uid"]) {
00082 $opt[]='<option value="'.$uid.'"'.($dat["uid"]==$this->BE_USER->user["uid"]?" selected":"").'>'.htmlspecialchars($dat["username"].($dat["uid"]==$this->BE_USER->user["uid"]?' ['.$LANG->getLL("lSelf").']':' ('.$dat["realName"].')')).'</option>';
00083 }
00084 }
00085 if (count($be_group_Array)) {
00086 $opt[]='<option value="0">'.$LANG->getLL("listSeparator_Groups").'</option>';
00087 reset($be_group_Array);
00088 while(list($uid,$dat)=each($be_group_Array)) {
00089 $opt[]='<option value="-'.$uid.'">'.htmlspecialchars($dat["title"]).'</option>';
00090 }
00091 }
00092 if ($returnOptsOnly) return $opt;
00093 return array($LANG->getLL("todos_target").": ", '<select name="data[sys_todos]['.$type.'][target_user]">'.implode("",$opt).'</select>');
00094 }
00095 function renderTasks() {
00096 global $LANG;
00097 $theCode="";
00098
00099
00100 $tUid = intval(t3lib_div::_GP("sys_todos_uid"));
00101 $this->pObj->doc->tableLayout = Array (
00102 "defRow" => Array (
00103 "0" => Array('<TD valign=top nowrap>','</td>'),
00104 "defCol" => Array('<td valign="top" width=99%>','</td>')
00105 )
00106 );
00107 $this->pObj->doc->table_TR = '<TR class="bgColor-10">';
00108 $this->pObj->doc->table_TABLE = '<TABLE border=0 cellspacing=1 cellpadding=2 width=100%>';
00109
00110 $this->todos_processIncoming($tUid);
00111
00112
00113 $this->getUserAndGroupArrays();
00114
00115
00116
00117 $todoTypes=array();
00118 $todoTypes["plain"]='['.$LANG->getLL("todos_plain").']';
00119 if (t3lib_extMgm::isLoaded("sys_workflows")) {
00120 if ($this->BE_USER->isAdmin()) {
00121 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_workflows', 'sys_workflows.pid=0', '', 'sys_workflows.title');
00122 } else {
00123 $res = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
00124 "sys_workflows.*",
00125 "sys_workflows",
00126 "sys_workflows_algr_mm",
00127 "be_groups",
00128 "AND be_groups.uid IN (".($this->BE_USER->groupList?$this->BE_USER->groupList:0).")
00129 AND sys_workflows.pid=0
00130 AND sys_workflows.hidden=0",
00131 'sys_workflows.uid',
00132 'sys_workflows.title'
00133 );
00134 }
00135 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00136 $todoTypes["wf_".$row["uid"]]=$row["title"];
00137 }
00138 }
00139
00140
00141 $theCode.= $this->todos_displayLists($todoTypes,$tUid);
00142
00143
00144 if ($tUid) {
00145 $theCode.= $this->todos_displayTodo($todoTypes,$tUid);
00146 }
00147
00148
00149 $theCode.= $this->todos_createForm($todoTypes);
00150
00151 return $theCode;
00152 }
00153 function todos_finalizeWorkflow($workflowRecord,$relRecord) {
00154 global $TCA;
00155 list($table,$uid)=explode(":",$relRecord["rec_reference"]);
00156
00157
00158
00159
00160 if ($workflowRecord["tablename"]==$table && $TCA[$table]) {
00161 $itemRecord = t3lib_BEfunc::getRecord($table,$uid);
00162
00163 if (is_array($itemRecord)) {
00164 $dataArr=array();
00165 $cmdArr=array();
00166
00167
00168 if ($table=="pages" && $workflowRecord["final_set_perms"]) {
00169 $dataArr[$table][$uid]["perms_userid"] = $workflowRecord["final_perms_userid"];
00170 $dataArr[$table][$uid]["perms_groupid"] = $workflowRecord["final_perms_groupid"];
00171 $dataArr[$table][$uid]["perms_user"] = $workflowRecord["final_perms_user"];
00172 $dataArr[$table][$uid]["perms_group"] = $workflowRecord["final_perms_group"];
00173 $dataArr[$table][$uid]["perms_everybody"] = $workflowRecord["final_perms_everybody"];
00174 }
00175
00176
00177 if ($workflowRecord["final_unhide"]) {
00178 $hCol = is_array($TCA[$table]["ctrl"]["enablecolumns"]) ? $TCA[$table]["ctrl"]["enablecolumns"]["disabled"] : "";
00179 if ($hCol) {
00180 $dataArr[$table][$uid][$hCol]=0;
00181 }
00182 }
00183
00184
00185 list($target_pid) = explode(",",$workflowRecord["final_target"]);
00186 $targetPage = t3lib_BEfunc::getRecord("pages",$target_pid);
00187 if (is_array($targetPage)) {
00188 $cmdArr[$table][$uid]["move"]=$targetPage["uid"];
00189 }
00190
00191
00192
00193
00194
00195 $tce = t3lib_div::makeInstance("t3lib_TCEmain");
00196 $tce->stripslashes_values=0;
00197 $tce->start($dataArr,$cmdArr,$this->BE_USER);
00198 $tce->admin=1;
00199 $tce->process_datamap();
00200 $tce->process_cmdmap();
00201 unset($tce);
00202
00203 return true;
00204 } else {
00205 debug("ERROR: The reference record was not there!");
00206 }
00207 } else {
00208 debug("ERROR: Strange thing, the table name was not valid!");
00209 }
00210 }
00211 function todos_beginWorkflow($workflowRecord) {
00212 global $TCA;
00213 list($working_area_pid) = explode(",",$workflowRecord["working_area"]);
00214 $table=$workflowRecord["tablename"];
00215 $workingPage = t3lib_BEfunc::getRecord("pages",$working_area_pid);
00216 if (is_array($workingPage) && $TCA[$table]) {
00217 $data[$table]["NEW"]=array();
00218 $data[$table]["NEW"]["pid"]=$workingPage["uid"];
00219
00220 $tce = t3lib_div::makeInstance("t3lib_TCEmain");
00221 $tce->stripslashes_values=0;
00222 $TCAdefaultOverride = $this->BE_USER->getTSConfigProp("TCAdefaults");
00223 if (is_array($TCAdefaultOverride)) {
00224 $tce->setDefaultsFromUserTS($TCAdefaultOverride);
00225 }
00226 $tce->start($data,array(),$this->BE_USER);
00227 $tce->admin=1;
00228 $tce->process_datamap();
00229
00230 if ($tce->substNEWwithIDs["NEW"]) {
00231 return $table.":".$tce->substNEWwithIDs["NEW"];
00232 }
00233 } else {
00234 debug("ERROR: No working area page for workflow is defined!");
00235 }
00236 }
00237 function todos_processIncoming($tUid) {
00238 global $LANG;
00239
00240
00241 $data = t3lib_div::_GP("data");
00242
00243
00244
00245
00246
00247
00248 if (t3lib_div::_GP("newStatus") && is_array($data["sys_todos_users_mm"])) {
00249 $RD_URL="";
00250 reset($data["sys_todos_users_mm"]);
00251 while(list($key)=each($data["sys_todos_users_mm"])) {
00252 $key = intval($key);
00253 $res = $this->exec_todos_getQueryForTodoRels(" AND sys_todos_users_mm.mm_uid=".$key, "sys_todos_users_mm.*,sys_todos.cruser_id,sys_todos.type", 1);
00254 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00255 if ($data["sys_todos_users_mm"][$key]["status"]["code"]>0) {
00256 $wF = $row["type"];
00257 if (substr($wF,0,3)=="wf_" && t3lib_extMgm::isLoaded("sys_workflows")) {
00258 $workflowRecord=t3lib_BEfunc::getRecord("sys_workflows",substr($wF,3));
00259 } else {unset($workflowRecord);}
00260
00261 $noUpdate=0;
00262
00263
00264 $status_log = unserialize($row["status_log"]);
00265 if (!is_array($status_log)) $status_log=array();
00266 $statLogDat = array(
00267 "code" => $data["sys_todos_users_mm"][$key]["status"]["code"],
00268 "issuer" => $GLOBALS["BE_USER"]->user["uid"],
00269 "tstamp" => time(),
00270 "uid_foreign_before" => $row["uid_foreign"],
00271 "comment" => $data["sys_todos_users_mm"][$key]["status"]["comment"]
00272 );
00273
00274 $field_values=array();
00275 $field_values["status"]=$data["sys_todos_users_mm"][$key]["status"]["code"];
00276 $field_values["tstamp"]=time();
00277 $field_values["is_read"]=0;
00278
00279
00280 switch($field_values["status"]) {
00281 case 1:
00282 break;
00283 case 2:
00284 if (is_array($workflowRecord) && $workflowRecord["tablename"] && !$row["rec_reference"]) {
00285 $recId = $this->todos_beginWorkflow($workflowRecord);
00286 if ($recId) {
00287 $field_values["rec_reference"]=$recId;
00288 $RD_URL = $this->getEditRedirectUrlForReference($recId);
00289 } else {
00290 debug("ERROR: The record was not created, so either the workflow is not properly configured or the user did not have permissions to create the record (check the system log for details if this is the case)");
00291 }
00292 } else {
00293 debug("ERROR: No workflow record found OR no tablename defined OR there was already a record reference in the record!");
00294 }
00295 break;
00296 case 3:
00297 $first=0;
00298
00299 if (t3lib_extMgm::isLoaded("sys_workflows") && is_array($workflowRecord) && $workflowRecord["tablename"]) {
00300 $revUsers = $this->todos_getReviewUsers($workflowRecord["uid"]);
00301 reset($revUsers);
00302 while(list($u_id)=each($revUsers)) {
00303
00304 if (!$first) $first=$u_id;
00305 if ($u_id == $data["sys_todos_users_mm"][$key]["status"]["newTarget"]) {
00306 $field_values["uid_foreign"]=$u_id;
00307 break;
00308 }
00309 }
00310
00311 }
00312 if (!$field_values["uid_foreign"]) {
00313 $field_values["uid_foreign"]= $first ? $first : $row["cruser_id"];
00314 }
00315 break;
00316 case 4:
00317 if (intval($data["sys_todos_users_mm"][$key]["status"]["newTarget"])) {
00318 $field_values["uid_foreign"]=$data["sys_todos_users_mm"][$key]["status"]["newTarget"];
00319 }
00320 break;
00321 case 5:
00322 $field_values["uid_foreign"]=$row["cruser_id"];
00323 break;
00324
00325
00326 case 100:
00327 if ($this->BE_USER->user["uid"]==$row["cruser_id"]) {
00328 $statLogDat["status_log_clear"]=1;
00329 } else {$noUpdate=1;}
00330 break;
00331 case 103:
00332 if ($this->BE_USER->user["uid"]==$row["cruser_id"]) {
00333 $field_values["uid_foreign"]=$row["cruser_id"];
00334 $field_values["finalized"] = $this->todos_finalizeWorkflow($workflowRecord,$row) ? 1 : 0;
00335 } else {$noUpdate=1;}
00336 break;
00337
00338
00339
00340
00341
00342
00343 case 102:
00344 if ($this->BE_USER->user["uid"]==$row["cruser_id"]) {
00345 $statLogDat["uid_foreign"] = $data["sys_todos_users_mm"][$key]["status"]["newTarget"];
00346
00347 $field_values = array(
00348 'uid_local' => $row['uid_local'],
00349 'uid_foreign' => $statLogDat['uid_foreign'],
00350 'status' => 102,
00351 'tstamp' => time(),
00352 'status_log' => serialize(array($statLogDat))
00353 );
00354
00355 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_todos_users_mm', $field_values);
00356
00357 $noUpdate = 1;
00358 }
00359 break;
00360 }
00361
00362 if (!$noUpdate) {
00363 if (isset($field_values["uid_foreign"])) $statLogDat["uid_foreign"] = $field_values["uid_foreign"];
00364 $status_log[]=$statLogDat;
00365 $field_values["status_log"]=serialize($status_log);
00366
00367 $GLOBALS['TYPO3_DB']->exec_UPDATEquery("sys_todos_users_mm", "mm_uid=".intval($key), $field_values);
00368 }
00369 }
00370
00371
00372 if (isset($data["sys_todos_users_mm"][$key]["finished_instance"]) && $this->BE_USER->user["uid"]==$row["cruser_id"]) {
00373
00374 $field_values = array(
00375 'finished_instance' => $data['sys_todos_users_mm'][$key]['finished_instance']?1:0
00376 );
00377 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('sys_todos_users_mm', 'mm_uid='.intval($key), $field_values);
00378 }
00379 }
00380 }
00381
00382
00383
00384 if ($RD_URL) {
00385 header("Location: ".t3lib_div::locationHeaderUrl($RD_URL));
00386 }
00387 }
00388
00389
00390
00391
00392 if (t3lib_div::_GP("create_todo") && is_array($data["sys_todos"])) {
00393 reset($data["sys_todos"]);
00394 $key = key($data["sys_todos"]);
00395 if ($key=="NEW") {
00396 if ($data["sys_todos"][$key]["target_user"] && $data["sys_todos"][$key]["type"] && $data["sys_todos"][$key]["title"]) {
00397
00398 $fields_values = array(
00399 'title' => $data['sys_todos'][$key]['title'],
00400 'type' => $data['sys_todos'][$key]['type'],
00401 'deadline' => $data['sys_todos'][$key]['deadline'],
00402 'description' => $data['sys_todos'][$key]['description'],
00403 'deleted' => 0,
00404 'finished' => 0,
00405 'tstamp' => time(),
00406 'crdate' => time(),
00407 'cruser_id' => $this->BE_USER->user['uid']
00408 );
00409 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_todos', $fields_values);
00410
00411
00412 if (!$GLOBALS['TYPO3_DB']->sql_error()) {
00413 $fields_values = array(
00414 'uid_local' => $GLOBALS['TYPO3_DB']->sql_insert_id(),
00415 'uid_foreign' => $data['sys_todos'][$key]['target_user'],
00416 'tstamp' => time()
00417 );
00418 $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_todos_users_mm', $fields_values);
00419 }
00420
00421
00422 $tempQ = FALSE;
00423 $emRec = array();
00424 if ($data["sys_todos"][$key]["target_user"]>0) {
00425 $tempQ = TRUE;
00426 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,username,realName,email', 'be_users', 'uid='.intval($data['sys_todos'][$key]['target_user']).t3lib_BEfunc::deleteClause('be_users'));
00427 }
00428 if ($data['sys_todos'][$key]['target_user']<0) {
00429 $tempQ = TRUE;
00430 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,username,realName,email', 'be_users', $GLOBALS['TYPO3_DB']->listQuery('usergroup_cached_list', abs($data['sys_todos'][$key]['target_user']), 'be_users').t3lib_BEfunc::deleteClause('be_users'));
00431 }
00432 if ($tempQ) {
00433 $sAE = t3lib_div::_GP('sendAsEmail');
00434 while($brow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00435 $sendM=0;
00436 if ($sAE && strstr($brow["email"],"@") && $brow["uid"]!=$this->BE_USER->user["uid"]) {
00437 $this->sendEmail($brow["email"],$data["sys_todos"][$key]["title"],$data["sys_todos"][$key]["description"]);
00438 $sendM=1;
00439 }
00440 $emRec[] = $brow["username"].($sendM ? " (".$brow["email"].")" : "");
00441 }
00442 }
00443 if (count($emRec)) {
00444 $emailList=implode("<BR> ",$emRec);
00445 $theCode.= $this->pObj->doc->section($LANG->getLL("todos_created"),$LANG->getLL("todos_created_msg")."<BR> ".$emailList,0,1,1);
00446 }
00447 } else {
00448
00449 }
00450 } else {
00451 $editRow = t3lib_BEfunc::getRecordRaw("sys_todos","uid=".$key);
00452 if (is_array($editRow) && $editRow["cruser_id"]==$this->BE_USER->user["uid"] && $data["sys_todos"][$key]["title"]) {
00453 $fields_values = array(
00454 'title' => $data['sys_todos'][$key]['title'],
00455 'deadline' => $data['sys_todos'][$key]['deadline'],
00456 'description' => $data['sys_todos'][$key]['description'],
00457 'tstamp' => time()
00458 );
00459 $GLOBALS['TYPO3_DB']->exec_UPDATEquery('sys_todos', 'uid='.intval($key), $fields_values);
00460 }
00461 }
00462 }
00463
00464
00465
00466
00467
00468 if (t3lib_div::_GP("marked_todos")) {
00469 $action = t3lib_div::_GP("marked_todos_action");
00470 $done = t3lib_div::_GP("DONE");
00471 if (is_array($done)) {
00472 while(list($uidKey,$value)=each($done)) {
00473 $uidKey = intval($uidKey);
00474 if ($uidKey<0) {
00475 $uidKey = abs($uidKey);
00476 $sys_todos_users_mm_row = t3lib_BEfunc::getRecordRaw("sys_todos_users_mm","mm_uid=".$uidKey);
00477 if (is_array($sys_todos_users_mm_row)) {
00478 $sys_todos_row = t3lib_BEfunc::getRecordRaw("sys_todos","uid=".intval($sys_todos_users_mm_row["uid_local"]));
00479 if (is_array($sys_todos_row) && $sys_todos_row["cruser_id"]==$this->BE_USER->user["uid"]) {
00480
00481 $fields_values = array(
00482 "finished_instance" => $value?1:0
00483 );
00484 if ($action==127 && $value) $fields_values["deleted"]=1;
00485
00486 $GLOBALS['TYPO3_DB']->exec_UPDATEquery("sys_todos_users_mm", "mm_uid=".intval($uidKey), $fields_values);
00487
00488
00489 $isNotDeleted = t3lib_BEfunc::getRecordRaw("sys_todos_users_mm","uid_local=".intval($sys_todos_row["uid"])." AND deleted=0");
00490 if (!is_array($isNotDeleted)) {
00491
00492 $fields_values = array(
00493 "finished" => 1,
00494 "deleted" => 1
00495 );
00496 $GLOBALS['TYPO3_DB']->exec_UPDATEquery("sys_todos", "uid=".intval($sys_todos_row["uid"]), $fields_values);
00497 }
00498 }
00499 }
00500
00501 } else {
00502 $sys_todos_row = t3lib_BEfunc::getRecordRaw("sys_todos","uid=".intval($uidKey));
00503 if (is_array($sys_todos_row) && $sys_todos_row["cruser_id"]==$this->BE_USER->user["uid"]) {
00504 $fields_values = array("finished" => $value?1:0);
00505 if ($action==127 && $value) $fields_values["deleted"] = 1;
00506
00507 $GLOBALS['TYPO3_DB']->exec_UPDATEquery("sys_todos", "uid=".$uidKey, $fields_values);
00508
00509
00510 if ($fields_values["deleted"]) {
00511 $inst_fields_values = array("deleted" => 1);
00512
00513
00514 $GLOBALS['TYPO3_DB']->exec_UPDATEquery("sys_todos_users_mm", "uid_local=".intval($uidKey), $inst_fields_values);
00515 }
00516 }
00517 }
00518 }
00519 }
00520 }
00521 return $theCode;
00522 }
00523 function todos_workflowTitle($todoTypes,$type) {
00524 if (!isset($this->todoTypesCache[$type])) {
00525 if (isset($todoTypes[$type])) {
00526 $this->todoTypesCache[$type] = $todoTypes[$type];
00527 } elseif (substr($type,0,3)=="wf_" && t3lib_extMgm::isLoaded("sys_workflows")) {
00528 $workflowRecord=t3lib_BEfunc::getRecord("sys_workflows",substr($type,3));
00529 $this->todoTypesCache[$type] = $workflowRecord["title"];
00530 }
00531 }
00532 return $this->todoTypesCache[$type];
00533 }
00534 function todos_displayTodo($todoTypes,$tUid) {
00535 global $LANG;
00536
00537 if ($tUid>0) {
00538 $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'sys_todos', 'uid='.intval($tUid).' AND cruser_id='.intval($this->BE_USER->user['uid']).' AND NOT deleted');
00539 } else {
00540 $res = $this->exec_todos_getQueryForTodoRels(" AND sys_todos_users_mm.mm_uid=".abs($tUid));
00541 }
00542
00543 $msg = array();
00544 $workflowRecord = "";
00545 if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00546 $editIcon = $row["cruser_id"]==$this->BE_USER->user["uid"] ? '<a href="index.php?sys_todos_uid='.$tUid.'&editTodo=1#todo"><img src="'.$this->backPath.'gfx/edit2.gif" width="11" height="12" vspace=2 border="0" align=top></a>' : '';
00547 $iconName = 'tc_todos'.($row["cruser_id"]==$this->BE_USER->user["uid"]?'':'_foreign').'.gif';
00548 $header = '<nobr><img src="'.$this->backPath.'gfx/i/'.$iconName.'" width="18" height="16" hspace=2 border=0 align=top title="'.$LANG->getLL("todos_item").' #'.$row["uid"].'">'.$editIcon.' <strong>'.htmlspecialchars($row["title"]).'</strong></nobr><BR>';
00549 $formA = array();
00550 $formA[] = array($LANG->getLL("todos_createdBy").": ", $this->userGroupArray[2][$row["cruser_id"]]["username"]." (".$this->userGroupArray[2][$row["cruser_id"]]["realName"]."), ".$this->dateTimeAge($row["crdate"],-1));
00551 $dLine = $this->dateTimeAge($row["deadline"],-1)." ";
00552 if ($row["deadline"]<time()) $dLine = '<span class="typo3-red">'.$dLine.'</span>';
00553 $formA[] = array($LANG->getLL("todos_deadline").": ", $dLine);
00554 $formA[] = array($LANG->getLL("todos_description").": ", nl2br($row["description"])." ");
00555
00556 if ($row["type"] && $row["type"]!="plain") {
00557 $formA[]=array($LANG->getLL("todos_type").": ", $this->todos_workflowTitle($todoTypes,$row["type"]));
00558 $wF = $row["type"];
00559 if (substr($wF,0,3)=="wf_" && t3lib_extMgm::isLoaded("sys_workflows")) {
00560 $workflowRecord=t3lib_BEfunc::getRecord("sys_workflows",substr($wF,3));
00561 if (is_array($workflowRecord) && $workflowRecord["tablename"]) {
00562 $formA[]=array($LANG->getLL("todos_workflowDescr").": ", $workflowRecord["description"]);
00563
00564 }
00565 }
00566 }
00567
00568 $msg[] = $header.$this->pObj->doc->table($formA);
00569
00570 if (!t3lib_div::_GP("editTodo")) {
00571 $res = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
00572 "sys_todos_users_mm.*",
00573 "sys_todos",
00574 "sys_todos_users_mm",
00575 "",
00576 "AND NOT sys_todos_users_mm.deleted AND NOT sys_todos.deleted".($tUid<0?" AND sys_todos_users_mm.mm_uid=":" AND sys_todos.uid=").abs($tUid)
00577 );
00578
00579
00580 $this->insCounter=0;
00581 while ($rel_row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00582 $msg[] = "<HR>".$this->todos_printStatus($rel_row,$row,$workflowRecord,$tUid,$GLOBALS['TYPO3_DB']->sql_num_rows($res));
00583 }
00584 $msg[]='<BR><input type="submit" name="newStatus" value="'.$LANG->getLL("todos_newStatus").'"> <input type="submit" name="cancel" value="'.$LANG->getLL("lCancel").'" onClick="document.editform.sys_todos_uid.value=0;">
00585 <input type="hidden" name="sys_todos_uid" value="'.$tUid.'"><BR>';
00586 }
00587
00588 if (count($msg)) {
00589 $theCode.= $this->pObj->doc->spacer(20);
00590 $theCode.= $this->pObj->doc->section('<a name="todo"></a>'.$LANG->getLL("todo_details",1),implode("",$msg),0,1,0,1);
00591 }
00592
00593
00594 if (t3lib_div::_GP("editTodo") && $row["cruser_id"]==$this->BE_USER->user["uid"]) {
00595 $theCode.=$this->todos_createForm($todoTypes,$row);
00596 }
00597 }
00598 return $theCode;
00599 }
00600 function todos_printStatus($rel_row,$todo_row,$workflow_row,$tUid,$countOfInstances=0) {
00601 global $LANG, $TCA;
00602
00603 if (t3lib_extMgm::isLoaded("sys_workflows") && is_array($workflow_row)) {
00604 $revUsers = $this->todos_getReviewUsers($workflow_row["uid"]);
00605 } else $revUsers=array();
00606
00607 $noExtraFields=0;
00608
00609 $theCode="";
00610 $statusLabels = array();
00611 $statusLabels[1]=htmlspecialchars($LANG->getLL("todos_status_comment"));
00612 $statusLabels[2]=htmlspecialchars($LANG->getLL("todos_status_begin"));
00613 $statusLabels[3]=htmlspecialchars($LANG->getLL("todos_status_end"));
00614 $statusLabels[4]=htmlspecialchars($LANG->getLL("todos_status_passOn"));
00615 $statusLabels[5]=htmlspecialchars($LANG->getLL("todos_status_reject"));
00616
00617 $statusLabels[100]=htmlspecialchars($LANG->getLL("todos_status_resetStatus"));
00618 $statusLabels[103]=htmlspecialchars($LANG->getLL("todos_status_finalize"));
00619
00620 $statusLabels[102]=htmlspecialchars($LANG->getLL("todos_status_newInstance"));
00621
00622 $allowedTargetCodes = "2,3,4,102";
00623
00624 $this->insCounter++;
00625
00626 $iSt = ' ('.$LANG->getLL("todos_instance").' #'.$rel_row["mm_uid"].')';
00627
00628 $theCode.='<BR><strong>'.$LANG->getLL("todos_logEntries").$iSt.':</strong><BR>';
00629 $log = unserialize($rel_row["status_log"]);
00630 $prevUsersGroups=array();
00631 if (is_array($log)) {
00632 $lines=array();
00633
00634 reset($log);
00635 $c=0;
00636 while(list(,$logDat)=each($log)) {
00637 $prevUsersGroups[] = $logDat["uid_foreign_before"];
00638
00639 if ($logDat["status_log_clear"]) {
00640 $c=0;
00641 $lines=array();
00642 }
00643
00644 $c++;
00645 $bgColorClass=($c+1)%2 ? 'bgColor' : 'bgColor-10';
00646 $lines[]='<tr class="'.$bgColorClass.'">
00647 <td valign=top nowrap width=10%>'.
00648 '<strong>'.$statusLabels[$logDat["code"]].'</strong><BR>'.
00649 $this->printUserGroupName($logDat["issuer"]).'<BR>'.
00650 $this->dateTimeAge($logDat["tstamp"],1).'<BR>'.
00651 (isset($logDat["uid_foreign"]) ? "<em>".$LANG->getLL("todos_logEntries_lTarget")."</em>:<BR>".$this->printUserGroupName($logDat["uid_foreign"]).'<BR>' : '').
00652 '<BR></td>
00653 <td valign=top> </td>
00654 <td valign=top width=80%>'.nl2br(htmlspecialchars($logDat["comment"])).'</td>
00655 </tr>';
00656 }
00657
00658 array_unshift($lines,'<tr class="bgColor5">
00659 <td nowrap><strong>'.$LANG->getLL("todos_logEntries_lStatusInfo").':</strong></td>
00660 <td> </td>
00661 <td nowrap><strong>'.$LANG->getLL("todos_logEntries_lDetails").':</strong></td>
00662 </tr>');
00663
00664 $theCode.= '<table border=0 cellpadding=0 cellspacing=0 width="100%">'.implode("",$lines).'</table>';
00665 } else {
00666 $theCode.=$LANG->getLL("todos_logEntries_msg1").'<br>';
00667 }
00668 if ($rel_row["uid_foreign"]) {
00669 $theCode.='<BR>'.$LANG->getLL("todos_logEntries_lTargetedAt").': <strong>'.$this->printUserGroupName($rel_row["uid_foreign"],1).'</strong><BR>';
00670 } else {
00671 $theCode.='<BR><strong>'.$LANG->getLL("todos_logEntries_lnoTarget").'</strong>';
00672 }
00673
00674 if ($rel_row["rec_reference"]) {
00675 $theCode.="<BR>".$LANG->getLL("todos_logEntries_lRecordRelated").':<br>';
00676 $recRelParts = explode(":",$rel_row["rec_reference"]);
00677 $recordRelated=t3lib_BEfunc::getRecord($recRelParts[0],$recRelParts[1]);
00678 if ($recordRelated) {
00679 $theCode.='<a href="'.$this->getEditRedirectUrlForReference($rel_row["rec_reference"]).'"><img src="'.$this->backPath.'gfx/edit2.gif" width="11" height="12" hspace=3 vspace=2 border="0" align=top></a>'.
00680 ($recRelParts[0]=="pages" ? $this->pObj->doc->viewPageIcon($recRelParts[1],$this->backPath,'align=top hspace=2') : "").
00681 t3lib_iconWorks::getIconImage($recRelParts[0],$recordRelated,$this->backPath,' align="top" hspace="2"').
00682 htmlspecialchars($recordRelated[$TCA[$recRelParts[0]]["ctrl"]["label"]]);
00683 } else {
00684 $theCode.='<span class="typo3-red"><strong>'.$LANG->getLL("todos_errorNoRecord").'</strong></span>';
00685 }
00686
00687 }
00688 $theCode.="<BR><BR>";
00689
00690
00691
00692
00693 $opt=Array();
00694 $statusLabels_copy = $statusLabels;
00695
00696
00697 if (!is_array($workflow_row) || !$workflow_row["tablename"] || $rel_row["rec_reference"]) unset($statusLabels_copy[2]);
00698 if (!is_array($workflow_row) || !$workflow_row["tablename"] || !$rel_row["rec_reference"]) unset($statusLabels_copy[103]);
00699 if (!count($revUsers) || (!$rel_row["rec_reference"] && is_array($workflow_row))) unset($statusLabels_copy[3]);
00700 if ($this->BE_USER->user["uid"]!=$todo_row["cruser_id"]) {
00701 unset($statusLabels_copy[100]);
00702
00703 unset($statusLabels_copy[102]);
00704 unset($statusLabels_copy[103]);
00705 } else {
00706 unset($statusLabels_copy[5]);
00707 }
00708
00709 if ($tUid<0) unset($statusLabels_copy[102]);
00710
00711
00712 if ($rel_row["finalized"]) {
00713 $statusLabels_copy = array();
00714 if ($this->BE_USER->user["uid"]==$todo_row["cruser_id"]) {
00715
00716 $statusLabels_copy[102] = $statusLabels[102];
00717 $noExtraFields=1;
00718 }
00719 }
00720
00721 $formCodeAccu="";
00722 if (count($statusLabels_copy)) {
00723 reset($statusLabels_copy);
00724 if ($countOfInstances>1 || $this->BE_USER->user["uid"]==$todo_row["cruser_id"]) $opt[]='<option value="0"></option>';
00725 while(list($kk,$vv)=each($statusLabels_copy)) {
00726 $opt[]='<option value="'.$kk.'">'.$vv.'</option>';
00727 }
00728 $onChange="var allowedCodes=',".$allowedTargetCodes.",';
00729 if (allowedCodes.indexOf(','+this.options[this.selectedIndex].value+',')==-1) {
00730 document.editform['data[sys_todos_users_mm][".$rel_row["mm_uid"]."][status][newTarget]'].selectedIndex=0;
00731 }";
00732 $formCodeAccu.=htmlspecialchars($LANG->getLL("todos_status_addStatus")).':<BR><select name="data[sys_todos_users_mm]['.$rel_row["mm_uid"].'][status][code]" onChange="'.$onChange.'">'.implode("",$opt).'</select><BR>';
00733
00734 if (!$noExtraFields) {
00735 $opt=Array();
00736 $opt[]='<option value="0"></option>';
00737
00738
00739
00740 $revUserRec = t3lib_BEfunc::getRecord("be_users",$todo_row["cruser_id"]);
00741 $opt[]='<option value="'.$todo_row["cruser_id"].'">'.htmlspecialchars($LANG->getLL("todos_sender").': '.$revUserRec["username"].($revUserRec["realName"]?" (".$revUserRec["realName"].")":"")).'</option>';
00742
00743
00744 reset($revUsers);
00745 while(list($u_id,$revUserRec)=each($revUsers)) {
00746
00747 $opt[]='<option value="'.$u_id.'">'.htmlspecialchars($LANG->getLL("todos_reviewer").': '.$revUserRec["username"].($revUserRec["realName"]?" (".$revUserRec["realName"].")":"")).'</option>';
00748 }
00749
00750
00751 $prevUsersGroups[]=$this->BE_USER->user["uid"];
00752 $prevUsersGroups[]=$rel_row["uid_foreign"];
00753 if (is_array($prevUsersGroups) && count($prevUsersGroups)) {
00754 $opt[]='<option value="0"></option>';
00755 $opt[]='<option value="0">'.htmlspecialchars($LANG->getLL("todos_pastUG")).'</option>';
00756 $prevUsersGroups = array_unique($prevUsersGroups);
00757 reset($prevUsersGroups);
00758 while(list(,$UGuid)=each($prevUsersGroups)) {
00759 if ($UGuid) $opt[]='<option value="'.$UGuid.'">'.htmlspecialchars(($UGuid>0?$LANG->getLL("todos_user"):$LANG->getLL("todos_group")).": ".$this->printUserGroupName($UGuid)).'</option>';
00760 }
00761 }
00762
00763 if ($this->BE_USER->user["uid"]==$todo_row["cruser_id"]) {
00764 $opt[]='<option value="0"></option>';
00765 $opt[]='<option value="0">'.htmlspecialchars($LANG->getLL("todos_allUG")).'</option>';
00766
00767 if ($todo_row["type"]=="plain") {
00768 $opt = array_merge($opt,$this->tasks_makeTargetSelector($this->userGroupArray[0],$this->userGroupArray[1],0,1));
00769 } elseif (is_array($workflow_row)) {
00770 $grL = implode(",",t3lib_div::intExplode(",",$workflow_row["target_groups"]));
00771 $wf_groupArray=t3lib_BEfunc::getGroupNames("title,uid","AND uid IN (".($grL?$grL:0).")");
00772 $wf_userArray = t3lib_BEfunc::blindUserNames($this->userGroupArray[2],array_keys($wf_groupArray),1);
00773 $opt = array_merge($opt,$this->tasks_makeTargetSelector($wf_userArray,$wf_groupArray,0,1));
00774 }
00775 }
00776
00777 $onChange="var allowedCodes=',".$allowedTargetCodes.",';
00778 if (allowedCodes.indexOf(
00779 ','
00780 + document.editform['data[sys_todos_users_mm][".$rel_row["mm_uid"]."][status][code]'].options[document.editform['data[sys_todos_users_mm][".$rel_row["mm_uid"]."][status][code]'].selectedIndex].value
00781 +',')==-1 || this.options[this.selectedIndex].value==0) {
00782 this.selectedIndex=0;
00783 }";
00784 $formCodeAccu.=htmlspecialchars($LANG->getLL("todos_status_selectTarget")).':<BR><select name="data[sys_todos_users_mm]['.$rel_row["mm_uid"].'][status][newTarget]" onChange="'.$onChange.'">'.implode("",$opt).'</select><BR>';
00785
00786 $formCodeAccu.=htmlspecialchars($LANG->getLL("todos_statusNote")).':<BR><textarea rows="10" name="data[sys_todos_users_mm]['.$rel_row["mm_uid"].'][status][comment]"'.$this->pObj->doc->formWidthText(40,"","").'></textarea><BR>';
00787 }
00788 }
00789 if ($this->BE_USER->user["uid"]==$todo_row["cruser_id"]) {
00790 $formCodeAccu.='<input type="hidden" name="data[sys_todos_users_mm]['.$rel_row["mm_uid"].'][finished_instance]" value="0"><input type="checkbox" name="data[sys_todos_users_mm]['.$rel_row["mm_uid"].'][finished_instance]" value="1"'.($rel_row["finished_instance"]?" checked":"").'>'.
00791 htmlspecialchars($LANG->getLL("todos_finished"));
00792 }
00793
00794
00795 return $theCode.$formCodeAccu;
00796 }
00797 function negateList($list) {
00798 $listArr = explode(",",$list);
00799 while(list($k,$v)=each($listArr)) {
00800 $listArr[$k]=$v*-1;
00801 }
00802
00803 return implode(",",$listArr);
00804 }
00805 function exec_todos_getQueryForTodoRels($extraWhere="",$selectFields="",$allowOwn=0) {
00806 $groupQ = $this->BE_USER->user["usergroup_cached_list"] ? " OR sys_todos_users_mm.uid_foreign IN (".$this->negateList($this->BE_USER->user["usergroup_cached_list"]).")" : "";
00807 if ($allowOwn) $groupQ.=" OR sys_todos.cruser_id=".intval($this->BE_USER->user["uid"]);
00808
00809 return $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
00810 $selectFields?$selectFields:"sys_todos.*,sys_todos_users_mm.mm_uid,sys_todos_users_mm.uid_foreign,sys_todos_users_mm.finished_instance",
00811 "sys_todos",
00812 "sys_todos_users_mm",
00813 "",
00814 " AND (sys_todos_users_mm.uid_foreign=".intval($this->BE_USER->user["uid"]).$groupQ.")".
00815 " AND sys_todos.deleted=0 AND sys_todos_users_mm.deleted=0".
00816 " AND ((sys_todos.finished=0 AND sys_todos_users_mm.finished_instance=0) OR sys_todos.cruser_id=".intval($this->BE_USER->user["uid"]).")".
00817 $extraWhere,
00818 '',
00819 'sys_todos.deadline'
00820 );
00821 }
00822 function todos_getReviewUsers($wfUid) {
00823 $res = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
00824 "be_users.uid,be_users.username,be_users.realName",
00825 "sys_workflows",
00826 "sys_workflows_rvuser_mm",
00827 "be_users",
00828 t3lib_BEfunc::deleteClause("be_users").t3lib_BEfunc::deleteClause("sys_workflows")." AND sys_workflows.uid=".intval($wfUid),
00829 '',
00830 'be_users.username'
00831 );
00832 $outARr=array();
00833 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00834 $outARr[$row["uid"]]=$row;
00835 }
00836 return $outARr;
00837 }
00838 function todos_displayLists($todoTypes,$tUid) {
00839 global $LANG;
00840
00841 $lines=array();
00842 $ownCount=0;
00843
00844 $lines[]='<tr>
00845 <td class="bgColor5"> </td>
00846 <td class="bgColor5" width=50%><strong>'.$LANG->getLL("todos_title").':</strong></td>
00847 <td class="bgColor5" width=25%><strong>'.$LANG->getLL("todos_type").':</strong></td>
00848 <td class="bgColor5" width=25%><strong>'.$LANG->getLL("todos_deadline").':</strong></td>
00849 <td class="bgColor5"><strong>'.$LANG->getLL("todos_finished").':</strong></td>
00850 </tr>';
00851
00852
00853
00854 $res = $this->exec_todos_getQueryForTodoRels();
00855 $out = "";
00856 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
00857
00858 $c=0;
00859 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00860 $c++;
00861 if ($tUid==-$row["mm_uid"]) {
00862 $bTb="<B>";
00863 $bTe="</B>";
00864 $active='<img src="'.$this->backPath.'gfx/content_client.gif" width="7" height="10" border="0" align=top>';
00865 } else {
00866 $bTb=$bTe="";
00867 $active="";
00868 }
00869 $t_dL=$this->dateTimeAge($row["deadline"],-1);
00870 $t_dL = ($row["deadline"]>time()) ? $t_dL : '<span class="typo3-red">'.$t_dL.'</span>';
00871 $iconName = 'tc_todos'.($row["cruser_id"]==$this->BE_USER->user["uid"]?'':'_foreign').($row["uid_foreign"]>=0?'':'_group').'.gif';
00872 $bgColorClass=($c+1)%2 ? 'bgColor' : 'bgColor-10';
00873 $lines[]='<tr>
00874 <td class="'.$bgColorClass.'">'.$this->linkTodos('<img src="'.$this->backPath.'gfx/i/'.$iconName.'" width="18" height="16" hspace=2 border=0 title="'.$LANG->getLL("todos_instance").' #'.$row["mm_uid"].', '.htmlspecialchars($LANG->getLL("todos_createdBy").": ".$this->userGroupArray[2][$row["cruser_id"]]["username"]." (".$this->userGroupArray[2][$row["cruser_id"]]["realName"].")").'">',-$row["mm_uid"]).'</td>
00875 <td class="'.$bgColorClass.'" nowrap>'.$this->linkTodos($active.$bTb." ".$this->fixed_lgd($row["title"])." ".$bTb,-$row["mm_uid"]).'</td>
00876 <td class="'.$bgColorClass.'" nowrap> '.t3lib_div::fixed_lgd_cs($this->todos_workflowTitle($todoTypes,$row["type"]),15).' </td>
00877 <td class="'.$bgColorClass.'" nowrap>'.$t_dL.' </td>
00878 <td class="'.$bgColorClass.'" align=right>'.($row["cruser_id"]==$this->BE_USER->user["uid"]?'<input type="hidden" name="DONE['.-$row["mm_uid"].']" value=0><input type="checkbox" name="DONE['.-$row["mm_uid"].']" value="1"'.($row["finished_instance"]?" checked":"").'>':' ').'</td>
00879 </tr>';
00880
00881 if ($row["cruser_id"]==$this->BE_USER->user["uid"]) $ownCount++;
00882 }
00883 }
00884
00885
00886
00887
00888
00889 $res = $GLOBALS['TYPO3_DB']->exec_SELECT_mm_query(
00890 "sys_todos.*,sys_todos_users_mm.uid_foreign",
00891 "sys_todos",
00892 "sys_todos_users_mm",
00893 "",
00894 " AND sys_todos_users_mm.uid_foreign!=".intval($this->BE_USER->user["uid"]).
00895 " AND sys_todos.cruser_id=".intval($this->BE_USER->user["uid"]).
00896 " AND sys_todos.deleted=0",
00897 'sys_todos.uid',
00898 'sys_todos.deadline'
00899 );
00900 $out = "";
00901 if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
00902
00903 $lines[]='<tr><td colspan=5> </td></tr>';
00904 $lines[]='<tr>
00905 <td class="bgColor5"> </td>
00906 <td class="bgColor5" colspan="4"><strong>'.$LANG->getLL("todos_list_master").':</strong></td>
00907 </tr>';
00908
00909 $c=0;
00910 while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
00911 $c++;
00912 $bgColorClass=($c+1)%2 ? 'bgColor' : 'bgColor-10';
00913 if ($tUid==$row["uid"]) {
00914 $bTb="<B>";
00915 $bTe="</B>";
00916 $active='<img src="'.$this->backPath.'gfx/content_client.gif" width="7" height="10" border="0" align=top>';
00917 } else {
00918 $bTb=$bTe="";
00919 $active="";
00920 }
00921 $t_dL=$this->dateTimeAge($row["deadline"],-1);
00922 $t_dL = ($row["deadline"]>time()) ? $t_dL : '<span class="typo3-red">'.$t_dL.'</span>';
00923 $iconName = 'tc_todos'.($row["uid_foreign"]>=0?'':'_group').'.gif';
00924 $bgColorClass=($c+1)%2 ? 'bgColor' : 'bgColor-10';
00925 $lines[]='<tr>
00926 <td class="'.$bgColorClass.'">'.$this->linkTodos('<img src="'.$this->backPath.'gfx/i/'.$iconName.'" width="18" height="16" hspace=2 border=0 title="'.$LANG->getLL("todos_item").' #'.$row["uid"].', '.htmlspecialchars($LANG->getLL("todos_createdBy").": ".$this->userGroupArray[2][$row["cruser_id"]]["username"]." (".$this->userGroupArray[2][$row["cruser_id"]]["realName"].")").'">',$row["uid"]).'</td>
00927 <td class="'.$bgColorClass.'" nowrap>'.$this->linkTodos($active.$bTb." ".$this->fixed_lgd($row["title"])." ".$bTb,$row["uid"]).'</td>
00928 <td class="'.$bgColorClass.'" nowrap> '.t3lib_div::fixed_lgd_cs($this->todos_workflowTitle($todoTypes,$row["type"]),15).' </td>
00929 <td class="'.$bgColorClass.'" nowrap>'.$t_dL.' </td>
00930 <td class="'.$bgColorClass.'" align=right>'.($row["cruser_id"]==$this->BE_USER->user["uid"]?'<input type="hidden" name="DONE['.$row["uid"].']" value=0><input type="checkbox" name="DONE['.$row["uid"].']" value="1"'.($row["finished"]?" checked":"").'>':' ').'</td>
00931 </tr>';
00932
00933 if ($row["cruser_id"]==$this->BE_USER->user["uid"]) $ownCount++;
00934 }
00935
00936
00937
00938
00939 }
00940
00941 if (count($lines)>1) {
00942 $out = '<table border=0 cellpadding=0 cellspacing=0>'.implode("",$lines).'</table>';
00943
00944 if ($ownCount) {
00945 $bMenu = '<BR><div align=right><select name="marked_todos_action">
00946 <option value=-1></option>
00947 <option value=127>'.$LANG->getLL("todos_purge").'</option>
00948 </select><input type="submit" name="marked_todos" value="'.$LANG->getLL("todos_updateMarked").'"></div>';
00949 } else $bMenu = "";
00950
00951
00952 $theCode.= $this->pObj->doc->section($LANG->getLL("todos_list"),$out.$bMenu,0,1);
00953 }
00954 return $theCode;
00955 }
00956 function todos_createForm($todoTypes,$editRec="") {
00957 global $LANG;
00958
00959
00960 $wF = is_array($editRec) ? $editRec["type"] : t3lib_div::_GP("workflow_type");
00961 if ($wF && isset($todoTypes[$wF])) {
00962 $type = is_array($editRec) ? $editRec["uid"] : "NEW";
00963 $formA=array();
00964
00965 if (!is_array($editRec)) {
00966
00967 if ($wF=="plain") {
00968
00969 $formA[]=array($LANG->getLL("todos_type").": ", $LANG->getLL("todos_plain"));
00970 $formA[] = $this->tasks_makeTargetSelector($this->userGroupArray[0],$this->userGroupArray[1],$type);
00971
00972 } elseif (substr($wF,0,3)=="wf_" && t3lib_extMgm::isLoaded("sys_workflows")) {
00973 $workflowRecord=t3lib_BEfunc::getRecord("sys_workflows",substr($wF,3));
00974 if (is_array($workflowRecord) && $workflowRecord["tablename"]) {
00975 $formA[]=array($LANG->getLL("todos_type").": ", $workflowRecord["title"]);
00976
00977
00978 $grL = implode(",",t3lib_div::intExplode(",",$workflowRecord["target_groups"]));
00979 $wf_groupArray=t3lib_BEfunc::getGroupNames("title,uid","AND uid IN (".($grL?$grL:0).")");
00980 $wf_groupArrayUids=array_keys($wf_groupArray);
00981 $wf_userArray = t3lib_BEfunc::blindUserNames($this->userGroupArray[2],$wf_groupArrayUids,1);
00982 $formA[] = $this->tasks_makeTargetSelector($wf_userArray,$wf_groupArray,$type);
00983 }
00984 }
00985 }
00986
00987
00988 $formA[]=array($LANG->getLL("todos_title").": ", '<input type="text" name="data[sys_todos]['.$type.'][title]" value="'.htmlspecialchars(is_array($editRec)?$editRec["title"]:$todoTypes[$wF]).'" max=255'.$this->pObj->doc->formWidth(40).'>');
00989
00990
00991 $curTodoTime=time();
00992 $formA[]=array($LANG->getLL("todos_deadline").": ", '<input type="text" name="data[sys_todos]['.$type.'][deadline]_hr'.'" onChange="typo3FormFieldGet(\'data[sys_todos]['.$type.'][deadline]\', \'datetime\', \'\', 0,0);"'.$this->pObj->doc->formWidth(20).'>
00993 <input type="hidden" value="'.intval($editRec["deadline"]).'" name="data[sys_todos]['.$type.'][deadline]">
00994 <select name="_time_selector" onChange="
00995 document.forms[0][\'data[sys_todos]['.$type.'][deadline]\'].value=(this.options[this.selectedIndex].value>0?this.options[this.selectedIndex].value:(document.forms[0][\'data[sys_todos]['.$type.'][deadline]\'].value!=\'0\'?document.forms[0][\'data[sys_todos]['.$type.'][deadline]\'].value:'.time().')-this.options[this.selectedIndex].value);
00996 this.selectedIndex=0;
00997 typo3FormFieldSet(\'data[sys_todos]['.$type.'][deadline]\', \'datetime\', \'\', 0,0);
00998 ">
00999 <option value="0"></option>
01000 <option value="'.(mktime(0,0,0)+3600*12).'">'.$LANG->getLL("todos_DL_today").'</option>
01001 <option value="'.(mktime(0,0,0)+3600*24+3600*12).'">'.$LANG->getLL("todos_DL_tomorrow").'</option>
01002 <option value="'.(mktime(0,0,0)+3600*24*7+3600*12).'">'.$LANG->getLL("todos_DL_weekLater").'</option>
01003 <option value="'.(mktime(0,0,0)+3600*24*31+3600*12).'">'.$LANG->getLL("todos_DL_monthLater").'</option>
01004 <option value="'.(-3600*24*1).'">+1 '.$LANG->getLL("todos_DL_day").'</option>
01005 <option value="'.(-3600*24*2).'">+2 '.$LANG->getLL("todos_DL_days").'</option>
01006 <option value="'.(-3600*24*4).'">+4 '.$LANG->getLL("todos_DL_days").'</option>
01007 <option value="'.(-3600*24*7).'">+7 '.$LANG->getLL("todos_DL_days").'</option>
01008 <option value="'.(-3600*24*14).'">+14 '.$LANG->getLL("todos_DL_days").'</option>
01009 <option value="'.(-3600*24*31).'">+31 '.$LANG->getLL("todos_DL_days").'</option>
01010 </select>
01011 ');
01012
01013 $t3lib_TCEforms = t3lib_div::makeInstance("t3lib_TCEforms");
01014 $t3lib_TCEforms->backPath = $this->backPath;
01015
01016 $t3lib_TCEforms->extJSCODE.='typo3FormFieldSet("data[sys_todos]['.$type.'][deadline]", "datetime", "", 0,0);';
01017
01018
01019 $formA[]=array($LANG->getLL("todos_description").": ", '<textarea rows="10" name="data[sys_todos]['.$type.'][description]"'.$this->pObj->doc->formWidthText(40,"","").'>'.t3lib_div::formatForTextarea(is_array($editRec)?$editRec["description"]:"").'</textarea>');
01020
01021
01022 if (!is_array($editRec) && $this->BE_USER->user["email"]) {
01023 $formA[]=array(" ", '<input type="checkbox" name="sendAsEmail" value=1>'.$LANG->getLL("todo_email").'<BR>('.$LANG->getLL("lReplyAddress").': '.$this->BE_USER->user["email"].')');
01024 }
01025
01026 $formA[]=array(" "," ");
01027 $onClick = "if (document.forms[0]['data[sys_todos][".$type."][title]'].value=='') {alert(".$GLOBALS['LANG']->JScharCode($LANG->getLL("todos_mustFillIn")).");return false;}";
01028 $hidden = '<input type=hidden name="data[sys_todos]['.$type.'][type]" value="'.htmlspecialchars($wF).'">';
01029 if ($type=="NEW") {
01030 $formA[]=array(" ", '<input type="submit" name="create_todo" value="'.$LANG->getLL("lCreate").'" onClick="'.$onClick.'"> <input type="submit" value="'.$LANG->getLL("lCancel").'">');
01031 } else {
01032 $formA[]=array(" ", '<input type="submit" name="create_todo" value="'.$LANG->getLL("lUpdate").'"><input type="hidden" name="sys_todos_uid" value="'.$editRec["uid"].'">');
01033 }
01034
01035 $theCode.= $this->pObj->doc->spacer(20);
01036 $theCode.= $this->pObj->doc->section('<a name="new"></a>'.$LANG->getLL(is_array($editRec)?"todos_update":"todos_new",1),$this->pObj->doc->table($formA).$hidden.$t3lib_TCEforms->JSbottom(),0,!is_array($editRec),0,1);
01037 } else {
01038
01039 $opt_type=array();
01040 reset($todoTypes);
01041 $opt_type[]='<option value="0"></option>';
01042 while(list($uid,$title)=each($todoTypes)) {
01043 $opt_type[]='<option value="'.$uid.'">'.htmlspecialchars($title).'</option>';
01044 }
01045
01046 $formA=array();
01047 $formA[]=array($LANG->getLL("todos_type").": ", '<select name="workflow_type" onChange="document.location=\'index.php?workflow_type=\'+this.options[this.selectedIndex].value+\'#new\';">'.implode("",$opt_type).'</select>');
01048 $theCode.= $this->pObj->doc->spacer(20);
01049 $theCode.= $this->pObj->doc->section($LANG->getLL("todos_new"),$this->pObj->doc->table($formA),0,1);
01050 }
01051 return $theCode;
01052 }
01053 function linkTodos($str,$id) {
01054 $str='<a href="index.php?sys_todos_uid='.$id.'#todo">'.$str.'</a>';
01055 return $str;
01056 }
01057 function getEditRedirectUrlForReference($recRef) {
01058 $parts = explode(":",$recRef);
01059 if ($parts[0]=="pages") {
01060 $outUrl = $this->backPath."sysext/cms/layout/db_layout.php?id=".$parts[1]."&SET[function]=0&edit_record=".$parts[0].":".$parts[1]."&returnUrl=".rawurlencode(t3lib_div::getIndpEnv("REQUEST_URI"));
01061 } else {
01062 $outUrl = $this->backPath."alt_doc.php?returnUrl=".rawurlencode(t3lib_div::getIndpEnv("REQUEST_URI"))."&edit[".$parts[0]."][".$parts[1]."]=edit";
01063 }
01064 return $outUrl;
01065 }
01066 function printUserGroupName($uid,$icon=0) {
01067 if ($uid>0) {
01068 return ($icon?t3lib_iconWorks::getIconImage("be_users",t3lib_BEfunc::getRecord("be_users",$uid),$this->backPath,$params=" align=top"):"").
01069 $this->userGroupArray[2][$uid]["username"].($this->userGroupArray[2][$uid]["realName"]?" (".$this->userGroupArray[2][$uid]["realName"].")":"");
01070 } else {
01071 $grRec = t3lib_BEfunc::getRecord("be_groups",abs($uid));
01072 return ($icon?t3lib_iconWorks::getIconImage("be_groups",$grRec,$this->backPath,' align="top"'):'').
01073 $grRec["title"];
01074 }
01075 }
01076 }
01077
01078 if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/sys_todos/class.tx_systodos.php"]) {
01079 include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/sys_todos/class.tx_systodos.php"]);
01080 }
01081
01082 ?>