Example #1
0
    static function wikiView($args)
    {
        global $tikilib, $headerlib;
        static $Feed_ForwardLink_PageLookup = 0;
        ++$Feed_ForwardLink_PageLookup;
        $wikiAttributes = Tracker_Query::tracker('Wiki Attributes')->byName()->excludeDetails()->filter(array('field' => 'Type', 'value' => 'ForwardLink'))->filter(array('field' => 'Page', 'value' => $args['object']))->render(false)->query();
        $forwardLinks = array();
        foreach ($wikiAttributes as $wikiAttribute) {
            $forwardLinks[] = $forwardLink = json_decode($wikiAttribute['Value']);
            $forwardLink->href = urldecode($forwardLink->href);
            if (isset($forwardLink->href)) {
                $result = Feed_ForwardLink_Send::send(array('page' => $args['object'], 'forwardLink' => $forwardLink, 'textlink' => array('body' => $args['data'], 'href' => $tikilib->tikiUrl() . 'tiki-index.php?page=' . $args['object'])));
            }
        }
        $forwardLinks = json_encode($forwardLinks);
        if (!empty($forwardLinks)) {
            $headerlib->add_jq_onready(<<<JQ
\t\t\tvar forwardLinks = {$forwardLinks};
\t\t\t\$.each(forwardLinks, function() {
\t\t\t\tif (this.href) {
\t\t\t\t\t\$('<a>*</a>')
\t\t\t\t\t\t.attr('href', unescape(this.href))
\t\t\t\t\t\t.appendTo('#page-data');
\t\t\t\t}
\t\t\t});
JQ
);
        }
    }
Example #2
0
 static function findWikiRevision($phrase)
 {
     global $tikilib;
     $phrase = JisonParser_Phraser_Handler::superSanitize($phrase);
     // This query will *ALWAYS* fail if the destination page had been created/edited *PRIOR* to applying the 'Simple Wiki Attributes' profile!
     // Just recreate the destination page after having applied the profile in order to load it with the proper attributes.
     $query = Tracker_Query::tracker('Wiki Attributes')->byName()->filterFieldByValueLike('Value', $phrase)->render(false)->getLast();
     // TODO: consider adding a test on query failure in order to determine whether:
     //       1) the phrase isn't found, or
     //       2) the Simple Wiki Attributes profile wasn't in place at page-creation
     // ...then display a more meaningful error message
     if (empty($query)) {
         return false;
     }
     //couldn't find it
     $query = end($query);
     //query has a key of itemId, we just need it's details
     $version = $query['Attribute'];
     $page = $query['Page'];
     $data = $query['Value'];
     $date = $tikilib->getOne('SELECT lastModif FROM tiki_pages WHERE pageName = ? AND version = ?', array($page, $version));
     if (empty($date) == true) {
         $date = $tikilib->getOne('SELECT lastModif FROM tiki_history WHERE pageName = ? AND version = ?', array($page, $version));
     }
     return array('page' => $page, 'version' => $version, 'data' => $data, 'date' => $date, 'phrase' => $phrase);
 }
Example #3
0
 static function wikiSave()
 {
     global $page;
     //We add these to a stack that needs to be sent, rather than just sending all with the view event
     $me = new self();
     foreach ($me->getItems() as $item) {
         Tracker_Query::tracker('Wiki Attributes')->byName()->replaceItem(array('Page' => $page, 'Attribute' => $item->textlink->text, 'Value' => 'true', 'Type' => 'TextLink Send'));
     }
 }
Example #4
0
 static function wikiView($args)
 {
     return;
     global $tikilib, $headerlib;
     static $Feed_ForwardLink_PageLookup = 0;
     ++$Feed_ForwardLink_PageLookup;
     $wikiAttributes = Tracker_Query::tracker('Wiki Attributes')->byName()->excludeDetails()->filter(array('field' => 'Type', 'value' => 'ForwardLink'))->filter(array('field' => 'Page', 'value' => $args['object']))->render(false)->query();
     $forwardLinks = array();
     foreach ($wikiAttributes as $wikiAttribute) {
         $forwardLinks[] = $forwardLink = json_decode($wikiAttribute['Value']);
         if (isset($forwardLink->href)) {
             $forwardLink->href = urldecode($forwardLink->href);
             $result = Feed_ForwardLink_Send::send(array('forwardLink' => $forwardLink, 'textlink' => array('body' => $args['data'], 'href' => $tikilib->tikiUrl() . 'tiki-index.php?page=' . $args['object'])));
         }
     }
 }
