| | @@ -1664,10 +1664,12 @@ |
| 1664 | 1664 | int rid; |
| 1665 | 1665 | char *zDate; |
| 1666 | 1666 | const char *zUuid; |
| 1667 | 1667 | char zTktName[UUID_SIZE+1]; |
| 1668 | 1668 | Manifest *pTktChng; |
| 1669 | + int modPending; |
| 1670 | + const char *zModAction; |
| 1669 | 1671 | |
| 1670 | 1672 | login_check_credentials(); |
| 1671 | 1673 | if( !g.perm.RdTkt ){ login_needed(); return; } |
| 1672 | 1674 | rid = name_to_rid_www("name"); |
| 1673 | 1675 | if( rid==0 ){ fossil_redirect_home(); } |
| | @@ -1680,39 +1682,68 @@ |
| 1680 | 1682 | style_submenu_element("Shun","Shun", "%s/shun?shun=%s#addshun", |
| 1681 | 1683 | g.zTop, zUuid); |
| 1682 | 1684 | } |
| 1683 | 1685 | } |
| 1684 | 1686 | pTktChng = manifest_get(rid, CFTYPE_TICKET); |
| 1687 | + zDate = db_text(0, "SELECT datetime(%.12f)", pTktChng->rDate); |
| 1688 | + memcpy(zTktName, pTktChng->zTicketUuid, UUID_SIZE+1); |
| 1685 | 1689 | if( pTktChng==0 ){ |
| 1686 | 1690 | fossil_redirect_home(); |
| 1691 | + } |
| 1692 | + if( g.perm.ModTkt && (zModAction = P("modaction"))!=0 ){ |
| 1693 | + if( strcmp(zModAction,"delete")==0 ){ |
| 1694 | + moderation_disapprove(rid); |
| 1695 | + cgi_redirectf("%R/tktview/%s", zTktName); |
| 1696 | + /*NOTREACHED*/ |
| 1697 | + } |
| 1698 | + if( strcmp(zModAction,"approve")==0 ){ |
| 1699 | + moderation_approve(rid); |
| 1700 | + } |
| 1687 | 1701 | } |
| 1688 | 1702 | style_header("Ticket Change Details"); |
| 1689 | | - zDate = db_text(0, "SELECT datetime(%.12f)", pTktChng->rDate); |
| 1690 | | - memcpy(zTktName, pTktChng->zTicketUuid, UUID_SIZE); |
| 1691 | | - zTktName[UUID_SIZE] = 0; |
| 1692 | | - if( g.perm.Hyperlink ){ |
| 1693 | | - @ <h2>Changes to ticket |
| 1694 | | - @ %z(href("%R/tktview/%s",zTktName))%s(zTktName)</a></h2> |
| 1695 | | - @ |
| 1696 | | - @ <p>By %h(pTktChng->zUser) on %s(zDate). |
| 1697 | | - style_submenu_element("Raw", "Raw", "%R/artifact/%T", zUuid); |
| 1698 | | - style_submenu_element("History", "History", |
| 1699 | | - "%R/tkthistory/%s", pTktChng->zTicketUuid); |
| 1700 | | - }else{ |
| 1701 | | - @ <h2>Changes to ticket %s(zTktName)</h2> |
| 1702 | | - @ |
| 1703 | | - @ <p>By %h(pTktChng->zUser) on %s(zDate). |
| 1704 | | - @ </p> |
| 1705 | | - } |
| 1703 | + style_submenu_element("Raw", "Raw", "%R/artifact/%S", zUuid); |
| 1704 | + style_submenu_element("History", "History", "%R/tkthistory/%s", zTktName); |
| 1705 | + style_submenu_element("Page", "Page", "%R/tktview/%t", zTktName); |
| 1706 | + style_submenu_element("Timeline", "Timeline", "%R/tkttimeline/%t", zTktName); |
| 1707 | + |
| 1708 | + @ <div class="section">Overview</div> |
| 1709 | + @ <p><table class="label-value"> |
| 1710 | + @ <tr><th>Artifact ID:</th> |
| 1711 | + @ <td>%z(href("%R/artifact/%s",zUuid))%s(zUuid)</a> |
| 1712 | + if( g.perm.Setup ){ |
| 1713 | + @ (%d(rid)) |
| 1714 | + } |
| 1715 | + modPending = moderation_pending(rid); |
| 1716 | + if( modPending ){ |
| 1717 | + @ <span class="modpending">*** Moderation Pending ***</span> |
| 1718 | + } |
| 1719 | + @ <tr><th>Ticket:</th> |
| 1720 | + @ <td>%z(href("%R/tktview/%s",zTktName))%s(zTktName)</a></td></tr> |
| 1721 | + @ <tr><th>Date:</th><td> |
| 1722 | + hyperlink_to_date(zDate, "</td></tr>"); |
| 1706 | 1723 | free(zDate); |
| 1724 | + @ <tr><th>User:</th><td> |
| 1725 | + hyperlink_to_user(pTktChng->zUser, zDate, "</td></tr>"); |
| 1726 | + @ </table> |
| 1727 | + |
| 1728 | + if( g.perm.ModTkt && modPending ){ |
| 1729 | + @ <div class="section">Moderation</div> |
| 1730 | + @ <blockquote> |
| 1731 | + @ <form method="POST" action="%R/tinfo/%s(zUuid)"> |
| 1732 | + @ <label><input type="radio" name="modaction" value="delete"> |
| 1733 | + @ Delete this change</label><br /> |
| 1734 | + @ <label><input type="radio" name="modaction" value="approve"> |
| 1735 | + @ Approve this change</label><br /> |
| 1736 | + @ <input type="submit" value="Submit"> |
| 1737 | + @ </form> |
| 1738 | + @ </blockquote> |
| 1739 | + } |
| 1740 | + |
| 1741 | + @ <div class="section">Changes</div> |
| 1742 | + @ <p> |
| 1707 | 1743 | ticket_output_change_artifact(pTktChng); |
| 1708 | 1744 | manifest_destroy(pTktChng); |
| 1709 | | - if( g.perm.Setup ){ |
| 1710 | | - @ |
| 1711 | | - @ <p>These changes are implemented by artifact |
| 1712 | | - @ %z(href("%R/artifact/%s",zUuid))%s(zUuid)</a> (%d(rid)).</p> |
| 1713 | | - } |
| 1714 | 1745 | style_footer(); |
| 1715 | 1746 | } |
| 1716 | 1747 | |
| 1717 | 1748 | |
| 1718 | 1749 | /* |
| 1719 | 1750 | |