function __construct()
 {
     $this->rtStructs = getAllRectypeStructures(true);
     $this->dtStructs = getAllDetailTypeStructures(true);
     $this->dtTerms = getTerms(true);
     $this->loaded_recs = array();
 }
Beispiel #2
0
 function menuData($pos, $parentID = '0')
 {
     $CI =& get_instance();
     $menu = getTerms('menu_' . $pos . "_" . getThemeActive(), $parentID, 'order_term ASC');
     if (!empty($menu)) {
         return $menu;
     } else {
         return null;
     }
 }
Beispiel #3
0
function processRecords($docs)
{
    global $fields;
    $N = $docs->response->numFound;
    foreach ($docs->response->docs as $doc) {
        // echo $doc->id, "\n";
        foreach ($fields as $field) {
            if (isset($doc->{$field})) {
                foreach ($doc->{$field} as $value) {
                    $terms = getTerms($field, $value);
                    $total = getWeights($field, $terms, $N);
                    // printf("\t%s: %s ==> %s\n", $field, $value, $total);
                    printf("%s ==> %s\n", (int) ($total * 100), $value);
                }
            }
        }
    }
}
function upload_termsfile($parent_id, $domain, $has_codes, $has_descr)
{
    if (!@$_REQUEST['uploading']) {
        return null;
    }
    if (!$_FILES['import_file']['size']) {
        return array('error' => 'Error occurred during import - file had zero size');
    }
    $filename = $_FILES['import_file']['tmp_name'];
    $parsed = array();
    $row = 0;
    if (($handle = fopen($filename, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            if ($num > 0) {
                if ($has_codes) {
                    $code = substr(trim($data[0]), 0, 99);
                    $ind = 1;
                } else {
                    $code = '';
                    $ind = 0;
                }
                if ($num > $ind) {
                    $label = substr(trim($data[$ind]), 0, 399);
                    $len = strlen($label);
                    if ($len > 0 && $len < 400) {
                        $desc = "";
                        if ($has_descr) {
                            $ind++;
                            for ($c = $ind; $c < $num; $c++) {
                                if ($c > 1) {
                                    $desc = $desc . ",";
                                }
                                $desc = $desc . $data[$c];
                            }
                        }
                        array_push($parsed, array($code, $label, substr($desc, 0, 999), $domain, $parent_id, 1));
                        $row++;
                    }
                }
            }
        }
    }
    if ($handle) {
        fclose($handle);
    }
    if ($row == 0) {
        return array('error' => 'No one appropriate line found');
    }
    $db = mysqli_connection_overwrite(DATABASE);
    //artem's
    $colNames = array('trm_Code', 'trm_Label', 'trm_Description', 'trm_Domain', 'trm_ParentTermID', 'trm_AddedByImport');
    $rv['parent'] = $parent_id;
    $rv['result'] = array();
    //result
    foreach ($parsed as $ind => $dt) {
        $res = updateTerms($colNames, "1-1", $dt, $db);
        array_push($rv['result'], $res);
    }
    $rv['terms'] = getTerms();
    $db->close();
    return $rv;
}
        $res = updateTitleMask($rectypes_correspondence[$rtyID], $mask);
        if (!is_numeric($res)) {
            error_exit($res);
        }
    }
}
$mysqli->commit();
$mysqli->close();
// ------------------------------------------------------------------------------------------------
// Confirmation of import results
if ($outputFormat == "json") {
    header("Content-type: text/javascript");
} else {
    $trg_rectypes = getAllRectypeStructures();
    $trg_fieldtypes = getAllDetailTypeStructures();
    $trg_terms = getTerms();
    ?>

    <html>

        <head>
            <link rel="stylesheet" type="text/css" href="../../../common/css/global.css">
            <meta http-equiv="content-type" content="text/html; charset=utf-8">
        </head>

        <body class="popup" title="Annotated template import">

            <h4>Record type and associated structures imported</h4>

            <hr />
$return_res = "";
if (@$_REQUEST['domain'] == null) {
    echo "Terms domain is not defined";
} else {
    if ($parent_id == null) {
        echo "Parent vocabulary is not defined";
    } else {
        if (@$_REQUEST['process'] == "action") {
            if (@$_REQUEST['name'] == null || $_REQUEST['name'] == "") {
                echo "<div style='color:red'>Display name is mandatory!</div>";
            } else {
                $db = mysqli_connection_overwrite(DATABASE);
                //artem's
                $res = updateTerms(array('trm_Label', 'trm_Description', 'trm_Domain', 'trm_ParentTermID', 'trm_Status', 'trm_Code'), $parent_id . "-1", array($_REQUEST['name'], $_REQUEST['description'], $_REQUEST['domain'], $parent_id == 0 ? null : $parent_id, "open", $_REQUEST['code']), null);
                if (is_numeric($res)) {
                    echo "<script>top.HEURIST.terms = \n" . json_format(getTerms(), true) . ";\n</script>";
                    echo "<div style='color:green'>New term has been added successfully</div>";
                    $return_res = $parent_id == 0 ? $res : "ok";
                } else {
                    echo "<div style='color:red'>" . $res . "</div>";
                    //error
                }
            }
        }
    }
}
?>
<script type="text/javascript">

	var return_res = "<?php 
echo $return_res;
Beispiel #7
0
                        print "<br />" . implode("<br />", $mapping_rt_errors2) . '</p>';
                    }
                    if (count($mapping_dt_errors) > 0) {
                        print "<p style='color:red'><br />Issues with base field (detail) types:<br />" . implode("<br />", $mapping_dt_errors) . '</p>';
                    }
                    print "<p style='color:red'>Please import them from the Heurist_Reference_Set database (# 3) using Database > Structure > From Databases</p>";
                    print "</div>";
                }
            }
        }
    }
} else {
    if ($step == '2') {
        //second step - sync
        $alldettypes = getAllDetailTypeStructures();
        $allterms = getTerms();
        $fi_dettype = $alldettypes['typedefs']['fieldNamesToIndex']['dty_Type'];
        $fi_constraint = $alldettypes['typedefs']['fieldNamesToIndex']['dty_PtrTargetRectypeIDs'];
        $fi_trmlabel = $allterms['fieldNamesToIndex']['trm_Label'];
        $report_log = "";
        $unresolved_pointers = array();
        // 1) start loop: fetch items by 100
        $cnt_updated = 0;
        $cnt_added = 0;
        $cnt_ignored = 0;
        $arr_ignored = array();
        $start = 0;
        $fetch = min($_REQUEST['cnt'], 100);
        $totalitems = $_REQUEST['cnt'];
        $new_recid = 0;
        $isFailure = false;
Beispiel #8
0
        <meta property="og:image" content="<?php 
    echo $HTTPROOTADDRESS;
    ?>
img/csh_og.png">
        <?php 
}
?>
	</head>
	<body ng-init="defaultTerm = '<?php 
echo $CURRENT_QUARTER;
?>
'; stateVersion = <?php 
echo $JSSTATE_VERSION;
?>
; termList=<?php 
echo htmlspecialchars(json_encode(getTerms()));
?>
; globalUI = {layoutClass:'default'};" ng-class="globalUI.layoutClass">
		<div id="superContainer" ng-controller="AppController">
			<header class="main navbar navbar-fixed-top navbar-default ng-scope">
	            <div class="container">
	                <div class="navbar-header">
	                    <button type="button" class="navbar-toggle btn btn-default" data-toggle="collapse" data-target=".navbar-ex1-collapse">
	                        <span class="sr-only">Toggle navigation</span>
	                        <span class="icon-bar"></span>
	                        <span class="icon-bar"></span>
	                        <span class="icon-bar"></span>
	                    </button>
	                    <a class="navbar-brand" ui-sref="index">Schedule<strong>Maker</strong></a>
	                </div>
	                <div class="collapse navbar-collapse navbar-right navbar-ex1-collapse" nav-close-on-mobile>
function createTermsOptions($config, $type)
{
    global $sourcedbname, $db_prefix, $dbPrefix, $is_h2;
    $sourcedb = $db_prefix . $sourcedbname;
    $entnames = getTerms();
    //in current database
    $entnames = $entnames['termsByDomainLookup'][$type];
    foreach ($entnames as $id => $name) {
        $entnames[$id] = $name[0];
    }
    $seloptions = createOptions("ot", $entnames);
    print "<h3>Term mappings ({$type}" . "s)" . "</h3>[Term code] <b>{$sourcedb}</b> ==> <b>{$dbPrefix}" . HEURIST_DBNAME . "</b><p>";
    // . "<p>";
    // Get the term mapping, by default assume that the code is unchanged so select the equivalent term if available
    if ($is_h2) {
        $query1 = "SELECT DISTINCT `rdl_id`,`rdl_id`,`rd_val` FROM `{$sourcedb}`.`rec_details`,`{$sourcedb}`.`rec_detail_lookups` " . "where (`rd_type`=`rdl_rdt_id`) AND (`rdl_value`=`rd_val`) AND (`rdl_related_rdl_id` is " . ($type != 'enum' ? "not" : "") . " null)";
    } else {
        if ($type != 'enum') {
            $type = 'relationtype';
        }
        $query1 = "SELECT DISTINCT `dtl_Value`,`trm_ID`,`trm_Label` FROM `{$sourcedb}`.`recDetails`,`{$sourcedb}`.`defTerms` " . "where (`dtl_Value`=`trm_ID`) AND (`dtl_DetailTypeID` in (select `dty_ID` from `{$sourcedb}`.`defDetailTypes` " . "where (`dty_Type`='{$type}') ))";
    }
    $res1 = mysql_query($query1);
    print "<table>";
    while ($row1 = mysql_fetch_array($res1)) {
        $tt = $row1[0];
        //0=trm_ID
        $selopts = $seloptions;
        //find the closest name
        $selectedId = getPresetId($config, "cbt" . $tt);
        if (!$selectedId) {
            //find the closest name
            $selectedId = findClosestName($row1[2], $entnames);
            //trm_Label
        }
        if ($selectedId) {
            $repl = "value='" . $selectedId . "'";
            $selopts = str_replace($repl, $repl . " selected='selected' ", $selopts);
        }
        print "<tr><td>[ {$tt} ] " . $row1[2] . " </td>" . "<td>==> <select id='cbt{$tt}' name='cbt{$tt}' class='terms'><option id='ot0' value='0'></option>" . $selopts . "</select></td></tr>\n";
    }
    // loop through terms
    print "</table>";
}
* See the License for the specific language governing permissions and limitations under the License.
*/
require_once dirname(__FILE__) . '/../../common/connect/applyCredentials.php';
require_once dirname(__FILE__) . '/../../common/php/getRecordInfoLibrary.php';
// Although the relationships are part of record strucutre, this also outputs the actual counts, hence login
if (!is_logged_in()) {
    header("HTTP/1.1 401 Unauthorized");
    exit;
}
// We are going to represent JSON. Must be on top.
header("Content-Type: application/json");
// Code below is to grab data; copied from listRectypeRelations.php
// and removed unneccessary parts to just generate XML for entities and relationships
mysql_connection_select(DATABASE);
$rtStructs = getAllRectypeStructures(true);
$rtTerms = getTerms(true);
$rtTerms = $rtTerms['termsByDomainLookup']['relation'];
$image_base_url = HEURIST_SERVER_URL . "/HEURIST/HEURIST_FILESTORE/" . HEURIST_DBNAME . "/rectype-icons/";
$idx_dt_type = $rtStructs['typedefs']['dtFieldNamesToIndex']['dty_Type'];
$idx_dt_pointers = $rtStructs['typedefs']['dtFieldNamesToIndex']['rst_PtrFilteredIDs'];
$idx_dt_name = $rtStructs['typedefs']['dtFieldNamesToIndex']['rst_DisplayName'];
$idx_dt_req = $rtStructs['typedefs']['dtFieldNamesToIndex']['rst_RequirementType'];
$idx_dt_max = $rtStructs['typedefs']['dtFieldNamesToIndex']['rst_MaxValues'];
$resrt = array();
foreach ($rtStructs['typedefs'] as $rt_id => $rt) {
    if (!is_numeric($rt_id)) {
        continue;
    }
    // ??? what does this do ???
    $details = array();
    $rt_cnt = 0;
Beispiel #11
0
 function getTag($order = "", $kecuali = '')
 {
     return getTerms("tag", '0', $order, $kecuali);
 }
} else {
    $is_direct_call = false;
}
if (!defined('SAVE_URI')) {
    define("SAVE_URI", "disabled");
}
// using ob_gzhandler makes this stuff up on IE6-
//ini_set("zlib.output_compression_level", 5);
//ob_start('ob_gzhandler');
require_once dirname(__FILE__) . "/../connect/applyCredentials.php";
require_once dirname(__FILE__) . "/getRecordInfoLibrary.php";
mysql_connection_select(DATABASE);
if ($is_direct_call) {
    ob_start();
    header("Content-type: text/javascript");
}
$rv = array();
if (@$_REQUEST['action'] == 'usageCount') {
    $rv = getRecTypeUsageCount();
} else {
    $rv['rectypes'] = getAllRectypeStructures(false);
    $rv['detailTypes'] = getAllDetailTypeStructures(false);
    $rv['terms'] = getTerms(false);
    $rv['icon_url'] = HEURIST_ICON_URL;
    //HEURIST_SERVER_URL.
}
print json_encode($rv);
//print json_format($rv);
if ($is_direct_call) {
    ob_end_flush();
}
print "top.HEURIST.database.sessionPrefix = " . json_format(HEURIST_SESSION_DB_PREFIX) . ";\n";
print "top.HEURIST.database.version = " . json_format(HEURIST_DBVERSION) . ";\n";
print "if (!top.HEURIST.baseURL_V3) top.HEURIST.baseURL_V3 = " . json_format(HEURIST_BASE_URL) . ";\n";
print "if (!top.HEURIST.baseURL_V4) top.HEURIST.baseURL_V4 = " . json_format(HEURIST_BASE_URL) . ";\n";
print "if (!top.HEURIST.iconDir) top.HEURIST.iconDir = " . json_format(HEURIST_ICON_DIR) . ";\n";
print "if (!top.HEURIST.iconBaseURL) top.HEURIST.iconBaseURL = top.HEURIST.baseURL_V4+ 'hserver/dbaccess/rt_icon.php?db='+top.HEURIST.database.name+'&id=';\n";
//.json_format(HEURIST_ICON_URL) . ";\n";
//print "alert(top.HEURIST.iconBaseURL);";
// $cache=true - use cache
//$cache = (!array_keys(@$_REQUEST, 'cache') || @$_REQUEST['cache']=="1");
/* rectypes are an array of names sorted alphabetically, and lists of
	primary (bibliographic) and other rectypes, also sorted alphbetically */
print "top.HEURIST.rectypes = " . json_format(getAllRectypeStructures(true)) . ";\n";
/* detailTypes */
print "top.HEURIST.detailTypes = " . json_format(getAllDetailTypeStructures(true)) . ";\n\n";
print "\ntop.HEURIST.terms = \n" . json_format(getTerms(true), true) . ";\n";
print "\ntop.HEURIST.transforms = \n" . json_format(getTransformsByOwnerGroup(), true) . ";\n";
print "\ntop.HEURIST.tools = \n" . json_format(getToolsByTransform(), true) . ";\n";
/*print "\ntop.HEURIST.terms.termsByDomainLookup = \n" . json_format(getTerms(),true) . ";\n";

	print "\ntop.HEURIST.terms.treesByDomain = { 'relation' : " . json_format(getTermTree("reltype","prefix"),true).",\n
	'enum' : " . json_format(getTermTree("enum","prefix"),true)." };\n";
	*/
?>

top.HEURIST.ratings = {"0": "not rated",
"1": "*",
"2": "**",
"3": "***",
"4": "****",
"5": "*****"
Beispiel #14
0
function search_events($name, $location, $date, $desc, $postcode, $maxdist, $id)
{
    //Connect to the database
    $con = connect();
    //Import geoIP to find distance to events
    require_once "geoIP.php";
    //Allows for easy SQL generation
    $sql = "SELECT * FROM Events WHERE 1=1 ";
    //For each argument, append to the SQL if it is set (black magic, but it works)
    // --HACKY-- //
    if (!no_val($name)) {
        $sql .= " AND `name` LIKE '%" . mysqli_real_escape_string($con, $name) . "%'";
    }
    if (!no_val($location)) {
        $sql .= " AND `location`LIKE '%" . mysqli_real_escape_string($con, $location) . "%'";
    }
    if (!no_val($date)) {
        $sDate = stringToDate($date);
        $sql .= " AND `startDate` <=" . $sDate[0] . " AND `endDate` >=" . $sDate[1];
    }
    if (!no_val($desc)) {
        $sql .= " AND (`description` LIKE '" . getTerms($desc) . ")";
    }
    if (!no_val($postcode)) {
        $sql .= " AND `postcode`LIKE '%" . mysqli_real_escape_string($con, $postcode) . "%'";
    }
    if (!no_val($id)) {
        $sql .= " AND `createdBy` = " . $id;
    }
    //prepare the statement to be run
    //If this fails, either you have made a mistake editing this glorious code
    //Or there's malicious input
    if (!($stmt = $con->prepare($sql))) {
        echo "SQL incorrect or injection attempt.";
        die;
    }
    //Run the query. Stop all PHP if we can't for any reason
    if (!$stmt->execute()) {
        echo "Query Failed";
        die;
    }
    //Retrieve the results
    $result = $stmt->get_result();
    $results = array();
    //Postcode regular expression
    //Provided by the government, so should work 100% of the time
    $regex = '#^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]';
    $regex .= '([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9]';
    $regex .= '[ABD-HJLNP-UW-Z]{2})$#';
    //Get thbe user's location for distance calculations
    $postcode1 = urlencode(getLocation()['zipCode']);
    //Prepare the google maps API
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=";
    $url .= urlencode($postcode1) . "&destinations=";
    //Go through all results from the query
    $distances = array();
    $num = 0;
    while ($row = $result->fetch_assoc()) {
        $url .= urlencode("|" . $row['location']);
        $num += 1;
        if (strlen($url) >= 1500) {
            $url .= "&units=imperial";
            $google = curl_init($url);
            curl_setopt($google, CURLOPT_RETURNTRANSFER, true);
            $data = curl_exec($google);
            curl_close($google);
            if ($data) {
                $data = json_decode($data);
                if ($data->status == "OK") {
                    foreach ($data->rows[0]->elements as $dist) {
                        if ($dist->status == "OK") {
                            array_push($distances, $dist->distance->text);
                        } else {
                            array_push($distances, "---");
                        }
                    }
                }
                if (@sizeof($data->rows[0]->elements < $num)) {
                    for ($i = 0; $i < $num; $i++) {
                        array_push($distances, "---");
                    }
                }
                $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=";
                $url .= urlencode($postcode1) . "&destinations=";
            } else {
                $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=";
                $url .= urlencode($postcode1) . "&destinations=";
                for ($i = 0; $i < $num; $i++) {
                    array_push($distances, "---");
                }
            }
            $num = 0;
        }
        //Placeholder for distance values
        array_push($row, "---");
        //Add row to our results
        array_push($results, $row);
    }
    //Set the units to miles.
    //There's no real reason, most people just use miles
    $url .= "&units=imperial";
    $returnValues = array();
    foreach ($result as $row) {
        @array_push($row, $distances[0]);
        if (!no_val($maxdist)) {
            if ($row[0] <= $maxdist) {
                @array_push($returnValues, $row);
            }
        } else {
            @array_push($returnValues, $row);
        }
        //Delete the first element from google results
        $distances = array_slice($distances, 1);
    }
    //Throw back the array of all results
    return $returnValues;
}
Beispiel #15
0
      print "<script>showSelectedRecTypes('".$rt_toexport."')</script>";
  }*/
if ($rt_toexport && count($rt_toexport) > 0 && !$invalid) {
    $folder = HEURIST_FILESTORE_DIR . "faims/new/" . $projname;
    //create export folder
    if (!file_exists($folder)) {
        if (!mkdir($folder, 0777, true)) {
            die('Failed to create folder for ' . $folder . ' - check that file permissions are correctly set');
        }
    } else {
        //clear folder
        delFolderTree($folder, false);
    }
    //load definitions (USE CACHE)
    $dtStructs = getAllDetailTypeStructures(false);
    $dtTerms = getTerms(false);
    $ind_parentid = $dtTerms['fieldNamesToIndex']['trm_ParentTermID'];
    $ind_label = $dtTerms['fieldNamesToIndex']['trm_Label'];
    $ind_descr = $dtTerms['fieldNamesToIndex']['trm_Description'];
    // $unsupported was original specification, but this will stuff up if new types are added
    $supported = array('freetext', 'blocktext', 'integer', 'date', 'year', 'boolean', 'enum', 'float', 'file', 'resource');
    //$unsupported = array('relmarker','relationtype','separator','calculated','fieldsetmarker','urlinclude','geo');
    // Note: Geos are supported, but FAIMS uses a different methodology for recording them, that is they are an implicit part of every record
    $content_a16n = null;
    //file_put_contents($folder."/project.settings", $projname." and basic information 3");
    file_put_contents($folder . "/data_schema.xml", generateSchema($projname, $rt_toexport, $rt_geoenabled));
    file_put_contents($folder . "/ui_schema.xml", generate_UI_Schema($projname, $rt_toexport, $rt_geoenabled));
    file_put_contents($folder . "/arch16N.properties", arrToProps());
    file_put_contents($folder . "/ui_logic.bsh", generate_Logic($projname, $rt_toexport, $rt_toexport_toplevel, $rt_geoenabled));
    file_put_contents($folder . "/style.css", getStyling());
    //copy("ui_logic.bsh", $folder."/ui_logic.bsh"); //this is a Java beanshell file which provides the operational  logic for the tablet interface
<div class="panel-group" id="accordion">
<?php 
$this->load->library('m_net');
$data = getTerms("sidebar", $termid, "order_term ASC");
if (!empty($data)) {
    foreach ($data as $row) {
        $wi = $row->term_id;
        $prefix = menuInfoJSON($wi, 'prefix');
        $jsondata = dbField('terms', 'term_id', $wi, 'term_data');
        $sb = $this->m_database->fetchData('terms', array('term_id' => $wi));
        $param = array('data' => $jsondata, 'widgetdata' => $sb, 'parentid' => $termid);
        $j = $this->m_net->curlNet("get", base_url() . 'service/widget/' . $prefix . '/configwidget', $param);
        echo $j;
    }
} else {
    echo "Tidak ada widget";
}
?>
</div>
<input type="hidden" id="widgetpos" value="<?php 
echo $pos;
?>
"/>
<input type="hidden" id="widgetid" value="<?php 
echo $termid;
?>
"/>
Beispiel #17
0
    $val = strtolower(str_replace($prefix, "", $val));
    $label = strtoupper(str_replace($prefix, "", $val));
    if (!is_dir(MODPATH . 'service/controllers/widget/' . $val)) {
        $json = json_encode(array('service' => $val, 'description' => 'Menampilkan ' . $val));
        insertTerms($val . "_widget", $val . "-widget", $val . "-widget", 'Menampilkan ' . $val, "0", $json);
        ?>
        
        <div class="col-md-4 col-sm-6">
        <div class="panel panel-default">
        	<div class="panel-heading"><?php 
        echo $label;
        ?>
</div>
        	<div class="panel-body">
        	<?php 
        $d = getTerms($val . "_widget");
        foreach ($d as $r) {
        }
        $termid = $r->term_id;
        $data = menuInfoJSON($termid, "description");
        echo $data;
        ?>
        	</div>
        	<div class="panel-footer">
        		<a href="javascript:;" onclick="addwidget('<?php 
        echo $val;
        ?>
')">Add Widget</a>
        	</div>
        </div>
        </div>
Beispiel #18
0
 function mc_menu($theme, $position = 'top', $parentID = '0')
 {
     $CI =& get_instance();
     $menu = getTerms('menu_' . $position . "_" . $theme, $parentID, 'order_term ASC');
     if (!empty($menu)) {
         return $menu;
     } else {
         return null;
     }
 }
// URI of the containing page
if (array_key_exists('alt', $_REQUEST)) {
    define('use_alt_db', 1);
}
require_once dirname(__FILE__) . '/../../common/connect/applyCredentials.php';
require_once dirname(__FILE__) . '/../../common/php/dbMySqlWrappers.php';
require_once dirname(__FILE__) . '/../../common/php/Temporal.php';
mysql_connection_select(DATABASE);
require_once dirname(__FILE__) . '/../../common/php/getRecordInfoLibrary.php';
require_once dirname(__FILE__) . '/../../records/woot/woot.php';
require_once dirname(__FILE__) . '/../../records/files/uploadFile.php';
$noclutter = array_key_exists('noclutter', $_REQUEST);
$is_map_popup = array_key_exists('mapPopup', $_REQUEST) && $_REQUEST['mapPopup'] == 1;
$is_reloadPopup = array_key_exists('reloadPopup', $_REQUEST) && $_REQUEST['reloadPopup'] == 1;
$rectypesStructure = getAllRectypeStructures();
$terms = getTerms();
// get a list of workgroups the user belongs to. - ARTEM - NOT USED
$ACCESSABLE_OWNER_IDS = mysql__select_array('sysUsrGrpLinks left join sysUGrps grp on grp.ugr_ID=ugl_GroupID', 'ugl_GroupID', 'ugl_UserID=' . get_user_id() . ' and grp.ugr_Type != "user" order by ugl_GroupID');
if (is_logged_in()) {
    array_push($ACCESSABLE_OWNER_IDS, get_user_id());
    if (!in_array(0, $ACCESSABLE_OWNER_IDS)) {
        array_push($ACCESSABLE_OWNER_IDS, 0);
    }
}
// if we get a record id then see if there is a personal bookmark for it.
if (@$_REQUEST['recID'] && !@$_REQUEST['bkmk_id']) {
    $res = mysql_query('select * from usrBookmarks where bkm_recID = ' . intval($_REQUEST['recID']) . ' and bkm_UGrpID = ' . get_user_id());
    if ($res && mysql_num_rows($res) > 0) {
        $row = mysql_fetch_assoc($res);
        $_REQUEST['bkmk_id'] = $row['bkm_ID'];
    }
Beispiel #20
0
<?php

$themeFront = optionGet('theme_front');
$sidebar = getTerms('sidebar');
?>
<label>Pilih Widget <br/><small class="text-info">(*) Widget ini sesuai tema yang aktif</small></label>
<select name="widget" id="widget" class="form-control">
<option value="">-Posisi Widget-</option>
<?php 
foreach ($sidebar as $rside) {
    if (stristr($rside->name, $themeFront . "_sidebar") == TRUE) {
        $ex = explode("_", $rside->name);
        $termid = $rside->term_id;
        ?>
	<option value="<?php 
        echo $ex[2] . ":" . $termid;
        ?>
"><?php 
        echo ucfirst($ex[2]);
        ?>
</option>
	<?php 
    }
}
?>
</select>
<p>&nbsp;</p>
<div id="widgetloader"></div>
<script>
$(document).ready(function(){
$("#widget").change(function(){
            $colNames = $data['terms']['colNames'];
            $dt = @$data['terms']['defs'][$retain_id];
            $res = mergeTerms($retain_id, $merge_id, $colNames, $dt);
            $rv['terms'] = getTerms();
            break;
        case 'deleteTerms':
            $trmID = @$_REQUEST['trmID'];
            if (!$trmID) {
                $rv['error'] = "Error: No IDs or invalid IDs sent with deleteTerms method call to saveStructure.php";
            } else {
                $ret = deleteTerms($trmID);
                if (@$ret['error']) {
                    $rv = $ret;
                } else {
                    $rv['result'] = $ret;
                    $rv['terms'] = getTerms();
                }
            }
            break;
    }
    $mysqli->close();
    /*
            if (@$rv) {
            print json_format($rv);
            }*/
}
//$method!=null
ob_start();
echo json_encode($rv);
$output = gzencode(ob_get_contents(), 6);
ob_end_clean();
    $ratePerPeriod = 0.08 / 12;
}
$numberOfPayments = $computeTerms * 12;
$rateDownpayment = $computeDownpayment / 100;
$amountDownpayment = $modelLowPrice * $rateDownpayment;
$amountLoan = $modelLowPrice - $amountDownpayment;
$monthsPayable = 14;
$amountReservationFee = getReservationFee($modelLowPrice);
$amountDownpaymentMonthly = ($amountDownpayment - $amountReservationFee) / $monthsPayable;
$monthlyPayments = computeComputationPMT($ratePerPeriod, $numberOfPayments, $amountLoan, 0, 1);
$header = array('Total Contract Price', 'Downpayment (' . getDownPayment($computeDownpayment) . ')', 'Reservation Fee', 'Months Payable');
for ($i = 1; $i <= $monthsPayable; $i++) {
    array_push($header, 'Month ' . $i);
}
array_push($header, 'Loandable Amount');
array_push($header, 'Monthly Ammortization - ' . getTerms($computeTerms));
$content = array(convertToPrice($modelLowPrice), convertToPrice($amountDownpayment), convertToPrice($amountReservationFee), $monthsPayable);
for ($i = 1; $i <= $monthsPayable; $i++) {
    array_push($content, convertToPrice($amountDownpaymentMonthly));
}
array_push($content, convertToPrice($amountLoan));
array_push($content, convertToPrice($monthlyPayments));
$pdf->Ln();
foreach ($header as $key => $row) {
    $pdf->SetFont('Arial', '', 8);
    $pdf->Cell(80, 7, $row, 1);
    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(60, 7, $content[$key], 1, 0, 'R');
    $pdf->Ln();
}
$pdf->Ln();
function upload_termsfile($parent_id, $domain, $has_codes, $has_descr)
{
    if (!@$_REQUEST['uploading']) {
        return null;
    }
    if (!$_FILES['import_file']['size']) {
        return array('error' => 'Error occurred during import - file had zero size');
    }
    $filename = $_FILES['import_file']['tmp_name'];
    $parsed = array();
    $row = 0;
    if (($handle = fopen($filename, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            if ($num > 0) {
                $desc = '';
                $code = '';
                $label = substr(trim($data[0]), 0, 499);
                if (count($data) > 1) {
                    $code = substr(trim($data[1]), 0, 99);
                    if (count($data) > 2) {
                        $desc = implode(',', array_slice($data, 2));
                        $desc = substr($desc, 0, 999);
                    }
                }
                if ($label == '') {
                    $label = $code;
                }
                if ($label != '') {
                    array_push($parsed, array($code, $label, $desc, $domain, $parent_id, 1));
                    $row++;
                }
            }
        }
    }
    if ($handle) {
        fclose($handle);
    }
    if ($row == 0) {
        return array('error' => 'No appropriate line found to process in import file');
    }
    $mysqli = mysqli_connection_overwrite(DATABASE);
    $colNames = array('trm_Code', 'trm_Label', 'trm_Description', 'trm_Domain', 'trm_ParentTermID', 'trm_AddedByImport');
    $rv['parent'] = $parent_id;
    $rv['result'] = array();
    //result
    foreach ($parsed as $ind => $dt) {
        $res = updateTerms($colNames, "1-1", $dt, $mysqli);
        array_push($rv['result'], $res);
    }
    $rv['terms'] = getTerms();
    $mysqli->close();
    return $rv;
}
/**
* simple description
* detailed desription
* @global       type description of global variable usage in a function
* @param        type [$varname] description
* @return       type description
* @link         URL
* @see          name of another element (function or object) used in this function
* @throws       list of exceptions thrown in this code
*/
function parseImportForm($fhmlFilename, $resources)
{
    global $xmlForms, $formImportDir, $resourceUriRoot;
    static $dettypes, $di, $rectypes, $ri, $rid, $terms, $ti, $termLookup, $relnLookup;
    if (!$dettypes || !$di) {
        $dettypes = getAllDetailTypeStructures();
        $dettypes = $dettypes['typedefs'];
        $di = $dettypes['fieldNamesToIndex'];
    }
    if (!$rectypes || !$ri || !$rid) {
        $rectypes = getAllRectypeStructures();
        $ri = $rectypes['typedefs']['commonNamesToIndex'];
        $rid = $rectypes['typedefs']['dtFieldNamesToIndex'];
    }
    if (!$terms || !$ti || !$termLookup || !$relnLookup) {
        $terms = getTerms();
        $ti = $terms['fieldNamesToIndex'];
        $termLookup = $terms['termsByDomainLookup']['enum'];
        $relnLookup = $terms['termsByDomainLookup']['relation'];
    }
    $dtyIDTrans = array("15" => "327", "28" => "119", "332" => "520", "336" => "510", "337" => "511", "322" => "508", 15 => 327, 28 => 119, 332 => 520, 336 => 510, 337 => 511, 322 => 508);
    //Survey Unit
    $fhmlDoc = simplexml_load_file($xmlForms["form"][$fhmlFilename]);
    $header = array();
    $dataRow = array();
    $recType = $fhmlDoc->xpath("/fhml/records/record/type/label");
    echo "processing rectype: \"" . $recType[0] . "\" from: " . $fhmlFilename . "<br>";
    // echo "rectyp: ".$recType[0]."<br>";
    array_push($header, "rectype");
    array_push($dataRow, $recType[0]);
    $formID = $fhmlDoc->xpath("/fhml/@id");
    //	echo "nonce: ".$nonce[0]."<br>";
    array_push($header, "formID");
    array_push($dataRow, $formID[0]);
    $formVer = $fhmlDoc->xpath("/fhml/@version");
    //	echo "nonce: ".$nonce[0]."<br>";
    array_push($header, "formVer");
    array_push($dataRow, $formVer[0]);
    $nonce = $fhmlDoc->xpath("/fhml/records/record/nonce");
    //	echo "nonce: ".$nonce[0]."<br>";
    array_push($header, "nonce");
    array_push($dataRow, $nonce[0]);
    //	error_log("nonce = ".print_r($nonce,true));
    $database = $fhmlDoc->xpath("/fhml/database");
    $database = $database[0];
    $dbID = $database->attributes();
    $dbID = $dbID["id"];
    $dateStamp = @$fhmlDoc->xpath("/fhml/dateStamp");
    $createTime = @$fhmlDoc->xpath("/fhml/createTime");
    if (!@$dateStamp[0] && @$createTime[0]) {
        $dateStamp = $createTime;
    }
    //	echo "dataStamp: ".$dateStamp[0]."<br>";
    array_push($header, "dateStamp");
    array_push($dataRow, $dateStamp[0]);
    $deviceID = $fhmlDoc->xpath("/fhml/deviceID");
    array_push($header, "deviceID");
    array_push($dataRow, $deviceID[0]);
    $details = $fhmlDoc->xpath("/fhml/records/record/details");
    foreach ($details[0]->children() as $detail) {
        //		if ("".$detail == "") continue;
        $attr = $detail->attributes();
        $dtyID = $detail->getName();
        //		error_log("dtyID ".print_r($dtyID,true));
        $dtyID = preg_replace("/dt/", "", $dtyID);
        if ($dtyID == "15" || $dtyID == "345") {
            $detail = findRecorder($detail);
        }
        if ($dtyID == "322" || $dtyID == "344") {
            $detail = findSurveyUnit($detail);
        }
        //error_log("form dtyID ".print_r($dtyID,true));
        $dtyID = @$dtyIDTrans[$dtyID] ? $dtyIDTrans[$dtyID] : $dtyID;
        // SPECIAL FOR ZAGORA IMPORT  REMOVE!!!!!!!!!!!!!!!!
        //error_log("detailtype $dtyID  ".print_r($dettypes[intval($dtyID)]['commonFields'],true));
        $dtBaseType = $dettypes[intval($dtyID)]['commonFields'][$di['dty_Type']];
        $detailName = $attr["name"] ? $attr["name"] : $detail->getName();
        if ($dtBaseType == "freetext" || $dtBaseType == "blocktext") {
            //text so enclose in quotes
            if (preg_match("/\"/", $detail)) {
                $detail = preg_replace("/\"/", "'", $detail);
                //strip any quotes for non string values
            }
            $detail = "\"" . $detail . "\"";
        } else {
            $detail = preg_replace("/\"/", "", $detail);
            //strip any quotes for non string values
        }
        $dbConceptPrefix = $dbID . "-";
        error_log("basetype = " . print_r($dtBaseType, true));
        if ($dtBaseType == "enum" || $dtBaseType == 'relation') {
            $detail = preg_replace("/{$dbConceptPrefix}/", "", $detail);
        } else {
            if ($dtBaseType == 'geo') {
                preg_match_all("/\\d+\\.\\d+/", $detail, $match);
                //error_log("match".print_r($match,true));
                $detail = "POINT(" . $match[0][1] . " " . $match[0][0] . ")";
            }
        }
        //	error_log("attr = ".$attr["name"]);
        //		echo "".($attr["name"] ? $attr["name"] : $detail->getName()).": ". $detail."<br>";
        array_push($header, $detailName);
        if ("" . $detail != "" && $resourceUriRoot && ($dtyID == DT_IMAGES || $dtyID == DT_DRAWING)) {
            //			echo "has resource $inputFormResourceDir/$detail<br>";
            //error_log("Photo magic= ".DT_IMAGES."  dtyID= $dtyID");
            //error_log("Sketch magic= ".DT_DRAWING."  dtyID= $dtyID");
            if (array_key_exists($detail, $resources)) {
                array_push($dataRow, $resourceUriRoot . $resources[$detail]);
            } else {
                array_push($dataRow, "resource file {$detail} not found");
            }
        } else {
            array_push($dataRow, $detail);
        }
    }
    //	echo  "scratchPad: ".$fhmlDoc->asXML()."<br><br>";
    array_push($header, "scratchPad");
    $fhmlDoc->addChild('filename', $fhmlFilename);
    $fhml = $fhmlDoc->asXML();
    $fhml = preg_replace("/^\\<\\?xml[^\\?]+\\?\\>/", "", $fhml);
    $fhml = "\"" . preg_replace("/\"/", "'", $fhml) . "\"";
    $fhml = "\"" . preg_replace("/\\</", "&lt;", $fhml) . "\"";
    $fhml = "\"" . preg_replace("/\\>/", "&gt;", $fhml) . "\"";
    array_push($dataRow, $fhml);
    array_push($header, "importFilename");
    array_push($dataRow, $fhmlFilename);
    //	echo join(",", $header);
    //	echo "<br>";
    //	echo join(",", $dataRow);
    //	echo "<br>";
    //	echo "<br>";
    return array($recType[0], join(",", $header), join(",", $dataRow));
}
/**
 * main form generation code build the model to approximate HML, the form UI and the binding between UI and model
 * @staticvar   array [$dettypes] array detail type definitions for this database
 * @staticvar   object [$di] field name to index mapping for detail type definition
 * @staticvar   array [$rectypes] array record type structure definitions for this database
 * @staticvar   object [$ri] field name to index mapping for record field structure definition
 * @staticvar   object [$ti] field name to index mapping for term definition
 * @staticvar   array [$termLookup] array term structure definitions for the enumerations in this database
 * @staticvar   array [$relnLookup] array term structure definitions for the relationships in this database
 * @param       integer [$rt_id] the rectype locally unique identifier
 * @return      object an array of strings representing form, rtName, rtConceptID, rtDescription, and report on success
 * @uses        getXFormTypeFromBaseType()
 * @uses        createRecordLookup()
 * @uses        createTermSelect()
 * @uses        getTerms()
 * @uses        getAllDetailTypeStructures()
 * @uses        getAllRectypeStructures()
 * @uses        HEURIST_UPLOAD_DIR
 * @uses        HEURIST_BASE_URL
 * @uses        HEURIST_DBNAME
 */
function buildform($rt_id)
{
    // mappings and lookups - static so we only retrieve once per service call
    static $dettypes, $di, $rectypes, $ri, $rid, $terms, $ti, $termLookup, $relnLookup;
    if (!$dettypes || !$di) {
        $dettypes = getAllDetailTypeStructures();
        $dettypes = $dettypes['typedefs'];
        $di = $dettypes['fieldNamesToIndex'];
    }
    if (!$rectypes || !$ri || !$rid) {
        $rectypes = getAllRectypeStructures();
        $ri = $rectypes['typedefs']['commonNamesToIndex'];
        $rid = $rectypes['typedefs']['dtFieldNamesToIndex'];
    }
    if (!$terms || !$ti || !$termLookup || !$relnLookup) {
        $terms = getTerms();
        $ti = $terms['fieldNamesToIndex'];
        $termLookup = $terms['termsByDomainLookup']['enum'];
        $relnLookup = $terms['termsByDomainLookup']['relation'];
    }
    if (!array_key_exists($rt_id, $rectypes['typedefs'])) {
        error_log("rectypes " . print_r($rectypes['typedefs'][$rt_id], true));
        return array(null, null, null, null, "Rectype# {$rt_id} not found");
    }
    $report = "";
    $rectype = $rectypes['typedefs'][$rt_id];
    //		error_log("rectype is ".print_r($rectype,true));
    //record type info
    $rtName = $rectypes['names'][$rt_id];
    //detail or field type info
    $fieldTypeConceptIDIndex = $di['dty_ConceptID'];
    $fieldTypeNameIndex = $di['dty_Name'];
    $fieldBaseTypeIndex = $di['dty_Type'];
    //record field info
    $fieldNameIndex = $rid['rst_DisplayName'];
    $fieldDefaultValIndex = $rid['rst_DefaultValue'];
    $fieldHelpTextIndex = $rid['rst_DisplayHelpText'];
    $fieldTermsListIndex = $rid['rst_FilteredJsonTermIDTree'];
    $fieldTermHeaderListIndex = $rid['rst_TermIDTreeNonSelectableIDs'];
    $fieldPtrRectypeIDsListIndex = $rid['rst_PtrFilteredIDs'];
    $fieldMaxRepeatIndex = $rid['rst_MaxValues'];
    $rtConceptID = $rectype['commonFields'][$ri['rty_ConceptID']];
    if (!$rtConceptID) {
        $rtConceptID = "0-" . $rt_id;
    }
    $rtDescription = $rectype['commonFields'][$ri['rty_Description']];
    // output structure variables
    $model = "<instance>\n" . "<fhml id=\"heuristscholar.org:{$rtConceptID}\" version=\"" . date("Ymd") . "\">\n" . "<database id=\"" . HEURIST_DBID . "\" urlBase=\"" . HEURIST_BASE_URL . "\">" . HEURIST_DBNAME . "</database>\n" . "<query depth=\"0\" db=\"" . HEURIST_DBNAME . "\" q=\"t:{$rt_id}\" />\n" . "<generatedBy userID=\"" . get_user_id() . "\">" . get_user_name() . "</generatedBy>\n" . "<createdBy/>\n" . "<deviceID/>\n" . "<createTime/>\n" . "<uuid/>\n" . "<records count=\"1\">\n" . "<record depth=\"0\">\n" . "<type>\n" . "<conceptID>{$rtConceptID}</conceptID>\n" . "<label>{$rtName}</label>\n" . "</type>\n" . "<nonce/>\n" . "<details>\n";
    $bind = "<bind nodeset=\"createdBy\" type=\"string\" jr:preload=\"property\" jr:preloadParams=\"username\"/>\n" . "<bind nodeset=\"createTime\" type=\"dateTime\" jr:preload=\"timestamp\" jr:preloadParams=\"start\"/>\n" . "<bind nodeset=\"deviceID\" type=\"string\" jr:preload=\"property\" jr:preloadParams=\"deviceid\"/>\n" . "<bind nodeset=\"uuid\" type=\"string\" readonly=\"true()\" calculate=\"uuid()\"/>\n" . "<bind nodeset=\"records/record/nonce\" type=\"string\" readonly=\"true()\" calculate=\"concat(/fhml/deviceID,'|',/fhml/createTime,'|',/fhml/uuid)\"/>\n";
    $body = "<h:body>\n" . "<group appearance=\"field-list\">\n";
    $groupSeparator = "</group>\n" . "<group appearance=\"field-list\">\n";
    //@todo - sort by rst_DisplayOrder
    $fieldsLeft = count($rectype['dtFields']);
    $atGroupStart = true;
    //init separator detection for repatables
    foreach ($rectype['dtFields'] as $dt_id => $rt_dt) {
        if ($rt_dt[$rid['rst_NonOwnerVisibility']] == 'hidden') {
            continue;
        }
        --$fieldsLeft;
        // count down fields so we know when we hit the last one
        $dettype = $dettypes[$dt_id]['commonFields'];
        //get detail type description
        $baseType = $dettype[$fieldBaseTypeIndex];
        $fieldTypeName = $dettype[$fieldTypeNameIndex];
        $fieldName = $rt_dt[$fieldNameIndex];
        $fieldtype = getXFormTypeFromBaseType($baseType);
        $fieldMaxCount = $rt_dt[$fieldMaxRepeatIndex];
        $isRepeatable = $fieldMaxCount > 1 || $fieldMaxCount == NULL;
        //skip any unsupport field types
        if (!$fieldtype) {
            $report = $report . " {$rtName}." . $dettype[$fieldTypeNameIndex] . " ignored since type " . $baseType . " not supported<br/>";
            continue;
            // not supported
        }
        if ($fieldtype == "groupbreak" && $atGroupStart) {
            //skip double separator, note that this includes separators before non supported types
            continue;
        }
        if ($baseType == "resource") {
            $rtIDs = $dettype[$di['dty_PtrTargetRectypeIDs']];
            if (!$rtIDs || $rtIDs == "") {
                //unconstrained pointers not supported
                $report = $report . " {$rtName}." . $dettype[$fieldTypeNameIndex] . " ignored since unconstrained resource pointers are not supported<br/>";
                continue;
            }
        }
        $dt_conceptid = $dettype[$fieldTypeConceptIDIndex];
        if (!$dt_conceptid) {
            $dt_conceptid = "0-" . $dt_id;
        }
        $defaultValue = $rt_dt[$fieldDefaultValIndex];
        // load default value
        //for controlled vocabs convert any local term ID to it's concept ID
        if ($baseType == "enum" && array_key_exists("{$defaultValue}", $termLookup)) {
            $termID = $termLookup[$defaultValue][$ti['trm_ConceptID']];
            if ($termID) {
                $defaultValue = $termID;
            } else {
                $defaultValue = HEURIST_DBID . "-" . $defaultValue;
            }
        } else {
            if ($baseType == "relation" && array_key_exists("{$defaultValue}", $relnLookup)) {
                $termID = $relnLookup[$defaultValue][$ti['trm_ConceptID']];
                if ($termID) {
                    $defaultValue = $termID;
                } else {
                    $defaultValue = HEURIST_DBID . "-" . $defaultValue;
                }
            }
        }
        if ($fieldtype != "groupbreak") {
            $model = $model . "<dt{$dt_id} conceptID=\"{$dt_conceptid}\" type=\"{$fieldTypeName}\" name=\"{$fieldName}\">" . ($defaultValue ? htmlentities($defaultValue) : "") . "</dt" . $dt_id . ">\n";
        }
        if ($rt_dt[$rid['rst_RequirementType']] == 'required') {
            $isrequired = 'required="true()"';
        } else {
            if ($rt_dt[$rid['rst_RequirementType']] == 'forbidden') {
                $isrequired = 'readonly="true()"';
            } else {
                $isrequired = '';
            }
        }
        $constraint = '';
        /* @todo
        			if($rt_dt[$rid['rst_MinValues']]=='required'){
        			//constraint=". &gt; 10.51 and . &lt; 18.39" jr:constraintMsg="number must be between 10.51 and 18.39"
        			}
        		*/
        // if repeatable vocab make it multi select. TODO: we should extend Heurist to include multi-select which is different than repeatable
        if ($fieldtype == "select1" && $isRepeatable) {
            $fieldtype = "select";
            $isRepeatable = false;
        }
        $label = htmlentities($rt_dt[$fieldNameIndex]);
        $hint = htmlentities($rt_dt[$fieldHelpTextIndex]);
        $inputDefBody = "<label>{$label}</label>\n" . "<hint>{$hint}</hint>\n";
        $xpathPrefix = "/fhml/records/record/details/";
        $groupRepeatHdr = ($atGroupStart ? "" : $groupSeparator) . "<label>{$label}</label>\n" . "<repeat nodeset=\"/fhml/records/record/details/dt{$dt_id}\">\n";
        $groupRepeatFtr = "</repeat>\n" . ($fieldsLeft ? $groupSeparator : "");
        $atGroupStart = false;
        // past detection code so
        if ($fieldtype != "groupbreak") {
            $bind = $bind . "<bind nodeset=\"records/record/details/dt{$dt_id}\" type=\"{$fieldtype}\" {$isrequired} {$constraint}/>\n";
        }
        if ($isRepeatable) {
            $body .= $groupRepeatHdr;
        }
        if ($fieldtype == "select1" || $fieldtype == "select") {
            if ($baseType == "resource") {
                $body = $body . "<{$fieldtype} appearance=\"minimal\" ref=\"" . $xpathPrefix . "dt" . $dt_id . "\">\n" . $inputDefBody . createRecordLookup($rtIDs) . "</{$fieldtype}>\n";
            } else {
                $termIDTree = $dettype[$di['dty_JsonTermIDTree']];
                $disabledTermIDsList = $dettype[$di['dty_TermIDTreeNonSelectableIDs']];
                $fieldLookup = $baseType == "relation" ? $relnLookup : $termLookup;
                $body = $body . "<{$fieldtype} appearance=\"minimal\" ref=\"" . $xpathPrefix . "dt" . $dt_id . "\">\n" . $inputDefBody . createTermSelect($termIDTree, $disabledTermIDsList, $fieldLookup, false, $ti) . "</{$fieldtype}>\n";
            }
        } else {
            if ($fieldtype == "binary") {
                //todo check for sketch type
                $isDrawing = false;
                $appearance = $dt_id == DT_DRAWING ? "draw" : "annotate";
                $body = $body . "<upload ref=\"" . $xpathPrefix . "dt{$dt_id}\" appearance=\"{$appearance}\"  mediatype=\"image/*\">\n" . $inputDefBody . "</upload>\n";
            } else {
                if ($fieldtype == "groupbreak") {
                    // if we get to here we have a legitament sepearator so break
                    $body .= $groupSeparator;
                    $atGroupStart = true;
                } else {
                    if ($dt_id == DT_COUNTER) {
                        //we have a counter field so let's launch the Inventory Counter
                        $body = $body . "<input appearance=\"ex:faims.android.INVENTORYCOUNT\" ref=\"" . $xpathPrefix . "dt{$dt_id}\">\n" . $inputDefBody . "</input>\n";
                    } else {
                        //all others and  $fieldtype=="geopoint"  as well
                        $body = $body . "<input ref=\"" . $xpathPrefix . "dt{$dt_id}\">\n" . $inputDefBody . "</input>\n";
                    }
                }
            }
        }
        if ($isRepeatable) {
            $body .= $groupRepeatFtr;
            if ($fieldsLeft > 0) {
                $atGroupStart = true;
            }
        }
    }
    $model = $model . "</details>\n" . "</record>\n" . "</records>\n" . "</fhml>\n" . "</instance>\n";
    $body = $body . "</group>\n" . "</h:body>\n";
    $form = "<?xml version=\"1.0\"?>\n" . "<h:html xmlns=\"http://www.w3.org/2002/forms\" xmlns:h=\"http://www.w3.org/1999/xhtml\" " . "xmlns:ev=\"http://www.w3.org/2001/xml-events\" " . "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " . "xmlns:jr=\"http://openrosa.org/javarosa\">\n" . "<h:head>\n" . "<h:title>{$rtName}</h:title>\n" . "<model>\n" . $model . $bind . "</model>\n" . "</h:head>\n" . $body . "</h:html>";
    return array($form, $rtName, $rtConceptID, $rtDescription, $report);
}
Beispiel #26
0
function getParentalDashboardContents($connection2, $guid, $gibbonPersonID)
{
    $return = FALSE;
    $alert = getAlert($connection2, 02);
    $entryCount = 0;
    //PREPARE PLANNER SUMMARY
    $plannerOutput = "<span style='font-size: 85%; font-weight: bold'>" . _('Today\'s Classes') . "</span> . <span style='font-size: 70%'><a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Planner/planner.php&search=" . $gibbonPersonID . "'>" . _('View Planner') . "</a></span>";
    if (isset($_GET["updateReturn"])) {
        $updateReturn = $_GET["updateReturn"];
    } else {
        $updateReturn = "";
    }
    $updateReturnMessage = "";
    $class = "error";
    if (!($updateReturn == "")) {
        if ($updateReturn == "fail0") {
            $updateReturnMessage = _("Your request failed because you do not have access to this action.");
        } else {
            if ($updateReturn == "fail1") {
                $updateReturnMessage = _("Your request failed because your inputs were invalid.");
            } else {
                if ($updateReturn == "fail2") {
                    $updateReturnMessage = _("Your request failed due to a database error.");
                } else {
                    if ($updateReturn == "success0") {
                        $updateReturnMessage = _("Your request was completed successfully.");
                        $class = "success";
                    }
                }
            }
        }
        $plannerOutput .= "<div class='{$class}'>";
        $plannerOutput .= $updateReturnMessage;
        $plannerOutput .= "</div>";
    }
    $classes = FALSE;
    $date = date("Y-m-d");
    if (isSchoolOpen($guid, $date, $connection2) == TRUE and isActionAccessible($guid, $connection2, "/modules/Planner/planner.php") and $_SESSION[$guid]["username"] != "") {
        try {
            $data = array("gibbonSchoolYearID" => $_SESSION[$guid]["gibbonSchoolYearID"], "date" => $date, "gibbonPersonID" => $gibbonPersonID, "date2" => $date, "gibbonPersonID2" => $gibbonPersonID);
            $sql = "(SELECT gibbonPlannerEntry.gibbonPlannerEntryID, gibbonUnitID, gibbonHookID, gibbonPlannerEntry.gibbonCourseClassID, gibbonCourse.nameShort AS course, gibbonCourseClass.nameShort AS class, gibbonPlannerEntry.name, timeStart, timeEnd, viewableStudents, viewableParents, homework, homeworkSubmission, homeworkCrowdAssess, role, date, summary, gibbonPlannerEntryStudentHomework.homeworkDueDateTime AS myHomeworkDueDateTime FROM gibbonPlannerEntry JOIN gibbonCourseClass ON (gibbonPlannerEntry.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonCourseClassPerson ON (gibbonCourseClass.gibbonCourseClassID=gibbonCourseClassPerson.gibbonCourseClassID) JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) LEFT JOIN gibbonPlannerEntryStudentHomework ON (gibbonPlannerEntryStudentHomework.gibbonPlannerEntryID=gibbonPlannerEntry.gibbonPlannerEntryID AND gibbonPlannerEntryStudentHomework.gibbonPersonID=gibbonCourseClassPerson.gibbonPersonID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND date=:date AND gibbonCourseClassPerson.gibbonPersonID=:gibbonPersonID AND NOT role='Student - Left' AND NOT role='Teacher - Left') UNION (SELECT gibbonPlannerEntry.gibbonPlannerEntryID, gibbonUnitID, gibbonHookID, gibbonPlannerEntry.gibbonCourseClassID, gibbonCourse.nameShort AS course, gibbonCourseClass.nameShort AS class, gibbonPlannerEntry.name, timeStart, timeEnd, viewableStudents, viewableParents, homework, homeworkSubmission, homeworkCrowdAssess, role, date, summary, NULL AS myHomeworkDueDateTime FROM gibbonPlannerEntry JOIN gibbonCourseClass ON (gibbonPlannerEntry.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonPlannerEntryGuest ON (gibbonPlannerEntryGuest.gibbonPlannerEntryID=gibbonPlannerEntry.gibbonPlannerEntryID) JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) WHERE date=:date2 AND gibbonPlannerEntryGuest.gibbonPersonID=:gibbonPersonID2) ORDER BY date, timeStart";
            $result = $connection2->prepare($sql);
            $result->execute($data);
        } catch (PDOException $e) {
            $plannerOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
        }
        if ($result->rowCount() > 0) {
            $classes = TRUE;
            $plannerOutput .= "<table cellspacing='0' style='margin: 3px 0px; width: 100%'>";
            $plannerOutput .= "<tr class='head'>";
            $plannerOutput .= "<th>";
            $plannerOutput .= _("Class") . "<br/>";
            $plannerOutput .= "</th>";
            $plannerOutput .= "<th>";
            $plannerOutput .= _("Lesson") . "<br/>";
            $plannerOutput .= "<span style='font-size: 85%; font-weight: normal; font-style: italic'>" . _("Summary") . "</span>";
            $plannerOutput .= "</th>";
            $plannerOutput .= "<th>";
            $plannerOutput .= _("Homework");
            $plannerOutput .= "</th>";
            $plannerOutput .= "<th>";
            $plannerOutput .= _("Like");
            $plannerOutput .= "</th>";
            $plannerOutput .= "<th>";
            $plannerOutput .= _("Action");
            $plannerOutput .= "</th>";
            $plannerOutput .= "</tr>";
            $count2 = 0;
            $rowNum = "odd";
            while ($row = $result->fetch()) {
                if ($count2 % 2 == 0) {
                    $rowNum = "even";
                } else {
                    $rowNum = "odd";
                }
                $count2++;
                //Highlight class in progress
                if (date("H:i:s") > $row["timeStart"] and date("H:i:s") < $row["timeEnd"] and $date == date("Y-m-d")) {
                    $rowNum = "current";
                }
                //COLOR ROW BY STATUS!
                $plannerOutput .= "<tr class={$rowNum}>";
                $plannerOutput .= "<td>";
                $plannerOutput .= "<b>" . $row["course"] . "." . $row["class"] . "</b><br/>";
                $plannerOutput .= "</td>";
                $plannerOutput .= "<td>";
                $plannerOutput .= $row["name"] . "<br/>";
                $unit = getUnit($connection2, $row["gibbonUnitID"], $row["gibbonHookID"], $row["gibbonCourseClassID"]);
                if (isset($unit[0])) {
                    $plannerOutput .= $unit[0];
                    if ($unit[1] != "") {
                        $plannerOutput .= "<br/><i>" . $unit[1] . " " . _('Unit') . "</i><br/>";
                    }
                }
                $plannerOutput .= "<span style='font-size: 85%; font-weight: normal; font-style: italic'>";
                $plannerOutput .= $row["summary"];
                $plannerOutput .= "</span>";
                $plannerOutput .= "</td>";
                $plannerOutput .= "<td>";
                if ($row["homework"] == "N" and $row["myHomeworkDueDateTime"] == "") {
                    $plannerOutput .= _("No");
                } else {
                    if ($row["homework"] == "Y") {
                        $plannerOutput .= _("Yes") . ": " . _("Teacher Recorded") . "<br/>";
                        if ($row["homeworkSubmission"] == "Y") {
                            $plannerOutput .= "<span style='font-size: 85%; font-style: italic'>+" . _("Submission") . "</span><br/>";
                            if ($row["homeworkCrowdAssess"] == "Y") {
                                $plannerOutput .= "<span style='font-size: 85%; font-style: italic'>+" . _("Crowd Assessment") . "</span><br/>";
                            }
                        }
                    }
                    if ($row["myHomeworkDueDateTime"] != "") {
                        $plannerOutput .= _("Yes") . ": " . _("Student Recorded") . "</br>";
                    }
                }
                $plannerOutput .= "</td>";
                $plannerOutput .= "<td>";
                $likesGiven = countLikesByContextAndGiver($connection2, "Planner", "gibbonPlannerEntryID", $row["gibbonPlannerEntryID"], $_SESSION[$guid]["gibbonPersonID"]);
                if ($likesGiven != 1) {
                    $plannerOutput .= "<a href='" . $_SESSION[$guid]["absoluteURL"] . "/modules/Planner/plannerProcess.php?gibbonPlannerEntryID=" . $row["gibbonPlannerEntryID"] . "&address=/modules/Planner/planner.php&viewBy=date&date={$date}&gibbonPersonID=" . $gibbonPersonID . "&returnToIndex=Y'><img src='" . $_SESSION[$guid]["absoluteURL"] . "/themes/" . $_SESSION[$guid]["gibbonThemeName"] . "/img/like_off.png'></a>";
                } else {
                    $plannerOutput .= "<a href='" . $_SESSION[$guid]["absoluteURL"] . "/modules/Planner/plannerProcess.php?gibbonPlannerEntryID=" . $row["gibbonPlannerEntryID"] . "&address=/modules/Planner/planner.php&viewBy=date&date={$date}&gibbonPersonID=" . $gibbonPersonID . "&returnToIndex=Y'><img src='" . $_SESSION[$guid]["absoluteURL"] . "/themes/" . $_SESSION[$guid]["gibbonThemeName"] . "/img/like_on.png'></a>";
                }
                $plannerOutput .= "</td>";
                $plannerOutput .= "<td>";
                $plannerOutput .= "<a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Planner/planner_view_full.php&search=" . $gibbonPersonID . "&viewBy=date&gibbonPlannerEntryID=" . $row["gibbonPlannerEntryID"] . "&date={$date}&width=1000&height=550'><img title='" . _('View') . "' src='./themes/" . $_SESSION[$guid]["gibbonThemeName"] . "/img/plus.png'/></a> ";
                $plannerOutput .= "</td>";
                $plannerOutput .= "</tr>";
            }
            $plannerOutput .= "</table>";
        }
    }
    if ($classes == FALSE) {
        $plannerOutput .= "<div style='margin-top: 2px' class='warning'>";
        $plannerOutput .= _("There are no records to display.");
        $plannerOutput .= "</div>";
    }
    //PREPARE RECENT GRADES
    $gradesOutput = "<div style='margin-top: 20px'><span style='font-size: 85%; font-weight: bold'>" . _('Recent Grades') . "</span> . <span style='font-size: 70%'><a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Markbook/markbook_view.php&search=" . $gibbonPersonID . "'>" . _('View Markbook') . "</a></span></div>";
    $grades = FALSE;
    //Get alternative header names
    $attainmentAlternativeName = getSettingByScope($connection2, "Markbook", "attainmentAlternativeName");
    $attainmentAlternativeNameAbrev = getSettingByScope($connection2, "Markbook", "attainmentAlternativeNameAbrev");
    $effortAlternativeName = getSettingByScope($connection2, "Markbook", "effortAlternativeName");
    $effortAlternativeNameAbrev = getSettingByScope($connection2, "Markbook", "effortAlternativeNameAbrev");
    try {
        $dataEntry = array("gibbonSchoolYearID" => $_SESSION[$guid]["gibbonSchoolYearID"], "gibbonPersonID" => $gibbonPersonID);
        $sqlEntry = "SELECT *, gibbonMarkbookColumn.comment AS commentOn, gibbonMarkbookColumn.uploadedResponse AS uploadedResponseOn, gibbonMarkbookEntry.comment AS comment FROM gibbonMarkbookEntry JOIN gibbonMarkbookColumn ON (gibbonMarkbookEntry.gibbonMarkbookColumnID=gibbonMarkbookColumn.gibbonMarkbookColumnID) JOIN gibbonCourseClass ON (gibbonMarkbookColumn.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonPersonIDStudent=:gibbonPersonID AND complete='Y' AND completeDate<='" . date("Y-m-d") . "' AND viewableParents='Y' ORDER BY completeDate DESC LIMIT 0, 3";
        $resultEntry = $connection2->prepare($sqlEntry);
        $resultEntry->execute($dataEntry);
    } catch (PDOException $e) {
        $gradesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
    }
    if ($resultEntry->rowCount() > 0) {
        $showParentAttainmentWarning = getSettingByScope($connection2, "Markbook", "showParentAttainmentWarning");
        $showParentEffortWarning = getSettingByScope($connection2, "Markbook", "showParentEffortWarning");
        $grades = TRUE;
        $gradesOutput .= "<table cellspacing='0' style='margin: 3px 0px; width: 100%'>";
        $gradesOutput .= "<tr class='head'>";
        $gradesOutput .= "<th style='width: 120px'>";
        $gradesOutput .= _("Assessment");
        $gradesOutput .= "</th>";
        $gradesOutput .= "<th style='width: 75px'>";
        if ($attainmentAlternativeName != "") {
            $gradesOutput .= $attainmentAlternativeName;
        } else {
            $gradesOutput .= _('Attainment');
        }
        $gradesOutput .= "</th>";
        $gradesOutput .= "<th style='width: 75px'>";
        if ($effortAlternativeName != "") {
            $gradesOutput .= $effortAlternativeName;
        } else {
            $gradesOutput .= _('Effort');
        }
        $gradesOutput .= "</th>";
        $gradesOutput .= "<th>";
        $gradesOutput .= _("Comment");
        $gradesOutput .= "</th>";
        $gradesOutput .= "<th style='width: 75px'>";
        $gradesOutput .= _("Submission");
        $gradesOutput .= "</th>";
        $gradesOutput .= "</tr>";
        $count3 = 0;
        while ($rowEntry = $resultEntry->fetch()) {
            if ($count3 % 2 == 0) {
                $rowNum = "even";
            } else {
                $rowNum = "odd";
            }
            $count3++;
            $gradesOutput .= "<a name='" . $rowEntry["gibbonMarkbookEntryID"] . "'></a>";
            $gradesOutput .= "<tr class={$rowNum}>";
            $gradesOutput .= "<td>";
            $gradesOutput .= "<span title='" . htmlPrep($rowEntry["description"]) . "'>" . $rowEntry["name"] . "</span><br/>";
            $gradesOutput .= "<span style='font-size: 90%; font-style: italic; font-weight: normal'>";
            $gradesOutput .= _("Marked on") . " " . dateConvertBack($guid, $rowEntry["completeDate"]) . "<br/>";
            $gradesOutput .= "</span>";
            $gradesOutput .= "</td>";
            if ($rowEntry["attainment"] == "N" or $rowEntry["gibbonScaleIDAttainment"] == "" and $rowEntry["gibbonRubricIDAttainment"] == "") {
                $gradesOutput .= "<td class='dull' style='color: #bbb; text-align: center'>";
                $gradesOutput .= _('N/A');
                $gradesOutput .= "</td>";
            } else {
                $gradesOutput .= "<td style='text-align: center'>";
                $attainmentExtra = "";
                try {
                    $dataAttainment = array("gibbonScaleID" => $rowEntry["gibbonScaleIDAttainment"]);
                    $sqlAttainment = "SELECT * FROM gibbonScale WHERE gibbonScaleID=:gibbonScaleID";
                    $resultAttainment = $connection2->prepare($sqlAttainment);
                    $resultAttainment->execute($dataAttainment);
                } catch (PDOException $e) {
                }
                if ($resultAttainment->rowCount() == 1) {
                    $rowAttainment = $resultAttainment->fetch();
                    $attainmentExtra = "<br/>" . _($rowAttainment["usage"]);
                }
                $styleAttainment = "style='font-weight: bold'";
                if ($rowEntry["attainmentConcern"] == "Y" and $showParentAttainmentWarning == "Y") {
                    $styleAttainment = "style='color: #" . $alert["color"] . "; font-weight: bold; border: 2px solid #" . $alert["color"] . "; padding: 2px 4px; background-color: #" . $alert["colorBG"] . "'";
                } else {
                    if ($rowEntry["attainmentConcern"] == "P" and $showParentAttainmentWarning == "Y") {
                        $styleAttainment = "style='color: #390; font-weight: bold; border: 2px solid #390; padding: 2px 4px; background-color: #D4F6DC'";
                    }
                }
                $gradesOutput .= "<div {$styleAttainment}>" . $rowEntry["attainmentValue"];
                if ($rowEntry["gibbonRubricIDAttainment"] != "") {
                    $gradesOutput .= "<a class='thickbox' href='" . $_SESSION[$guid]["absoluteURL"] . "/fullscreen.php?q=/modules/Markbook/markbook_view_rubric.php&gibbonRubricID=" . $rowEntry["gibbonRubricIDAttainment"] . "&gibbonCourseClassID=" . $rowEntry["gibbonCourseClassID"] . "&gibbonMarkbookColumnID=" . $rowEntry["gibbonMarkbookColumnID"] . "&gibbonPersonID=" . $gibbonPersonID . "&mark=FALSE&type=attainment&width=1100&height=550'><img style='margin-bottom: -3px; margin-left: 3px' title='View Rubric' src='./themes/" . $_SESSION[$guid]["gibbonThemeName"] . "/img/rubric.png'/></a>";
                }
                $gradesOutput .= "</div>";
                if ($rowEntry["attainmentValue"] != "") {
                    $gradesOutput .= "<div class='detailItem' style='font-size: 75%; font-style: italic; margin-top: 2px'><b>" . htmlPrep(_($rowEntry["attainmentDescriptor"])) . "</b>" . _($attainmentExtra) . "</div>";
                }
                $gradesOutput .= "</td>";
            }
            if ($rowEntry["effort"] == "N" or $rowEntry["gibbonScaleIDEffort"] == "" and $rowEntry["gibbonRubricIDEffort"] == "") {
                $gradesOutput .= "<td class='dull' style='color: #bbb; text-align: center'>";
                $gradesOutput .= _('N/A');
                $gradesOutput .= "</td>";
            } else {
                $gradesOutput .= "<td style='text-align: center'>";
                $effortExtra = "";
                try {
                    $dataEffort = array("gibbonScaleID" => $rowEntry["gibbonScaleIDEffort"]);
                    $sqlEffort = "SELECT * FROM gibbonScale WHERE gibbonScaleID=:gibbonScaleID";
                    $resultEffort = $connection2->prepare($sqlEffort);
                    $resultEffort->execute($dataEffort);
                } catch (PDOException $e) {
                }
                if ($resultEffort->rowCount() == 1) {
                    $rowEffort = $resultEffort->fetch();
                    $effortExtra = "<br/>" . _($rowEffort["usage"]);
                }
                $styleEffort = "style='font-weight: bold'";
                if ($rowEntry["effortConcern"] == "Y" and $showParentEffortWarning == "Y") {
                    $styleEffort = "style='color: #" . $alert["color"] . "; font-weight: bold; border: 2px solid #" . $alert["color"] . "; padding: 2px 4px; background-color: #" . $alert["colorBG"] . "'";
                }
                $gradesOutput .= "<div {$styleEffort}>" . $rowEntry["effortValue"];
                if ($rowEntry["gibbonRubricIDEffort"] != "") {
                    $gradesOutput .= "<a class='thickbox' href='" . $_SESSION[$guid]["absoluteURL"] . "/fullscreen.php?q=/modules/Markbook/markbook_view_rubric.php&gibbonRubricID=" . $rowEntry["gibbonRubricIDEffort"] . "&gibbonCourseClassID=" . $rowEntry["gibbonCourseClassID"] . "&gibbonMarkbookColumnID=" . $rowEntry["gibbonMarkbookColumnID"] . "&gibbonPersonID=" . $gibbonPersonID . "&mark=FALSE&type=effort&width=1100&height=550'><img style='margin-bottom: -3px; margin-left: 3px' title='View Rubric' src='./themes/" . $_SESSION[$guid]["gibbonThemeName"] . "/img/rubric.png'/></a>";
                }
                $gradesOutput .= "</div>";
                if ($rowEntry["effortValue"] != "") {
                    $gradesOutput .= "<div class='detailItem' style='font-size: 75%; font-style: italic; margin-top: 2px'><b>" . htmlPrep(_($rowEntry["effortDescriptor"])) . "</b>" . _($effortExtra) . "</div>";
                }
                $gradesOutput .= "</td>";
            }
            if ($rowEntry["commentOn"] == "N" and $rowEntry["uploadedResponseOn"] == "N") {
                $gradesOutput .= "<td class='dull' style='color: #bbb; text-align: left'>";
                $gradesOutput .= _('N/A');
                $gradesOutput .= "</td>";
            } else {
                $gradesOutput .= "<td>";
                if ($rowEntry["comment"] != "") {
                    if (strlen($rowEntry["comment"]) > 50) {
                        $gradesOutput .= "<script type='text/javascript'>";
                        $gradesOutput .= "\$(document).ready(function(){";
                        $gradesOutput .= "\$(\".comment-{$entryCount}-{$gibbonPersonID}\").hide();";
                        $gradesOutput .= "\$(\".show_hide-{$entryCount}-{$gibbonPersonID}\").fadeIn(1000);";
                        $gradesOutput .= "\$(\".show_hide-{$entryCount}-{$gibbonPersonID}\").click(function(){";
                        $gradesOutput .= "\$(\".comment-{$entryCount}-{$gibbonPersonID}\").fadeToggle(1000);";
                        $gradesOutput .= "});";
                        $gradesOutput .= "});";
                        $gradesOutput .= "</script>";
                        $gradesOutput .= "<span>" . substr($rowEntry["comment"], 0, 50) . "...<br/>";
                        $gradesOutput .= "<a title='" . _('View Description') . "' class='show_hide-{$entryCount}-{$gibbonPersonID}' onclick='return false;' href='#'>" . _('Read more') . "</a></span><br/>";
                    } else {
                        $gradesOutput .= $rowEntry["comment"];
                    }
                    $gradesOutput .= "<br/>";
                }
                if ($rowEntry["response"] != "") {
                    $gradesOutput .= "<a title='" . _('Uploaded Response') . "' href='" . $_SESSION[$guid]["absoluteURL"] . "/" . $rowEntry["response"] . "'>" . _('Uploaded Response') . "</a><br/>";
                }
                $gradesOutput .= "</td>";
            }
            if ($rowEntry["gibbonPlannerEntryID"] == 0) {
                $gradesOutput .= "<td class='dull' style='color: #bbb; text-align: left'>";
                $gradesOutput .= _('N/A');
                $gradesOutput .= "</td>";
            } else {
                try {
                    $dataSub = array("gibbonPlannerEntryID" => $rowEntry["gibbonPlannerEntryID"]);
                    $sqlSub = "SELECT * FROM gibbonPlannerEntry WHERE gibbonPlannerEntryID=:gibbonPlannerEntryID AND homeworkSubmission='Y'";
                    $resultSub = $connection2->prepare($sqlSub);
                    $resultSub->execute($dataSub);
                } catch (PDOException $e) {
                    $gradesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
                }
                if ($resultSub->rowCount() != 1) {
                    $gradesOutput .= "<td class='dull' style='color: #bbb; text-align: left'>";
                    $gradesOutput .= _('N/A');
                    $gradesOutput .= "</td>";
                } else {
                    $gradesOutput .= "<td>";
                    $rowSub = $resultSub->fetch();
                    try {
                        $dataWork = array("gibbonPlannerEntryID" => $rowEntry["gibbonPlannerEntryID"], "gibbonPersonID" => $gibbonPersonID);
                        $sqlWork = "SELECT * FROM gibbonPlannerEntryHomework WHERE gibbonPlannerEntryID=:gibbonPlannerEntryID AND gibbonPersonID=:gibbonPersonID ORDER BY count DESC";
                        $resultWork = $connection2->prepare($sqlWork);
                        $resultWork->execute($dataWork);
                    } catch (PDOException $e) {
                        $gradesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
                    }
                    if ($resultWork->rowCount() > 0) {
                        $rowWork = $resultWork->fetch();
                        if ($rowWork["status"] == "Exemption") {
                            $linkText = _("Exemption");
                        } else {
                            if ($rowWork["version"] == "Final") {
                                $linkText = _("Final");
                            } else {
                                $linkText = _("Draft") . " " . $rowWork["count"];
                            }
                        }
                        $style = "";
                        $status = "On Time";
                        if ($rowWork["status"] == "Exemption") {
                            $status = _("Exemption");
                        } else {
                            if ($rowWork["status"] == "Late") {
                                $style = "style='color: #ff0000; font-weight: bold; border: 2px solid #ff0000; padding: 2px 4px'";
                                $status = _("Late");
                            }
                        }
                        if ($rowWork["type"] == "File") {
                            $gradesOutput .= "<span title='" . $rowWork["version"] . ". {$status}. " . sprintf(_('Submitted at %1$s on %2$s'), substr($rowWork["timestamp"], 11, 5), dateConvertBack($guid, substr($rowWork["timestamp"], 0, 10))) . "' {$style}><a href='" . $_SESSION[$guid]["absoluteURL"] . "/" . $rowWork["location"] . "'>{$linkText}</a></span>";
                        } else {
                            if ($rowWork["type"] == "Link") {
                                $gradesOutput .= "<span title='" . $rowWork["version"] . ". {$status}. " . sprintf(_('Submitted at %1$s on %2$s'), substr($rowWork["timestamp"], 11, 5), dateConvertBack($guid, substr($rowWork["timestamp"], 0, 10))) . "' {$style}><a target='_blank' href='" . $rowWork["location"] . "'>{$linkText}</a></span>";
                            } else {
                                $gradesOutput .= "<span title='{$status}. " . sprintf(_('Recorded at %1$s on %2$s'), substr($rowWork["timestamp"], 11, 5), dateConvertBack($guid, substr($rowWork["timestamp"], 0, 10))) . "' {$style}>{$linkText}</span>";
                            }
                        }
                    } else {
                        if (date("Y-m-d H:i:s") < $rowSub["homeworkDueDateTime"]) {
                            $gradesOutput .= "<span title='Pending'>" . _('Pending') . "</span>";
                        } else {
                            if ($row["dateStart"] > $rowSub["date"]) {
                                $gradesOutput .= "<span title='" . _('Student joined school after assessment was given.') . "' style='color: #000; font-weight: normal; border: 2px none #ff0000; padding: 2px 4px'>" . _('NA') . "</span>";
                            } else {
                                if ($rowSub["homeworkSubmissionRequired"] == "Compulsory") {
                                    $gradesOutput .= "<div style='color: #ff0000; font-weight: bold; border: 2px solid #ff0000; padding: 2px 4px; margin: 2px 0px'>" . _('Incomplete') . "</div>";
                                } else {
                                    $gradesOutput .= _("Not submitted online");
                                }
                            }
                        }
                    }
                    $gradesOutput .= "</td>";
                }
            }
            $gradesOutput .= "</tr>";
            if (strlen($rowEntry["comment"]) > 50) {
                $gradesOutput .= "<tr class='comment-{$entryCount}-{$gibbonPersonID}' id='comment-{$entryCount}-{$gibbonPersonID}'>";
                $gradesOutput .= "<td colspan=6>";
                $gradesOutput .= $rowEntry["comment"];
                $gradesOutput .= "</td>";
                $gradesOutput .= "</tr>";
            }
            $entryCount++;
        }
        $gradesOutput .= "</table>";
    }
    if ($grades == FALSE) {
        $gradesOutput .= "<div style='margin-top: 2px' class='warning'>";
        $gradesOutput .= _("There are no records to display.");
        $gradesOutput .= "</div>";
    }
    //PREPARE UPCOMING DEADLINES
    $deadlinesOutput = "<div style='margin-top: 20px'><span style='font-size: 85%; font-weight: bold'>" . _('Upcoming Deadlines') . "</span> . <span style='font-size: 70%'><a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Planner/planner_deadlines.php&search=" . $gibbonPersonID . "'>" . _('View All Deadlines') . "</a></span></div>";
    $deadlines = FALSE;
    try {
        $data = array("gibbonSchoolYearID" => $_SESSION[$guid]["gibbonSchoolYearID"], "gibbonPersonID" => $gibbonPersonID);
        $sql = "\n\t\t(SELECT 'teacherRecorded' AS type, gibbonPlannerEntryID, gibbonUnitID, gibbonCourse.nameShort AS course, gibbonCourseClass.nameShort AS class, gibbonPlannerEntry.name, date, timeStart, timeEnd, viewableStudents, viewableParents, homework, homeworkDueDateTime, role FROM gibbonPlannerEntry JOIN gibbonCourseClass ON (gibbonPlannerEntry.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonCourseClassPerson ON (gibbonCourseClass.gibbonCourseClassID=gibbonCourseClassPerson.gibbonCourseClassID) JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonCourseClassPerson.gibbonPersonID=:gibbonPersonID AND NOT role='Student - Left' AND NOT role='Teacher - Left' AND homework='Y' AND (role='Teacher' OR (role='Student' AND viewableStudents='Y')) AND homeworkDueDateTime>'" . date("Y-m-d H:i:s") . "' AND ((date<'" . date("Y-m-d") . "') OR (date='" . date("Y-m-d") . "' AND timeEnd<='" . date("H:i:s") . "')))\n\t\tUNION\n\t\t(SELECT 'studentRecorded' AS type, gibbonPlannerEntry.gibbonPlannerEntryID, gibbonUnitID, gibbonCourse.nameShort AS course, gibbonCourseClass.nameShort AS class, gibbonPlannerEntry.name, date, timeStart, timeEnd, 'Y' AS viewableStudents, 'Y' AS viewableParents, 'Y' AS homework, gibbonPlannerEntryStudentHomework.homeworkDueDateTime, role FROM gibbonPlannerEntry JOIN gibbonCourseClass ON (gibbonPlannerEntry.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) JOIN gibbonCourseClassPerson ON (gibbonCourseClass.gibbonCourseClassID=gibbonCourseClassPerson.gibbonCourseClassID) JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) JOIN gibbonPlannerEntryStudentHomework ON (gibbonPlannerEntryStudentHomework.gibbonPlannerEntryID=gibbonPlannerEntry.gibbonPlannerEntryID AND gibbonPlannerEntryStudentHomework.gibbonPersonID=gibbonCourseClassPerson.gibbonPersonID) WHERE gibbonSchoolYearID=:gibbonSchoolYearID AND gibbonCourseClassPerson.gibbonPersonID=:gibbonPersonID AND NOT role='Student - Left' AND NOT role='Teacher - Left' AND (role='Teacher' OR (role='Student' AND viewableStudents='Y')) AND gibbonPlannerEntryStudentHomework.homeworkDueDateTime>'" . date("Y-m-d H:i:s") . "' AND ((date<'" . date("Y-m-d") . "') OR (date='" . date("Y-m-d") . "' AND timeEnd<='" . date("H:i:s") . "')))\n\t\tORDER BY homeworkDueDateTime, type";
        $result = $connection2->prepare($sql);
        $result->execute($data);
    } catch (PDOException $e) {
        $deadlinesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
    }
    if ($result->rowCount() > 0) {
        $deadlines = TRUE;
        $deadlinesOutput .= "<ol style='margin-left: 15px'>";
        while ($row = $result->fetch()) {
            $diff = (strtotime(substr($row["homeworkDueDateTime"], 0, 10)) - strtotime(date("Y-m-d"))) / 86400;
            $style = "style='padding-right: 3px;'";
            if ($diff < 2) {
                $style = "style='padding-right: 3px; border-right: 10px solid #cc0000'";
            } else {
                if ($diff < 4) {
                    $style = "style='padding-right: 3px; border-right: 10px solid #D87718'";
                }
            }
            $deadlinesOutput .= "<li {$style}>";
            $deadlinesOutput .= "<a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Planner/planner_view_full.php&search=" . $gibbonPersonID . "&gibbonPlannerEntryID=" . $row["gibbonPlannerEntryID"] . "&viewBy=date&date={$date}&width=1000&height=550'>" . $row["course"] . "." . $row["class"] . "</a> ";
            $deadlinesOutput .= "<span style='font-style: italic'>" . sprintf(_('Due at %1$s on %2$s'), substr($row["homeworkDueDateTime"], 11, 5), dateConvertBack($guid, substr($row["homeworkDueDateTime"], 0, 10)));
            $deadlinesOutput .= "</li>";
        }
        $deadlinesOutput .= "</ol>";
    }
    if ($deadlines == FALSE) {
        $deadlinesOutput .= "<div style='margin-top: 2px' class='warning'>";
        $deadlinesOutput .= _("There are no records to display.");
        $deadlinesOutput .= "</div>";
    }
    //PREPARE TIMETABLE
    $timetable = FALSE;
    $timetableOutput = "";
    if (isActionAccessible($guid, $connection2, "/modules/Timetable/tt_view.php")) {
        $date = date("Y-m-d");
        if (isset($_POST["ttDate"])) {
            $date = dateConvert($guid, $_POST["ttDate"]);
        }
        $params = "";
        if ($classes != FALSE or $grades != FALSE or $deadlines != FALSE) {
            $params = "&tab=1";
        }
        $timetableOutputTemp = renderTT($guid, $connection2, $gibbonPersonID, NULL, NULL, dateConvertToTimestamp($date), "", $params, TRUE);
        if ($timetableOutputTemp != FALSE) {
            $timetable = TRUE;
            $timetableOutput .= $timetableOutputTemp;
        }
    }
    //PREPARE ACTIVITIES
    $activities = FALSE;
    $activitiesOutput = FALSE;
    if (!isActionAccessible($guid, $connection2, "/modules/Activities/activities_view.php")) {
        $activitiesOutput .= "<div class='error'>";
        $activitiesOutput .= _("Your request failed because you do not have access to this action.");
        $activitiesOutput .= "</div>";
    } else {
        $activities = TRUE;
        $activitiesOutput .= "<div class='linkTop'>";
        $activitiesOutput .= "<a href='" . $_SESSION[$guid]["absoluteURL"] . "/index.php?q=/modules/Activities/activities_view.php'>" . _('View Available Activities') . "</a>";
        $activitiesOutput .= "</div>";
        $dateType = getSettingByScope($connection2, 'Activities', 'dateType');
        if ($dateType == "Term") {
            $maxPerTerm = getSettingByScope($connection2, 'Activities', 'maxPerTerm');
        }
        try {
            $dataYears = array("gibbonPersonID" => $gibbonPersonID);
            $sqlYears = "SELECT * FROM gibbonStudentEnrolment JOIN gibbonSchoolYear ON (gibbonStudentEnrolment.gibbonSchoolYearID=gibbonSchoolYear.gibbonSchoolYearID) WHERE gibbonSchoolYear.status='Current' AND gibbonPersonID=:gibbonPersonID ORDER BY sequenceNumber DESC";
            $resultYears = $connection2->prepare($sqlYears);
            $resultYears->execute($dataYears);
        } catch (PDOException $e) {
            $activitiesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
        }
        if ($resultYears->rowCount() < 1) {
            $activitiesOutput .= "<div class='error'>";
            $activitiesOutput .= _("There are no records to display.");
            $activitiesOutput .= "</div>";
        } else {
            $yearCount = 0;
            while ($rowYears = $resultYears->fetch()) {
                $yearCount++;
                try {
                    $data = array("gibbonPersonID" => $gibbonPersonID, "gibbonSchoolYearID" => $rowYears["gibbonSchoolYearID"]);
                    $sql = "SELECT gibbonActivity.*, gibbonActivityStudent.status, NULL AS role FROM gibbonActivity JOIN gibbonActivityStudent ON (gibbonActivity.gibbonActivityID=gibbonActivityStudent.gibbonActivityID) WHERE gibbonActivityStudent.gibbonPersonID=:gibbonPersonID AND gibbonSchoolYearID=:gibbonSchoolYearID AND active='Y' ORDER BY name";
                    $result = $connection2->prepare($sql);
                    $result->execute($data);
                } catch (PDOException $e) {
                    $activitiesOutput .= "<div class='error'>" . $e->getMessage() . "</div>";
                }
                if ($result->rowCount() < 1) {
                    $activitiesOutput .= "<div class='error'>";
                    $activitiesOutput .= _("There are no records to display.");
                    $activitiesOutput .= "</div>";
                } else {
                    $activitiesOutput .= "<table cellspacing='0' style='width: 100%'>";
                    $activitiesOutput .= "<tr class='head'>";
                    $activitiesOutput .= "<th>";
                    $activitiesOutput .= _("Activity");
                    $activitiesOutput .= "</th>";
                    $options = getSettingByScope($connection2, "Activities", "activityTypes");
                    if ($options != "") {
                        $activitiesOutput .= "<th>";
                        $activitiesOutput .= _("Type");
                        $activitiesOutput .= "</th>";
                    }
                    $activitiesOutput .= "<th>";
                    if ($dateType != "Date") {
                        $activitiesOutput .= _("Term");
                    } else {
                        $activitiesOutput .= _("Dates");
                    }
                    $activitiesOutput .= "</th>";
                    $activitiesOutput .= "<th>";
                    $activitiesOutput .= _("Status");
                    $activitiesOutput .= "</th>";
                    $activitiesOutput .= "</tr>";
                    $count = 0;
                    $rowNum = "odd";
                    while ($row = $result->fetch()) {
                        if ($count % 2 == 0) {
                            $rowNum = "even";
                        } else {
                            $rowNum = "odd";
                        }
                        $count++;
                        //COLOR ROW BY STATUS!
                        $activitiesOutput .= "<tr class={$rowNum}>";
                        $activitiesOutput .= "<td>";
                        $activitiesOutput .= $row["name"];
                        $activitiesOutput .= "</td>";
                        if ($options != "") {
                            $activitiesOutput .= "<td>";
                            $activitiesOutput .= trim($row["type"]);
                            $activitiesOutput .= "</td>";
                        }
                        $activitiesOutput .= "<td>";
                        if ($dateType != "Date") {
                            $terms = getTerms($connection2, $_SESSION[$guid]["gibbonSchoolYearID"], true);
                            $termList = "";
                            for ($i = 0; $i < count($terms); $i = $i + 2) {
                                if (is_numeric(strpos($row["gibbonSchoolYearTermIDList"], $terms[$i]))) {
                                    $termList .= $terms[$i + 1] . "<br/>";
                                }
                            }
                            $activitiesOutput .= $termList;
                        } else {
                            if (substr($row["programStart"], 0, 4) == substr($row["programEnd"], 0, 4)) {
                                if (substr($row["programStart"], 5, 2) == substr($row["programEnd"], 5, 2)) {
                                    $activitiesOutput .= date("F", mktime(0, 0, 0, substr($row["programStart"], 5, 2))) . " " . substr($row["programStart"], 0, 4);
                                } else {
                                    $activitiesOutput .= date("F", mktime(0, 0, 0, substr($row["programStart"], 5, 2))) . " - " . date("F", mktime(0, 0, 0, substr($row["programEnd"], 5, 2))) . "<br/>" . substr($row["programStart"], 0, 4);
                                }
                            } else {
                                $activitiesOutput .= date("F", mktime(0, 0, 0, substr($row["programStart"], 5, 2))) . " " . substr($row["programStart"], 0, 4) . " -<br/>" . date("F", mktime(0, 0, 0, substr($row["programEnd"], 5, 2))) . " " . substr($row["programEnd"], 0, 4);
                            }
                        }
                        $activitiesOutput .= "</td>";
                        $activitiesOutput .= "<td>";
                        if ($row["status"] != "") {
                            $activitiesOutput .= $row["status"];
                        } else {
                            $activitiesOutput .= "<i>" . _('NA') . "</i>";
                        }
                        $activitiesOutput .= "</td>";
                        $activitiesOutput .= "</tr>";
                    }
                    $activitiesOutput .= "</table>";
                }
            }
        }
    }
    //GET HOOKS INTO DASHBOARD
    $hooks = array();
    try {
        $dataHooks = array();
        $sqlHooks = "SELECT * FROM gibbonHook WHERE type='Parental Dashboard'";
        $resultHooks = $connection2->prepare($sqlHooks);
        $resultHooks->execute($dataHooks);
    } catch (PDOException $e) {
        print "<div class='error'>" . $e->getMessage() . "</div>";
    }
    if ($resultHooks->rowCount() > 0) {
        $count = 0;
        while ($rowHooks = $resultHooks->fetch()) {
            $options = unserialize($rowHooks["options"]);
            //Check for permission to hook
            try {
                $dataHook = array("gibbonRoleIDCurrent" => $_SESSION[$guid]["gibbonRoleIDCurrent"], "sourceModuleName" => $options["sourceModuleName"]);
                $sqlHook = "SELECT gibbonHook.name, gibbonModule.name AS module, gibbonAction.name AS action FROM gibbonHook JOIN gibbonModule ON (gibbonHook.gibbonModuleID=gibbonModule.gibbonModuleID) JOIN gibbonAction ON (gibbonAction.gibbonModuleID=gibbonModule.gibbonModuleID) JOIN gibbonPermission ON (gibbonPermission.gibbonActionID=gibbonAction.gibbonActionID) WHERE gibbonAction.gibbonModuleID=(SELECT gibbonModuleID FROM gibbonModule WHERE gibbonPermission.gibbonRoleID=:gibbonRoleIDCurrent AND name=:sourceModuleName) AND gibbonHook.type='Parental Dashboard'  AND gibbonAction.name='" . $options["sourceModuleAction"] . "' AND gibbonModule.name='" . $options["sourceModuleName"] . "' ORDER BY name";
                $resultHook = $connection2->prepare($sqlHook);
                $resultHook->execute($dataHook);
            } catch (PDOException $e) {
            }
            if ($resultHook->rowCount() == 1) {
                $rowHook = $resultHook->fetch();
                $hooks[$count]["name"] = $rowHooks["name"];
                $hooks[$count]["sourceModuleName"] = $rowHook["module"];
                $hooks[$count]["sourceModuleInclude"] = $options["sourceModuleInclude"];
                $count++;
            }
        }
    }
    if ($classes == FALSE and $grades == FALSE and $deadlines == FALSE and $timetable == FALSE and $activities == FALSE and count($hooks) < 1) {
        $return .= "<div class='warning'>";
        $return .= _("There are no records to display.");
        $return .= "</div>";
    } else {
        $defaultTab = 0;
        if (isset($_GET["tab"])) {
            $defaultTab = $_GET["tab"];
        }
        $return .= "<script type='text/javascript'>";
        $return .= "\$(function() {";
        $return .= "\$( \"#" . $gibbonPersonID . "tabs\" ).tabs({";
        $return .= "active: " . $defaultTab . ",";
        $return .= "ajaxOptions: {";
        $return .= "error: function( xhr, status, index, anchor ) {";
        $return .= "\$( anchor.hash ).html(";
        $return .= "\"Couldn't load this tab.\" );";
        $return .= "}";
        $return .= "}";
        $return .= "});";
        $return .= "});";
        $return .= "</script>";
        $return .= "<div id='" . $gibbonPersonID . "tabs' style='margin: 0 0'>";
        $return .= "<ul>";
        if ($classes != FALSE or $grades != FALSE or $deadlines != FALSE) {
            $return .= "<li><a href='#tabs1'>" . _('Learning Overview') . "</a></li>";
        }
        if ($timetable != FALSE) {
            $return .= "<li><a href='#tabs2'>" . _('Timetable') . "</a></li>";
        }
        if ($activities != FALSE) {
            $return .= "<li><a href='#tabs3'>" . _('Activities') . "</a></li>";
        }
        $tabCountExtra = 3;
        foreach ($hooks as $hook) {
            $tabCountExtra++;
            $return .= "<li><a href='#tabs" . $tabCountExtra . "'>" . _($hook["name"]) . "</a></li>";
        }
        $return .= "</ul>";
        if ($classes != FALSE or $grades != FALSE or $deadlines != FALSE) {
            $return .= "<div id='tabs1'>";
            $return .= $plannerOutput;
            $return .= $gradesOutput;
            $return .= $deadlinesOutput;
            $return .= "</div>";
        }
        if ($timetable != FALSE) {
            $return .= "<div id='tabs2'>";
            $return .= $timetableOutput;
            $return .= "</div>";
        }
        if ($activities != FALSE) {
            $return .= "<div id='tabs3'>";
            $return .= $activitiesOutput;
            $return .= "</div>";
        }
        $tabCountExtra = 3;
        foreach ($hooks as $hook) {
            $tabCountExtra++;
            $return .= "<div style='min-height: 100px' id='tabs" . $tabCountExtra . "'>";
            $include = $_SESSION[$guid]["absolutePath"] . "/modules/" . $hook["sourceModuleName"] . "/" . $hook["sourceModuleInclude"];
            if (!file_exists($include)) {
                $return .= "<div class='error'>";
                $return .= _("The selected page cannot be displayed due to a hook error.");
                $return .= "</div>";
            } else {
                $return .= (include $include);
            }
            $return .= "</div>";
        }
        $return .= "</div>";
    }
    return $return;
}
     $rowNum = "odd";
 }
 $count++;
 //COLOR ROW BY STATUS!
 print "<tr class={$rowNum}>";
 print "<td>";
 print $row["name"];
 print "</td>";
 if ($options != "") {
     print "<td>";
     print trim($row["type"]);
     print "</td>";
 }
 print "<td>";
 if ($dateType != "Date") {
     $terms = getTerms($connection2, $_SESSION[$guid]["gibbonSchoolYearID"], true);
     $termList = "";
     for ($i = 0; $i < count($terms); $i = $i + 2) {
         if (is_numeric(strpos($row["gibbonSchoolYearTermIDList"], $terms[$i]))) {
             $termList .= $terms[$i + 1] . "<br/>";
         }
     }
     print $termList;
 } else {
     if (substr($row["programStart"], 0, 4) == substr($row["programEnd"], 0, 4)) {
         if (substr($row["programStart"], 5, 2) == substr($row["programEnd"], 5, 2)) {
             print date("F", mktime(0, 0, 0, substr($row["programStart"], 5, 2))) . " " . substr($row["programStart"], 0, 4);
         } else {
             print date("F", mktime(0, 0, 0, substr($row["programStart"], 5, 2))) . " - " . date("F", mktime(0, 0, 0, substr($row["programEnd"], 5, 2))) . "<br/>" . substr($row["programStart"], 0, 4);
         }
     } else {
Beispiel #28
0
/**
* Main function
*
* @param mixed $_REQUEST
*/
function executeSmartyTemplate($params)
{
    global $smarty, $outputfile, $isJSout, $rtStructs, $dtStructs, $dtTerms, $gparams;
    mysql_connection_overwrite(DATABASE);
    //AO: mysql_connection_select - does not work since there is no access to stored procedures(getTemporalDateString) Steve uses in some query
    //TODO SAW  grant ROuser EXECUTE on getTemporalDate and any other readonly procs
    //load definitions (USE CACHE)
    $rtStructs = getAllRectypeStructures(true);
    $dtStructs = getAllDetailTypeStructures(true);
    $dtTerms = getTerms(true);
    $params["f"] = 1;
    //always search (do not use cache)
    $isJSout = array_key_exists("mode", $params) && $params["mode"] == "js";
    //use javascript wrap
    $outputfile = array_key_exists("output", $params) ? $params["output"] : null;
    $publishmode = array_key_exists("publish", $params) ? intval($params['publish']) : 0;
    $gparams = $params;
    //keep to use in other functions
    if (!array_key_exists("limit", $params)) {
        //not defined
        $limit = intval(@$_SESSION[HEURIST_SESSION_DB_PREFIX . 'heurist']["display-preferences"]['report-output-limit']);
        if (!$limit || $limit < 1) {
            $limit = 1000;
            //default limit in dispPreferences
        }
        $params["limit"] = $limit;
        //force limit
    }
    $qresult = loadSearch($params);
    //from search/getSearchResults.php - loads array of records based og GET request
    /*****DEBUG****/
    //error_log(print_r($qresult,true));
    if (!array_key_exists('records', $qresult) || $qresult['resultCount'] == 0) {
        if ($publishmode > 0) {
            $error = "<b><font color='#ff0000'>Note: There are no records in this view. The URL will only show records to which the viewer has access. Unless you are logged in to the database, you can only see records which are marked as Public visibility</font></b>";
        } else {
            $error = "<b><font color='#ff0000'>Search or Select records to see template output</font></b>";
        }
        if ($isJSout) {
            $error = add_javascript_wrap4($error, null);
        }
        echo $error;
        if ($publishmode > 0 && $outputfile != null) {
            //save empty outpurt inot file
            save_report_output2("<div style=\"padding:20px;font-size:110%\">Currently there are no results</div>");
        }
        exit;
    }
    //get name of template file
    $template_file = array_key_exists('template', $params) ? $params['template'] : null;
    //get template body from request (for execution from editor)
    $template_body = array_key_exists('template_body', $params) ? $params['template_body'] : null;
    //convert to array that will assigned to smarty variable
    $records = $qresult["records"];
    $results = array();
    $k = 0;
    foreach ($records as $rec) {
        $res1 = getRecordForSmarty($rec, 0, $k);
        $k++;
        array_push($results, $res1);
    }
    //activate default template - generic list of records
    $smarty->assign('results', $results);
    ini_set('display_errors', 'false');
    // 'stdout' );
    $smarty->error_reporting = 0;
    if ($template_body) {
        //execute template from string - modified temoplate in editor
        /*****DEBUG****/
        //error_log(">>>".$template_body."<<<");
        /*****DEBUG****/
        //error_log(">>>>>>>".$replevel."<<<<<<");
        //error report level: 1 notices, 2 all, 3 debug mode
        $replevel = array_key_exists('replevel', $params) ? $params['replevel'] : 0;
        if ($replevel == "1" || $replevel == "2") {
            ini_set('display_errors', 'true');
            // 'stdout' );
            $smarty->debugging = false;
            if ($replevel == "2") {
                $smarty->error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE;
            } else {
                $smarty->error_reporting = E_NOTICE;
            }
        } else {
            $smarty->debugging = $replevel == "3";
        }
        $smarty->debug_tpl = dirname(__FILE__) . '/debug_html.tpl';
        //save temporary template
        //this is user name $template_file = "_temp.tpl";
        $template_file = "_" . get_user_username() . ".tpl";
        $file = fopen($smarty->template_dir . $template_file, "w");
        fwrite($file, $template_body);
        fclose($file);
        //$smarty->display('string:'.$template_body);
    } else {
        // usual way - from file
        if (!$template_file) {
            $template_file = 'test01.tpl';
        }
        $smarty->debugging = false;
        $smarty->error_reporting = 0;
        if ($outputfile != null) {
            $smarty->registerFilter('output', 'save_report_output');
        } else {
            if ($isJSout) {
                $smarty->registerFilter('output', 'add_javascript_wrap5');
            }
        }
        //$smarty->unregisterFilter('post','add_javascript_wrap');
    }
    try {
        $smarty->display($template_file);
    } catch (Exception $e) {
        echo 'Exception on execution: ', $e->getMessage(), "\n";
    }
    //$tpl_vars = $smarty->get_template_vars();
    //var_dump($tpl_vars);
    //DEBUG stuff
    //@todo - return the list of record types - to obtain the applicable templates
    //echo "query result = ".print_r($qresult,true)."\n";
    //header("Content-type: text/javascript");
    //header('Content-type: text/html; charset=utf-8');
    //echo json_format( $qresult, true);
    //echo "<br/>***<br/>";
    //echo json_format( $results, true);
    //END DEBUG stuff
}