Example #5
0
 private function query($values = array())
 {
     $tracker = $values['tracker'];
     $qry = Tracker_Query::tracker($tracker['value'])->start($tracker['start']['value'])->end($tracker['end']['value'])->itemId($tracker['itemId']['value'])->excludeDetails();
     if (!empty($tracker['status'])) {
         $allStatus = '';
         foreach ($tracker['status'] as $status) {
             if (!empty($status['value'])) {
                 $allStatus .= $status['value'];
             }
         }
         $qry->status($allStatus);
     }
     if (!empty($tracker['search'])) {
         for ($i = 0, $count_tracker_search = count($tracker['search']); $i < $count_tracker_search; $i++) {
             if (!empty($tracker['search'][$i]['value']) && !empty($tracker['search'][$i + 1]['value'])) {
                 $qry->filter(array("field" => trim($tracker['search'][$i]['value']), "value" => trim($tracker['search'][$i + 1]['value'])));
             }
             $i++;
             //searches are in groups of 2
         }
     }
     if (!empty($tracker['limit']['value'])) {
         $qry->limit($tracker['limit']['value']);
     }
     $result = $qry->query();
     if (!empty($tracker['fields'])) {
         $newResult = array();
         foreach ($result as $itemKey => $item) {
             $newResult[$itemKey] = array();
             foreach ($tracker['fields'] as $field) {
                 $newResult[$itemKey][$field['value']] = $result[$itemKey][$field['value']];
             }
         }
         $result = $newResult;
         unset($newResult);
     }
     foreach ($tracker['join'] as $join) {
         $result = $this->innerJoin($result, $this->query($join), $join['left']['value'], $join['right']['value']);
     }
     return $result;
 }
