public function __construct() { global $PH; global $auth; $this->id = 'changes'; $this->title = __("Changes"); $this->id = "changes"; $this->no_items_html = sprintf(__('Other team members changed nothing since last logout (%s)'), renderDate($auth->cur_user->last_logout)); $this->add_col(new ListBlockCol_SearchResultType()); $this->add_col(new ListBlockCol_SearchResultName()); $this->add_col(new ListBlockCol_SearchResultModified()); #$this->add_col( new ListBlockCol_ChangesDate()); /* ### block style functions ### $this->add_blockFunction(new BlockFunction(array( 'target'=>'changeBlockStyle', 'key'=>'list', 'name'=>'List', 'params'=>array( 'style'=>'list', 'block_id'=>$this->id, 'page_id'=>$PH->cur_page->id, 'use_collapsed'=>true, ), 'default'=>true, ))); */ }
private function addIntroductionText() { $this->body_html .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" . "<html>" . "<head>" . "<meta content=\"text/html;charset=UTF-8\" http-equiv=\"Content-Type\">" . "<title>{$this->subject}</title>" . "<style> div.details{color:#888888; font-size: 80%;} h4 {font-size:110%;} li{ margin-bottom:0.2em; } ul {margin:0; padding:0px 0px 0px 1em;} li span.details { font-size: 80%; color: #888} </style>" . "</head>" . "<body text=\"#000000\" link=\"#163075\" alink=\"#ff0000\" vlink=\"#2046AA\">" . "<h2>" . sprintf(__('Hello %s,', 'notification'), asHtml($this->recipient->name)) . "</h2>" . __('with this automatically created e-mail we want to inform you that', 'notification') . "<br>"; $this->body_plaintext .= sprintf(__('Hello %s,', 'notification'), $this->recipient->name) . LINE_BREAK . __('with this automatically created e-mail we want to inform you that', 'notification') . LINE_BREAK . LINE_BREAK; if ($this->recipient->notification_last) { $this->body_html .= sprintf(__('since %s'), renderDate($this->recipient->notification_last, false)) . ' '; $this->body_plaintext .= sprintf(__('since %s'), renderDate($this->recipient->notification_last, false)) . ' '; } $this->body_html .= sprintf(__('following happened at %s ', 'notification'), confGet('SELF_DOMAIN')) . "<br>"; $this->body_plaintext .= sprintf(__('following happened at %s ', 'notification'), confGet('SELF_DOMAIN')) . LINE_BREAK; }
public function __construct($args = NULL) { parent::__construct($args); global $PH; global $auth; $this->id = 'changes'; $this->title = __("Changes"); $this->id = "changes"; $this->no_items_html = sprintf(__('Other team members changed nothing since last logout (%s)'), renderDate($auth->cur_user->last_logout)); $this->add_col(new ListBlockCol_ChangesDate()); $this->add_col(new ListBlockCol_ChangesWhat()); $this->add_col(new ListBlockCol_ChangesDetails()); }
function renderDateHtml($t) { global $auth; ### this is the visible string ### if (!($str = renderDate($t))) { return "-"; } ### this is for the tooltip ### if (is_string($t)) { $t = strToClientTime($t); } else { global $auth; $time_offset = 0; if (isset($auth->cur_user)) { $time_offset = $auth->cur_user->time_offset; } $t += $time_offset; } ### tooltip ? ### $str_tooltip = ''; if (gmdate('H:i:s', $t) != '00:00:00') { $str_tooltip = gmstrftime(getUserFormatTimestamp(), $t); } if ($str_tooltip) { return "<span class='date' title='{$str_tooltip}'>{$str}</span>"; } else { return $str; } }
function render_tr(&$obj, $style = "") { measure_start('col_timedue'); $class = ""; $title = "planned end undefined."; $value = ""; if ($obj->planned_end && $obj->planned_end != '0000-00-00' && $obj->planned_end != '0000-00-00 00:00:00') { if ($obj->status >= STATUS_COMPLETED) { if ($obj->status == STATUS_COMPLETED) { $value = __("Review"); $title = __("Task status set to completed and needs approval."); } else { $title = sprintf(__("Item was approved on: %s:", "date a task was approved"), renderDate($obj->date_closed)); $value = __("done"); } } else { $daysLeft = floor((strToGMTime($obj->planned_end) - time()) / 24 / 60 / 60); switch ($daysLeft) { case 0: $value = __("Today"); $title = __("This task is planned to be completed today."); break; case 1: $value = __("Tomorrow"); $title = __("This task is planned to be completed tomorrow."); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: $value = __("Next week"); $title = sprintf(__("due: %s"), renderDate($obj->planned_end)); break; default: $value = abs($daysLeft) . " <span class='entity'>" . __("days"); if ($daysLeft < 0) { $class = "overDue"; $title = __("this task is overdue!"); $value .= __("late", "time status of a task"); } else { $value .= __("remain", "time status of a task"); if ($obj->planned_start && $obj->planned_start != '0000-00-00' && $obj->planned_start != '0000-00-00 00:00:00') { if (floor((strToGMTime($obj->planned_start) - time()) / 24 / 60 / 60) + 1 >= 1) { $value = __("Pending"); $title = sprintf(__("planned for %s", "a certain date"), renderTimestamp($obj->planned_start)); } else { $title = sprintf(__("start: %s"), renderDate($obj->planned_start)) . " / " . sprintf(__("due: %s"), renderDate($obj->planned_end)); } } else { $title = sprintf(__("due: %s"), renderDate($obj->planned_end)); } } break; } } $value .= "</span>"; print "<td class='timeDue {$class}' title='{$title}'>{$value}</td>"; measure_stop('col_timedue'); } else { print "<td></td>"; } }
function render_tr(&$file, $style = "") { global $PH; if (!isset($file) || !$file instanceof File) { return; } #$buffer = $PH->getLink('fileView',__("Details"), array('file'=>$file->id),'item file'); $buffer = ''; if ($file->mimetype == 'image/png' || $file->mimetype == 'image/x-png' || $file->mimetype == 'image/jpeg' || $file->mimetype == 'image/pjpeg' || $file->mimetype == 'image/jpg' || $file->mimetype == 'image/gif') { if ($author = Person::getVisibleById($file->created_by)) { $author_name = $author->nickname; } else { $author_name = "???"; } $buffer .= "<span class=sub><a " . "title='" . sprintf(__("creatd on %s", "date a file was created"), renderDate($file->created)) . "' " . "target='blank' " . "href='" . $PH->getUrl('fileDownloadAsImage', array('file' => $file->id)) . "' " . "><img class='left' title='" . asHtml($file->name) . "' alt='" . asHtml($file->name) . "' " . "src='" . $file->getCachedUrl(100) . "'" . "><br>" . "" . asHtml($file->name) . "</a>" . "</span>" . "<br>" . "<span class=sub title='" . __('click to show details') . "'>" . $PH->getLink('fileView', '#' . $file->id, array('file' => $file->id)) . ' ' . sprintf(__('by %s', 'person who uploaded a file'), $author_name) . ', ' . renderFilesize($file->filesize) . "<br>" . "</span>"; } else { $buffer .= "<b>" . $PH->getLink('fileDownload', $file->name, array('file' => $file->id)) . "</b>" . "<br>" . "<span class=sub>" . $file->filesize . " bytes" . " / " . sprintf(__("ID %s"), $file->id) . " / " . renderDateHtml($file->created) . "</span>" . "<br>" . "<span class=sub>" . $PH->getLink('fileView', __('Show Details'), array('file' => $file->id)) . "</span>"; } print "<td class='attachment_summary'>{$buffer}</td>"; }
/** * renders a comparision between two versions of an item @ingroup pages */ function itemViewDiff() { global $PH; global $auth; require_once confGet('DIR_STREBER') . 'render/render_wiki.inc.php'; ### get task #### $item_id = get('item'); if (!($item = DbProjectItem::getObjectById($item_id))) { $PH->abortWarning("invalid item-id", ERROR_FATAL); } if (!($project = Project::getVisibleById($item->project))) { $PH->abortWarning("this item has an invalid project id", ERROR_DATASTRUCTURE); } require_once confGet('DIR_STREBER') . "db/db_itemchange.inc.php"; $versions = ItemVersion::getFromItem($item); $date1 = get('date1'); $date2 = get('date2'); if (!$date1) { #if(count($versions) > 1) { # if($auth->cur_user->last_logout < $versions[count($versions)-2]->date_to) # { # $date1 = $auth->cur_user->last_logout; # } # else { # $date1 = $versions[count($versions)-2]->date_from; # } #} #else { foreach (array_reverse($versions) as $v) { if ($v->author == $auth->cur_user->id) { $date1 = $v->date_from; break; } } #} } if (!$date2) { $date2 = getGMTString(); } $page = new Page(); $page->cur_tab = 'projects'; $page->crumbs = build_project_crumbs($project); $page->options = build_projView_options($project); $page->title = $item->name; $page->title_minor = __('changes'); $page->add_function(new PageFunction(array('target' => 'itemView', 'params' => array('item' => $item->id), 'icon' => 'edit', 'name' => __('View item')))); ### render title ### echo new PageHeader(); echo new PageContentOpen(); if ($date1 > $date2) { new FeedbackMessage(__("date1 should be smaller than date2. Swapped")); $t = $date1; $date1 = $date2; $date2 = $t; } if (count($versions) == 1) { echo __("item has not been edited history"); } else { $old_version = NULL; $version_right = NULL; $version_left = $versions[0]; foreach ($versions as $v) { if ($v->date_from <= $date1) { $version_left = $v; } if ($v->date_from >= $date2) { if (isset($version_right)) { if ($version_right->date_from > $v->date_from) { $version_right = $v; } } else { $version_right = $v; } } } if (!isset($version_right)) { $version_right = $versions[count($versions) - 1]; } $options_left = array(); $options_right = array(); ### list versions left ### for ($i = 0; $i < count($versions) - 1; $i++) { $v = $versions[$i]; if ($person = Person::getVisibleById($v->author)) { $author = $person->name; } else { $author = __('unknown'); } if ($v->version_number == $version_left->version_number) { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $versions[$i]->date_to)); $name = ' v.' . $v->version_number . ' -- ' . $author . " -- " . $v->date_from; $options_left[] = "<option selected=1 value='" . $str_link . "'>" . $name . "</option>"; } else { if ($v->version_number > $version_left->version_number) { if ($v->version_number < $version_right->version_number) { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $versions[$i]->date_to)); $name = '> v.' . $v->version_number . ' -- ' . $author . " -- " . renderDate($v->date_from); } else { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $version_right->date_to)); $name = '>> v.' . $v->version_number . ' -- ' . $author . " -- " . renderDate($v->date_from); } $options_left[] = "<option value='" . $str_link . "'>" . $name . "</option>"; } else { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $version_right->date_from)); $name = '< v.' . $v->version_number . ' -- ' . $author . " -- " . renderDate($v->date_from); $options_left[] = "<option value='" . $str_link . "'>" . $name . "</option>"; } } } ### list versions right ### for ($i = 1; $i < count($versions); $i++) { $v = $versions[$i]; if ($person = Person::getVisibleById($v->author)) { $author = $person->name; } else { $author = __('unknown'); } if ($v->version_number == $version_right->version_number) { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $versions[$i]->date_to)); $name = ' v.' . $v->version_number . ' -- ' . $author . " -- " . $v->date_from; $options_right[] = "<option selected=1 value='" . $str_link . "'>" . $name . "</option>"; } else { if ($v->version_number > $version_right->version_number) { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $version_left->date_from, 'date2' => $versions[$i]->date_from)); $name = '> v.' . $v->version_number . ' -- ' . $author . ' -- ' . renderDate($v->date_from); $options_right[] = "<option value='" . $str_link . "'>" . $name . "</option>"; } else { if ($v->version_number > $version_left->version_number) { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $version_left->date_from, 'date2' => $versions[$i]->date_from)); $name = '< v.' . $v->version_number . ' -- ' . $author . " -- " . renderDate($v->date_from); } else { $str_link = $PH->getUrl('itemViewDiff', array('item' => $item->id, 'date1' => $versions[$i]->date_from, 'date2' => $versions[$i]->date_to)); $name = '<< v.' . $v->version_number . ' -- ' . $author . ' -- ' . renderDate($v->date_from); } $options_right[] = "<option value='" . $str_link . "'>" . $name . "</option>"; } } } ### prev ### if ($version_left->version_number > 1) { $link_prev = $PH->getLink('itemViewDiff', '<< ' . __('prev change'), array('item' => $item->id, 'date1' => $versions[$version_left->version_number - 2]->date_from, 'date2' => $versions[$version_left->version_number - 2]->date_to), NULL, true); } else { $link_prev = ''; } ### next ### if ($version_right->version_number < count($versions)) { $link_next = $PH->getLink('itemViewDiff', __('next') . '>>', array('item' => $item->id, 'date1' => $versions[$version_right->version_number - 1]->date_from, 'date2' => $versions[$version_right->version_number - 1]->date_to), NULL, true); } else { $link_next = ''; } ### summary ### $link_summary = $PH->getLink('itemViewDiff', __('summary'), array('item' => $item->id, 'date1' => $auth->cur_user->last_logout, 'date2' => getGMTString()), NULL, true); echo "<div class=diff>"; echo "<table class=nav><tr>"; echo "<td class=older>" . "<select onChange='location.href=this.options[this.selectedIndex].value'>" . join(array_reverse($options_left)) . "</select>" . '<br><b class=doclear></b>' . $link_prev . "</td>"; echo "<td class=newer>" . "<select onChange='location.href=this.options[this.selectedIndex].value'>" . join(array_reverse($options_right)) . "</select>" . '<br><b class=doclear></b>' . $link_next . $link_summary . "</td>"; echo "</table>"; #if(!$date2 || !$date1) { # echo sprintf(__("Item did not exists at %s"), renderTime($date2)); #} if ($old_version == $version_right) { echo sprintf(__('no changes between %s and %s'), renderTime($date1), renderTime($date2)); } ### collect changes ### $old_field_values = array(); $new_field_values = array(); foreach ($versions as $v) { if ($v->version_number <= $version_left->version_number) { foreach ($v->values as $name => $value) { $old_field_values[$name] = $value; } } if ($v->version_number >= $version_left->version_number && $v->version_number < $version_right->version_number) { foreach ($v->values_next as $name => $value) { $new_field_values[$name] = $value; } } } foreach ($new_field_values as $field_name => $value) { echo "<h2>{$field_name}</h2>"; $old_value = isset($old_field_values[$field_name]) ? $old_field_values[$field_name] : ""; $new_value = isset($new_field_values[$field_name]) ? $new_field_values[$field_name] : ''; $field_type = $item->fields[$field_name]->type; if ($field_type == 'FieldText') { echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldOption') { if ($field_name == 'status') { global $g_status_names; $old_value = isset($g_status_names[$old_value]) ? $g_status_names[$old_value] : __('undefined'); $new_value = isset($g_status_names[$new_value]) ? $g_status_names[$new_value] : __('undefined'); } else { if ($field_name == 'label') { if ($project = Project::getVisibleById($item->project)) { $labels = explode(",", $project->labels); $old_value = isset($labels[$old_value - 1]) ? $labels[$old_value - 1] : __('undefined'); $new_value = isset($labels[$new_value - 1]) ? $labels[$new_value - 1] : __('undefined'); } } } echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldInternal') { if ($field_name == 'parent_item') { if ($task_parent_old = Task::getVisibleById($old_value)) { $ar = array(); foreach ($task_parent_old->getFolder() as $f) { $ar[] = $f->name; } $ar[] = $task_parent_old->name; $old_value = join($ar, " > "); } if ($task_parent_new = Task::getVisibleById($new_value)) { $ar = array(); foreach ($task_parent_new->getFolder() as $f) { $ar[] = $f->name; } $ar[] = $task_parent_new->name; $new_value = join($ar, " > "); } } else { if ($field_name == 'state') { $old_value = $old_value == -1 ? __('deleted') : __('ok'); $new_value = $new_value == -1 ? __('deleted') : __('ok'); } else { if ($field_name == 'pub_level') { global $g_pub_level_names; $old_value = isset($g_pub_level_names[$old_value]) ? $g_pub_level_names[$old_value] : __('undefined'); $new_value = isset($g_pub_level_names[$new_value]) ? $g_pub_level_names[$new_value] : __('undefined'); } } } echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldPercentage') { echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldInt') { echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldString') { echo render_changes($old_value, $new_value); } else { if ($field_type == 'FieldDate') { echo render_changes(renderDate($old_value), renderDate($new_value)); } else { if ($field_type == 'FieldDatetime') { echo render_changes(renderTimestamp($old_value), renderTimestamp($new_value)); } } } } } } } } } } echo "</div>"; echo new PageContentClose(); echo new PageHtmlEnd(); }