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;
 }
Example #3
0
 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());
 }
Example #4
0
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;
    }
}
Example #5
0
 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>";
     }
 }
Example #6
0
 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>";
 }
Example #7
0
/**
* 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 = ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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 = '&gt; &nbsp;&nbsp; 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 = '&gt;&gt;&nbsp;&nbsp; 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 = '&lt; &nbsp;&nbsp; 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 = ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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 = '&gt; &nbsp;&nbsp; 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 = '&lt; &nbsp;&nbsp; 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 = '&lt;&lt;&nbsp;&nbsp; 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', '&lt;&lt; ' . __('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') . '&gt;&gt;', 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();
}