Example #6
0
        $trklib->remove_tracker_item($itemId);
    }
    //end delete
    header('Location: tiki-view_invoice.php?InvoiceId=' . $_REQUEST['InvoiceId']);
    die;
}
$invoiceItems = array();
if (!empty($_REQUEST['InvoiceId'])) {
    $invoice = Tracker_Query::tracker("Invoices")->byName()->equals($_REQUEST['InvoiceId'])->getOne();
    $invoice['Item Ids'] = implode(',', $invoice['Item Ids']);
    $smarty->assign("invoice", $invoice);
    $invoiceItems = Tracker_Query::tracker("Invoice Items")->byName()->fields(array("Invoice Id"))->search(array($_REQUEST['InvoiceId']))->query();
} else {
    $_REQUEST['InvoiceId'] = 0;
}
//give the user the last invoice number
$LastInvoice = Tracker_Query::tracker("Invoices")->byName()->limit(0)->offset(1)->desc(true)->excludeDetails()->getOne();
$NewInvoiceNumber = isset($LastInvoice["Invoice Number"]) ? $LastInvoice["Invoice Number"] + 1 : 1;
$smarty->assign("NewInvoiceNumber", $NewInvoiceNumber);
$smarty->assign("InvoiceId", $_REQUEST['InvoiceId']);
$smarty->assign("clients", Tracker_Query::tracker("Invoice Clients")->byName()->query());
$smarty->assign("setting", Tracker_Query::tracker("Invoice Settings")->byName()->getOne());
//we add an extra item to the end of invoiceItems, so we can duplicate it on the page
if (count($invoiceItems) < 1) {
    $invoiceItems[] = array("Quantity" => "", "Work Description" => "", "Taxable" => "", "Amount" => "");
}
$smarty->assign("invoiceItems", $invoiceItems);
$headerlib->add_jq_onready("function setupTotal() {\n\t\t\$('#InvoiceForm :input')\n\t\t\t.unbind('change')\n\t\t\t.change(function() {\n\t\t\t\tfindTotal();\n\t\t\t})\n\t\t\t.change();\n\t}\n\n\tfunction findTotal() {\n\t\tvar total = 0;\n\t\t\$('.InvoiceItem').each(function() {\n\t\t\tvar itemTotal = \$(this).find('.InvoiceQuantity').val() * \$(this).find('.InvoiceAmount').val();\n\t\t\ttotal += itemTotal;\n\t\t});\n\t\t\$('#Amount').text(total);\n\t}\n\n\tsetupTotal();\n\n\t\$('#InvoiceNewItem').click(function() {\n\t\tvar lastInvoiceItem = \$('.InvoiceItem:last');\n\t\tvar newInvoiceItem = lastInvoiceItem.clone();\n\n\t\tnewInvoiceItem.find(':input').not(':checkbox,:button').val('');\n\n\t\tnewInvoiceItem.insertAfter(lastInvoiceItem);\n\n\t\tsetupTotal();\n\t});\n\n\t\$('#InvoiceForm').click(function(e) {\n\t\tif (\$(e.target).hasClass('DeleteItem')) {\n\t\t\tif (\$('.InvoiceItem').length > 1) {\n\t\t\t\t\$(e.target).parent().parent().remove();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t\$('#InvoiceForm').submit(function() {\n\t\t\$('.InvoiceTaxable').each(function() {\n\t\t\tvar InvoiceTaxable = \$(this);\n\t\t\tif (!InvoiceTaxable.is(':checked')) {\n\t\t\t\tInvoiceTaxable\n\t\t\t\t\t.val('n')\n\t\t\t\t\t.prop('checked', 'true');\n\t\t\t}\n\t\t});\n\n\t\t\$('.InvoiceItemId').each(function() {\n\t\t\tvar InvoiceItemId = \$(this);\n\t\t\tInvoiceItemId.val(InvoiceItemId.val() ? InvoiceItemId.val() : '0');\n\t\t});\n\n\t\tvar InvoiceId = \$('#InvoiceId');\n\t\tInvoiceId.val(InvoiceId.val() ? InvoiceId.val() : 0);\n\n\t\treturn false;\n\t});");
// Display the template
$smarty->assign('mid', 'tiki-edit_invoice.tpl');
$smarty->display("tiki.tpl");
Example #7
0
require_once 'tiki-setup.php';
$access->check_feature(array('feature_time_sheet', 'feature_trackers'));
$access->check_permission_either(array('tiki_p_view_trackers', 'tiki_p_create_tracker_items'));
global $user, $prefs, $tiki_p_admin;
$auto_query_args = array('all', 'profile', 'page', 'list');
$trackerId = (int) TikiLib::lib('trk')->get_tracker_by_name('Time sheet');
$smarty->assign("tiki_p_admin", $tiki_p_admin);
$smarty->assign("timeSheetProfileLoaded", $trackerId > 0 ? true : false);
$projectList = Tracker_Query::tracker("Project list")->byName()->query();
if (isset($_REQUEST['all'])) {
    //all views all sheet items
    $smarty->assign("all", true);
    $timeSheet = Tracker_Query::tracker("Time sheet")->byName()->query();
} else {
    //views only your items
    $smarty->assign("all", false);
    $timeSheet = Tracker_Query::tracker("Time sheet")->byName()->filter(array("field" => "Done by", "value" => $user))->query();
}
if (isset($projectList)) {
    if (isset($_REQUEST['save'])) {
        echo json_encode($timeSheetNewInputs = Tracker_Query::tracker("Time sheet")->byName()->queryInput());
        die;
    }
    $smarty->assign("projectList", $projectList);
    $smarty->assign("timeSheet", $timeSheet);
}
TikiLib::lib("sheet")->setup_jquery_sheet();
$headerlib = TikiLib::lib("header")->add_cssfile("vendor/jquery/jtrack/css/jtrack.css")->add_jsfile("vendor/jquery/jtrack/js/domcached-0.1-jquery.js")->add_jsfile("vendor/jquery/jtrack/js/jtrack.js")->add_jq_onready("jTask.init();\n\n\t\$.timesheetSpreadsheet = function() {\n\t\tvar table = \$('<table title=/>').attr('title', tr('Local Cache (Not Committed)'));\n\t\ttable.append('<tr><td>Summary</td><td>Estimate</td><td>Time Spent</td></tr>');\n\n\t\tvar rowI = 1;\n\t\tfor (var namespace in \$.DOMCached.getStorage()) {\n\t\t\tvar row = \$('<tr />').appendTo(table);\n\n\t\t\trow.append('<td>' + namespace + '</td>');\n\t\t\trow.append('<td>' + \$.DOMCached.get('estimate', namespace) + '</td>');\n\t\t\trow.append('<td formula=\\'ROUND(' + (\$.DOMCached.get('timer', namespace) / 60) + ', 2)\\'></td>');\n\t\t\trowI++;\n\t\t}\n\t\tvar row = \$('<tr />').appendTo(table);\n\t\trow.append('<td>Totals</td>');\n\t\trow.append('<td formula=\\'ROUND(SUM(B2:B' + rowI + '), 2)\\'/>');\n\t\trow.append('<td formula=\\'=ROUND(SUM(C2:C' + rowI + '), 2)\\' />');\n\n\t\t\$('#timesheetSpreadsheet').siblings().remove();\n\n\t\tvar jS = \$('#timesheetSpreadsheet').getSheet();\n\t\tif (jS) {\n\t\t\t\$('#timesheetSpreadsheet')\n\t\t\t\t.unbind('visible')\n\t\t\t\t.visible(function() {\n\t\t\t\t\tjS.openSheet(table);\n\t\t\t\t});\n\t\t} else {\n\t\t\t\$('#timesheetSpreadsheet')\n\t\t\t\t.visible(function() {\n\t\t\t\t\t\$(this).sheet({\n\t\t\t\t\t\tbuildSheet: table,\n\t\t\t\t\t\teditable: false,\n\t\t\t\t\t\theight: \$('#jtrack-holder').height()\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t};\n\n\t\$('.jtrack-create,.jtrack-update,.jtrack-remove,.jtrack-remove-all,.jtrack-cancel,.jtrack-power,#jtrack-button-remove,#jtrack-button-remove-all,#jtrack-button-create,#jtrack-button-update').on('click', function() {\n\t\t\$.timesheetSpreadsheet();\n\t});\n\n\t\$.timesheetSpreadsheet();\n\n\t\$('#timeSheetSaved').visible(function() {\n\t\t\$(this).sheet({\n\t\t\tbuildSheet: true,\n\t\t\teditable: false,\n\t\t\theight: \$('#jtrack-holder').height()\n\t\t});\n\t});\n\n\t\$('#timeSheetCommit').click(function() {\n\t\t\$('#timeSheetTabs').tikiModal(tr('Committing...'));\n\t\tvar stack = [];\n\t\t\$.getJSON('tiki-timesheet.php?save', function(inputs) {\n\t\t\tfor (var namespace in \$.DOMCached.getStorage()) {\n\t\t\t\tvar summary = namespace + '',\n\t\t\t\ttime =  \$.DOMCached.get('timer', summary) / 60;\n\t\t\t\tstack.push(summary);\n\n\t\t\t\tvar form = \$('<form />').submit(function() {\n\t\t\t\t\tvar fields = '';\n\n\t\t\t\t\t\$.each(form.serializeArray(), function() {\n\t\t\t\t\t\tfields += '&fields[' + this.name + ']=' + this.value;\n\t\t\t\t\t});\n\n\t\t\t\t\t\$.post('tiki-ajax_services.php?controller=tracker&trackerId={$trackerId}&action=insert_item' + fields,function() {\n\t\t\t\t\t\t\$.DOMCached.deleteNamespace(namespace);\n\n\t\t\t\t\t\tstack.pop();\n\n\t\t\t\t\t\tif (stack.length == 0) {\n\t\t\t\t\t\t\tdocument.location = document.location + '';\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.error(function() {\n\t\t\t\t\t\t\$('#timeSheetTabs').tikiModal();\n\t\t\t\t\t\talert(tr('Could not save'));\n\t\t\t\t\t});\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tvar input = {\n\t\t\t\t\t'Summary': \$(inputs['Summary']),\n\t\t\t\t\t'Description': \$(inputs['Description']),\n\t\t\t\t\t'Amount of time spent': \$(inputs['Amount of time spent']),\n\t\t\t\t\t'Done by': \$(inputs['Done by'])\n\t\t\t\t};\n\n\t\t\t\tinput['Summary'].val(summary);\n\t\t\t\tinput['Amount of time spent'].val(time);\n\t\t\t\tinput['Done by'].val('" . addslashes($user) . "');\n\t\t\t\tform.append(input['Summary']);\n\t\t\t\tform.append(input['Description']);\n\t\t\t\tform.append(input['Amount of time spent']);\n\t\t\t\tform.append(input['Done by']);\n\t\t\t\tform.submit();\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t});\n\n\t\$('#timeSheetTabs')\n\t\t.width(\$('#timeSheetTabs').parent().width())\n\t\t.tabs();");
$smarty->assign('mid', 'tiki-timesheet.tpl');
// use tiki_full to include include CSS and JavaScript
$smarty->display("tiki.tpl");
Example #8
0
 static function wikiView($args)
 {
     global $prefs, $headerlib, $smarty, $_REQUEST, $user;
     $page = $args['object'];
     $version = $args['version'];
     $date = $args['lastModif'];
     if (isset($_REQUEST['itemId'])) {
         self::getQuestionInputs($page, $_REQUEST['itemId']);
     }
     //self::getTimeStamp();
     $phrase = !empty($_REQUEST['phrase']) ? addslashes(htmlspecialchars($_REQUEST['phrase'])) : '';
     self::goToPhraseExistence($phrase, $page, $version);
     self::restorePhrasesInWikiPage($page, $phrase);
     $questions = Tracker_Query::tracker('Wiki Attributes')->byName()->filter(array('field' => 'Type', 'value' => 'Question'))->filter(array('field' => 'Page', 'value' => $page))->query();
     self::editQuestionsInterface($page, $questions);
     self::createForwardLinksInterface($page, $questions, $date);
 }
Example #9
0
 function _load(&$sheet)
 {
     $tikilib = TikiLib::lib('tiki');
     $i = 0;
     $trackerName = $this->info['name'];
     $tracker = Tracker_Query::tracker($trackerName)->byName()->excludeDetails()->render(false)->query();
     foreach ($tracker as $item) {
         $j = 0;
         foreach ($item as $key => $field) {
             $sheet->initCell($i, $j);
             if (!empty($field[0]) && $field[0] == '=') {
                 $sheet->setCalculation(substr($field, 1));
             }
             $sheet->setValue($i == 0 ? $key : $field);
             $sheet->setSize(1, 1);
             $j++;
         }
         $i++;
     }
     return true;
 }
Example #10
0
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id: tiki-view_invoice.php 44444 2013-01-05 21:24:24Z changi67 $
require_once 'tiki-setup.php';
$trklib = TikiLib::lib('trk');
$access->check_feature('feature_invoice');
$access->check_permission('tiki_p_admin');
//check if profile is created
if ($trklib->get_tracker_by_name("Invoice Items") < 1) {
    $smarty->assign('msg', tra('You need to apply the "Invoice" profile'));
    $smarty->display("error.tpl");
    die;
}
(int) ($_REQUEST['InvoiceId'] = $_REQUEST['InvoiceId']);
$smarty->assign('InvoiceId', $_REQUEST['InvoiceId']);
$invoice = Tracker_Query::tracker("Invoices")->byName()->equals($_REQUEST['InvoiceId'])->getOne();
$amount = 0;
if (is_array($invoice["Item Amounts"])) {
    foreach ($invoice["Item Amounts"] as $key => $sum) {
        $amount += $invoice["Item Amounts"][$key] * $invoice["Item Quantities"][$key];
    }
} else {
    $amount = $invoice["Item Amounts"] * $invoice["Item Quantities"];
}
$smarty->assign("invoice", $invoice);
$smarty->assign("amount", $amount);
$smarty->assign("client", Tracker_Query::tracker("Invoice Clients")->fields(array("Client Id"))->equals(array($invoice['Client Id']))->byName()->getOne());
$smarty->assign("setting", Tracker_Query::tracker("Invoice Settings")->byName()->query());
$smarty->assign("invoiceItems", Tracker_Query::tracker("Invoice Items")->fields(array("Invoice Id"))->equals(array($_REQUEST['InvoiceId']))->byName()->query());
// Display the template
$smarty->assign('mid', 'tiki-view_invoice.tpl');
$smarty->display("tiki.tpl");
Example #11
0
 function appendToContents(&$contents, $item)
 {
     global $prefs, $_REQUEST;
     if ($this->debug == true) {
         ini_set('error_reporting', E_ALL);
         ini_set('display_errors', 1);
     }
     $this->itemsAdded = false;
     foreach ($item->feed->entry as $i => $newEntry) {
         $this->verifications[$i] = array();
         $this->verifications[$i]["reason"] = array();
         //lets remove the new entry if it has already been accepted in the past
         foreach ($contents->entry as &$existingEntry) {
             if ($existingEntry->textlink->text == $newEntry->textlink->text && $existingEntry->textlink->href == $newEntry->textlink->href) {
                 $this->verifications[$i]['reason'][] = 'exists';
                 unset($item->feed->entry[$i]);
             }
         }
         $revision = Feed_ForwardLink_Search::findWikiRevision($newEntry->forwardlink->text);
         $this->verifications[$i]["hashBy"] = JisonParser_Phraser_Handler::superSanitize($newEntry->forwardlink->author . $newEntry->forwardlink->authorInstitution . $newEntry->forwardlink->authorProfession);
         $this->verifications[$i]['foundRevision'] = $revision;
         $this->verifications[$i]["metadataHere"] = $this->metadata->raw;
         $this->verifications[$i]["phraseThere"] = JisonParser_Phraser_Handler::superSanitize($newEntry->forwardlink->text);
         $this->verifications[$i]["hashHere"] = hash_hmac("md5", $this->verifications[$i]["hashBy"], $this->verifications[$i]["phraseThere"]);
         $this->verifications[$i]["hashThere"] = $newEntry->forwardlink->hash;
         $this->verifications[$i]['exists'] = JisonParser_Phraser_Handler::hasPhrase($revision['data'], $this->verifications[$i]["phraseThere"]);
         if ($this->verifications[$i]['hashHere'] != $this->verifications[$i]['hashThere']) {
             $this->verifications[$i]['reason'][] = 'hash_tampering';
             unset($item->feed->entry[$i]);
         }
         if ($newEntry->forwardlink->websiteTitle != $prefs['browsertitle']) {
             $this->verifications[$i]['reason'][] = 'title';
             unset($item->feed->entry[$i]);
         }
         if ($this->verifications[$i]['exists'] == false) {
             if (empty($this->verifications[$i]['reason'])) {
                 $this->verifications[$i]['reason'][] = 'no_existence_hash_pass';
             } else {
                 $this->verifications[$i]['reason'][] = 'no_existence';
             }
             unset($item->feed->entry[$i]);
         }
         foreach ($newEntry->forwardlink as $key => $value) {
             if (isset(Feed_ForwardLink_Metadata::$acceptableKeys[$key]) && Feed_ForwardLink_Metadata::$acceptableKeys[$key] == true) {
                 //all clear
             } else {
                 $this->verifications[$i]['reason'][] = 'metadata_tampering' . ($this->debug == true ? $key : '');
                 unset($item->feed->entry[$i]);
             }
         }
         foreach ($newEntry->textlink as $key => $value) {
             if (isset(Feed_ForwardLink_Metadata::$acceptableKeys[$key]) && Feed_ForwardLink_Metadata::$acceptableKeys[$key] == true) {
                 //all clear
             } else {
                 $this->verifications[$i]['reason'][] = 'metadata_tampering' . ($this->debug == true ? $key : '');
                 unset($item->feed->entry[$i]);
             }
         }
     }
     if (empty($item->feed->entry) == false) {
         $this->itemsAdded = true;
         foreach ($item->feed->entry as &$entry) {
             Tracker_Query::tracker('Wiki Attributes')->byName()->replaceItem(array('Page' => $this->page, 'Attribute' => '', 'Value' => $entry->forwardlink->text, 'Type' => 'ForwardLink Accepted'));
         }
         if (empty($contents->entry) == true) {
             $contents->entry = array();
         }
         $contents->entry = array_merge($contents->entry, $item->feed->entry);
     }
 }
function wikiplugin_trackeritemcopy( $data, $params )
{
	global $smarty;
	$trklib = TikiLib::lib("trk");
	
	if (!isset($params["trackerId"]) || !isset($params["copyFieldIds"])) {
		return tra('Missing mandatory parameters');
	} else {
		$trackerId = $params["trackerId"];
		if (is_array($trackerId) == false) $trackerId = array($trackerId);
		$copyFieldIds = $params["copyFieldIds"];
	}
	
	$smarty->assign('itemIdSet', 'n');
	$itemId = 0;
	
	if (isset($params["itemId"])) {
		$itemId = $params["itemId"];
		$smarty->assign('itemIdSet', 'y');
	} elseif (isset($_POST["itemIdToCopy"])) {
		$itemId = $_POST["itemIdToCopy"];
	} 

	if ($_SERVER['REQUEST_METHOD'] == 'POST') {
		
		function items_copy($trackerId, $updateFieldIds, $updateFieldValues, $copyFieldIds, $itemIds, $linkFieldId, $itemLinkId, $copies)
		{
			global $trklib, $_POST;
			
			if (is_array($itemIds) == false) $itemIds = array($itemIds);
			
			foreach ($itemIds as $itemId) {
				$tracker_fields_info = $trklib->list_tracker_fields($trackerId);
				
				$fieldTypes = array();
				$fieldOptionsArray = array();
				
				foreach ($tracker_fields_info['data'] as $t) {
					$fieldTypes[$t['fieldId']] = $t['type'];
					$fieldOptionsArray[$t['fieldId']] = $t['options_array'];
				}
				
				$ins_fields["data"] = array();
				
				if (isset($linkFieldId) && isset($itemLinkId)) {
					$updateFieldIds[] = $linkFieldId;
					$updateFieldValues[] = $itemLinkId;
				}
				
				//print_r(array($trackerId, $updateFieldIds, $updateFieldValues, $copyFieldIds, $itemIds, $linkFieldId, $itemLinkId, $copies));
				
				for ($i = 0, $count_updateFieldIds = count($updateFieldIds); $i < $count_updateFieldIds; $i++) {
					$ins_fields["data"][] = array(
						'options_array' => $fieldOptionsArray[$updateFieldIds[$i]], 
						'type' => $fieldTypes[$updateFieldIds[$i]], 
						'fieldId' => $updateFieldIds[$i], 
						'value' => $updateFieldValues[$i]
					);
				}
				
				// CUSTOM: this part is totally custom to store admin notes (how to generalize?)
				if (!empty($_POST['admin_notes_for_copy'])) {
					$ins_fields["data"][] = array(
						'type' => 'a',
						'fieldId' => 118,
						'value' => $_POST['admin_notes_for_copy']
					);
				}
				// end totally CUSTOM part
				
				$newitems = array();
				for ($i = 0; $i < $copies; $i++) {
					// Check for -randomstring- and f_xx
					$ins_fields_final["data"] = array();
					foreach ($ins_fields["data"] as $h) {
						if ($h["value"] == '-randomstring-') {
							$h["value"] = $trklib->genPass();
						} else if (substr($h["value"], 0, 2) == 'f_') {
							$sourceFieldId = (int) trim(substr($h["value"], 2));
							$h["value"] = $trklib->get_item_value($trackerId, $itemId, $sourceFieldId);
						}
						$ins_fields_final["data"][] = $h; 
					}
					$newitemsdata[] = $ins_fields_final["data"];
					$newitems[] = $trklib->replace_item($trackerId, 0, $ins_fields_final);		
				}
				
				foreach ($newitems as $n) {
					$trklib->copy_item($itemId, $n, null, $copyFieldIds);
					$newitemslist .= '  ' . $n;
				}
			}
			
			return array(
				"items" => $newitems,
				"data" => $newitemsdata,
				"list" => $newitemslist
			);
		}
		
		$return_array = array();
		$itemIds = array();
		
		foreach ($trackerId as $key => $trackerIdLeft) {
			//ensure that the fields are set and usable
			if (isset($params["updateFieldIds"]) || isset($params["updateFieldValues"])) {
				$updateFieldIds = $params["updateFieldIds"];
				$updateFieldValues = $params["updateFieldValues"];
				
				foreach ($updateFieldIds as $key => $updateFieldId) {
					if (count($updateFieldIds[$key]) != count($updateFieldValues[$key])) {
						return tra('Number of update fields do not match new values');
					}
				}
				
				$copyFieldIds[$key] = array_diff($copyFieldIds[$key], $updateFieldIds);
			}
			
			if ($_SERVER['REQUEST_METHOD'] == 'POST' && $itemId && isset($_POST['copytrackeritem']) && isset($_POST['numberofcopies'])) {
				$copies = (int) $_POST['numberofcopies'];
			} elseif (isset($params['copies_on_load'])) {
				$copies = (int) $params['copies_on_load']; 
			} else {
				$copies = 0;
			}
			
			if ($copies > 0) {
				
				if ($key > 0) {
					$qry = Tracker_Query::tracker($trackerIdLeft)
						->fields($params["linkFieldIds"][0])
						->equals(array($itemId));
						
					$itemIds = array();
					foreach ($qry as $linkedItemIds => $item) {
						$itemIds[] = $linkedItemIds;
					}
				}
				
				$return_array[] = items_copy(
								$trackerId[$key], 
								$updateFieldIds[$key], 
								$updateFieldValues[$key], 
								$copyFieldIds[$key], 
								(
									$key == 0 ? $itemId : $itemIds
								),
								(
									$key == 0 ? null : $params["linkFieldIds"][$key - 1]
								),
								(
									$key == 0 ? null : $return_array[0]['items'][0]
								),
								$copies
				);
			}

		}
		
		$smarty->assign('newitemslist', $return_array['list']);
		
		if ($params['return_array'] == 'y') {
			if (count($return_array) == 1) { //backward compatible
				return $return_array[0];
			} else {
				return $return_array;
			}
		}
	
	}
	
	return $smarty->fetch('wiki-plugins/wikiplugin_trackeritemcopy.tpl');
}
Example #13
0
 public function minimumStatisticsNeeded($out = true)
 {
     if (empty($this->minimumStatisticsNeeded)) {
         $this->minimumStatisticsNeeded = Tracker_Query::tracker('Wiki Attributes')->byName()->filterFieldByValue('Type', 'Minimum Statistics Needed')->filterFieldByValue('Page', $this->page)->render(false)->query();
     }
     if ($out == true) {
         return $this->endValue($this->minimumStatisticsNeeded, true);
     }
     return $this->minimumStatisticsNeeded;
 }
        if ($key == 0) {
            $trackerPrimary = Tracker_Query::tracker($trackerId)->start($_REQUEST['start'][$key])->end($_REQUEST['end'][$key])->equals($_REQUEST['q'][$key])->search($_REQUEST['search'][$key])->fields($_REQUEST['fields'][$key])->status($_REQUEST['status'][$key])->query();
        } else {
            $joinVars = $_REQUEST['itemIdFields'][$key - 1];
            $joinVars = explode('|', $joinVars);
            $trackerPrimary = Tracker_Query::join_trackers($trackerPrimary, Tracker_Query::tracker($trackerId)->start($_REQUEST['start'][$key])->end($_REQUEST['end'][$key])->equals($_REQUEST['q'][$key])->search($_REQUEST['search'][$key])->fields($_REQUEST['fields'][$key])->status($_REQUEST['status'][$key])->query(), $joinVars[0], $joinVars[1]);
        }
        $i++;
    }
}
if (isset($_REQUEST['sortFieldIds']) == true) {
    Tracker_Query::arfsort($trackerPrimary, $_REQUEST['sortFieldIds']);
}
if (isset($_REQUEST['removeFieldIds']) == true || isset($_REQUEST['showFieldIds']) == true) {
    $trackerPrimary = Tracker_Query::filter_fields_from_tracker_query($trackerPrimary, $_REQUEST['removeFieldIds'], $_REQUEST['showFieldIds']);
}
if (isset($_REQUEST['dateFieldIds'])) {
    $trackerPrimary = dateFormat($_REQUEST['dateFieldIds'], $trackerPrimary);
}
$trackerPrimary = Tracker_Query::prepend_field_header($trackerPrimary, $_REQUEST['sortFieldNames']);
if (isset($_REQUEST['time']) == true) {
    $endtime = microtime();
    $endarray = explode(" ", $endtime);
    $endtime = $endarray[1] + $endarray[0];
    $totaltime = $endtime - $starttime;
    $totaltime = round($totaltime, 5);
    echo "This page loaded in {$totaltime} seconds.\n\n\n";
}
if ($_REQUEST['type'] == 'csv' && count($trackerPrimary) > 0) {
    print_r(Tracker_Query::to_csv($trackerPrimary));
}
Example #15
0
    if (is_array($Invoice["Item Amounts"])) {
        foreach ($Invoice["Item Amounts"] as $Key => $sum) {
            $Amount += $Invoice["Item Amounts"][$Key] * $Invoice["Item Quantities"][$Key];
        }
    } else {
        $Amount = $Invoice["Item Amounts"] * $Invoice["Item Quantities"];
    }
    $Invoices[$I]["Amount"] = $Amount;
    if (is_array($Invoice["Amounts Paid"])) {
        foreach ($Invoice["Amounts Paid"] as $Sum) {
            $Paid += $Sum;
        }
    } else {
        $Paid = $Invoice["Amounts Paid"];
    }
    $Invoices[$I]["Paid"] = $Paid;
    if ($Amount == $Paid) {
        $Status = "Paid";
    } else {
        $Status = "Open";
    }
    $Invoices[$I]["Status"] = $Status;
}
$smarty->assign("Invoices", $Invoices);
$smarty->assign("Settings", Tracker_Query::tracker("Invoice Settings")->byName()->query());
$smarty->assign("Amount", $Amount);
$smarty->assign("Paid", $Paid);
$smarty->assign("Status", $Status);
// Display the template
$smarty->assign('mid', 'tiki-list_invoices.tpl');
$smarty->display("tiki.tpl");
Example #16
0
 function action_get_item_inputs($input)
 {
     $trackerId = $input->trackerId->int();
     $trackerName = $input->trackerName->string();
     $itemId = $input->itemId->int();
     $byName = $input->byName->bool();
     $defaults = $input->defaults->array();
     $this->trackerNameAndId($trackerId, $trackerName);
     $definition = Tracker_Definition::get($trackerId);
     if (!$definition) {
         throw new Services_Exception_NotFound();
     }
     $itemObject = Tracker_Item::newItem($trackerId);
     if (!$itemObject->canModify()) {
         throw new Services_Exception_Denied();
     }
     $query = Tracker_Query::tracker($byName ? $trackerName : $trackerId)->itemId($itemId);
     if ($input > 0) {
         $query->byName();
     }
     if (!empty($defaults)) {
         $query->inputDefaults($defaults);
     }
     $inputs = $query->queryInput();
     return $inputs;
 }
} else {
	$amount = $invoice["Item Amounts"] * $invoice["Item Quantities"];
}

$smarty->assign("invoice", $invoice);
$smarty->assign("amount", $amount);
$smarty->assign(
				"client",
				Tracker_Query::tracker("Invoice Clients")
				->fields(array("Client Id"))->equals(array($invoice['Client Id']))
				->byName()
				->getOne()
);
$smarty->assign(
				"setting", 
				Tracker_Query::tracker("Invoice Settings")
				->byName()
				->query()
);
$smarty->assign(
				"invoiceItems", 
				Tracker_Query::tracker("Invoice Items")
				->fields(array("Invoice Id"))->equals(array($_REQUEST['InvoiceId']))
				->byName()
				->query()
);

// Display the template
$smarty->assign('mid', 'tiki-view_invoice.tpl');
$smarty->display("tiki.tpl");
function wikiplugin_trackerquerytemplate($data, $params)
{
    global $tikilib;
    $params = array_merge(array('tracker' => '', 'debug' => '', 'byname' => 'y', 'render' => 'y', 'likefilters' => '', 'andfilters' => '', 'getlast' => ''), $params);
    if (!empty($params['itemids'])) {
        $itemIds = $params['itemids'];
        unset($params['itemids']);
        $newData = '';
        foreach ($itemIds as $itemId) {
            if (!empty($itemId)) {
                $params['itemid'] = $itemId;
                $newData .= wikiplugin_trackerquerytemplate($data, $params);
            }
        }
        return $newData;
    }
    $handler = new dataToFieldHandler();
    foreach ($params as &$param) {
        //We parse the variables
        $param = $handler->parse($param);
    }
    $query = Tracker_Query::tracker($params['tracker'])->excludeDetails();
    $pattern = 'id';
    if (!empty($params['byname']) && $params['byname'] == 'y') {
        $query->byName();
        $pattern = 'name';
    }
    if (!empty($params['render']) && $params['render'] == 'n') {
        $query->render(false);
    }
    if (!empty($params['itemid']) || isset($_REQUEST['itemId'])) {
        if (isset($_REQUEST['itemId'])) {
            //itemId overrides parameters
            $query->itemId($_REQUEST['itemId']);
            unset($_REQUEST['itemId']);
            //we unset because nested plugins may need to have itemId set
        } else {
            $query->itemId($params['itemid']);
        }
    }
    if (!empty($params['likefilters'])) {
        $likefilters = explode(';', $params['likefilters']);
        foreach ($likefilters as $likefilter) {
            $filter = explode(':', $likefilter);
            $query->filterFieldByValueLike($filter[0], $filter[1]);
        }
    }
    if (!empty($params['andfilters'])) {
        $andfilters = explode(';', $params['andfilters']);
        foreach ($andfilters as $andfilter) {
            $filter = explode(':', $andfilter);
            $query->filterFieldByValue($filter[0], $filter[1]);
        }
    }
    if (!empty($params['orfilters'])) {
        $orfilters = explode(';', $params['orfilters']);
        foreach ($orfilters as $orfilter) {
            $filter = explode(':', $orfilter);
            $query->filterFieldByValueOr($filter[0], $filter[1]);
        }
    }
    if (!empty($params['debug']) && $params['debug'] == 'y') {
        $query->debug();
    }
    if (!empty($params['getlast']) && $params['getlast'] == 'y') {
        $items = $query->getLast();
    } else {
        $items = $query->query();
    }
    $newData = '';
    foreach ($items as $itemId => $fields) {
        $trackerId = $query->trackerId();
        $handler->set($pattern, $fields, $query->itemsRaw[$itemId], $itemId, $trackerId);
        $newData .= $handler->parse($data);
        $newData = "~np~" . $tikilib->parse_data($newData, array('is_html' => true)) . "~/np~";
        $handler->pop();
    }
    return $newData;
}
	$timeSheet = Tracker_Query::tracker("Time sheet")
		->byName()
		->query();
} else {//views only your items
	$smarty->assign("all", false);
	
	$timeSheet = Tracker_Query::tracker("Time sheet")
		->byName()
		->filter(array("field" => "Done by", "value" => $user))
		->query();
}

if (isset($projectList)) {
	if (isset($_REQUEST['save'])) {
		echo json_encode(
			$timeSheetNewInputs = Tracker_Query::tracker("Time sheet")
				->byName()
				->queryInput()
		);
		die;
	}

	$smarty->assign("projectList", $projectList);
	$smarty->assign("timeSheet", $timeSheet);
}

TikiLib::lib("sheet")->setup_jquery_sheet();

$headerlib = TikiLib::lib("header")
	->add_cssfile("lib/jquery/jtrack/css/jtrack.css")
	->add_jsfile("lib/jquery/jtrack/js/domcached-0.1-jquery.js")