/** * @param $post WP_Post * @throws ErrorException */ function __construct($post) { if (gettype($post) != 'object' or get_class($post) != 'WP_Post') { td_util::error(__FILE__, 'td_module: ' . get_Class($this) . '($post): $post is not WP_Post'); } //this filter is used by td_unique_posts.php - to add unique posts to the array for the datasource apply_filters("td_wp_booster_module_constructor", $this, $post); $this->post = $post; // by default the WordPress title is not escaped on twenty fifteen $this->title = get_the_title($post->ID); $this->title_attribute = esc_attr(strip_tags($this->title)); $this->href = esc_url(get_permalink($post->ID)); if (has_post_thumbnail($this->post->ID)) { $tmp_get_post_thumbnail_id = get_post_thumbnail_id($this->post->ID); if (!empty($tmp_get_post_thumbnail_id)) { // if we have a wrong id, leave the post_thumb_id NULL $this->post_thumb_id = $tmp_get_post_thumbnail_id; } } //get the review metadata //$this->td_review = get_post_meta($this->post->ID, 'td_review', true); @todo $this->td_review variable name must be replaced and the 'get_quotes_on_blocks', 'get_category' methods also $this->td_review = get_post_meta($this->post->ID, 'td_post_theme_settings', true); if (!empty($this->td_review['has_review']) and (!empty($this->td_review['p_review_stars']) or !empty($this->td_review['p_review_percents']) or !empty($this->td_review['p_review_points']))) { $this->is_review = true; } }
/** * Create the user-Proxy according to the given User-Object * * @return UserInterface * @throws \UnexpectedValueException */ public function factory($userObject) { if ($userObject instanceof \Hybridauth\Entity\Profile) { $userProxy = new HybridAuthUserWrapper(); $userProxy->setUser($userObject); return $userProxy; } throw new \UnexpectedValueException(sprintf('The given Object could not be found. Found "%s" instead', get_Class($userObject))); }
/** * Create the user-Proxy according to the given User-Object * * @return UserInterface * @throws \UnexpectedValueException */ public function factory($userObject) { switch (get_class($userObject)) { case 'Hybridauth\\Entity\\Profile': $userProxy = new HybridAuthUserWrapper(); $userProxy->setUser($userObject); return $userProxy; break; default: throw new \UnexpectedValueException(sprintf('The given Object could not be found. Found "%s" instead', get_Class($userObject))); } throw new \UnexpectedValueException('The given Object could not be found'); return false; }
public function serialise($data) { if (is_object($data)) { $parent = $this->writeParentTag(get_Class($data), $this->dom); $this->serialiseObject($parent, $data); return $this->dom; } else { if (is_array($data)) { $parent = $this->writeParentTag('array', $this->dom); $this->serialiseArray($parent, $data); return $this->dom; } } exit("Serialise Requires data to be type object or string"); }
/** * @param $post WP_Post * @throws ErrorException */ function __construct($post) { if (gettype($post) != 'object' or get_class($post) != 'WP_Post') { throw new ErrorException('td_module: ' . get_Class($this) . '($post): $post is not WP_Post'); } //this filter is used by td_unique_posts.php - to add unique posts to the array for the datasource apply_filters("td_wp_booster_module_constructor", $this, $post); $this->post = $post; // by default the WordPress title is not escaped on twenty fifteen $this->title = get_the_title($post->ID); $this->title_attribute = esc_attr(strip_tags($this->title)); $this->href = esc_url(get_permalink($post->ID)); if (has_post_thumbnail($this->post->ID)) { $this->post_has_thumb = true; } //get the review metadata //$this->td_review = get_post_meta($this->post->ID, 'td_review', true); @todo $this->td_review variable name must be replaced and the 'get_quotes_on_blocks', 'get_category' methods also $this->td_review = get_post_meta($this->post->ID, 'td_post_theme_settings', true); }
/** * show for PDF the webapplications associated with a device * * @param $pdf * @param $item * **/ static function PdfFromItems(PluginPdfSimplePDF $pdf, CommonGLPI $item) { global $DB, $CFG_GLPI; $pdf->setColumnsSize(100); $pdf->displayTitle('<b>' . _n('Associated web application', 'Associated web applications', 2, 'webapplications') . '</b>'); $ID = $item->getField('id'); $itemtype = get_Class($item); $canread = $item->can($ID, READ); $canedit = $item->can($ID, UPDATE); $web = new PluginWebapplicationsWebapplication(); $query = "SELECT `glpi_plugin_webapplications_webapplications`.* " . " FROM `glpi_plugin_webapplications_webapplications_items`,`glpi_plugin_webapplications_webapplications` " . " LEFT JOIN `glpi_entities` ON (`glpi_entities`.`id` = `glpi_plugin_webapplications_webapplications`.`entities_id`) " . " WHERE `glpi_plugin_webapplications_webapplications_items`.`items_id` = '" . $ID . "' \n AND `glpi_plugin_webapplications_webapplications_items`.`itemtype` = '" . $itemtype . "' \n AND `glpi_plugin_webapplications_webapplications_items`.`plugin_webapplications_webapplications_id` = `glpi_plugin_webapplications_webapplications`.`id` " . getEntitiesRestrictRequest(" AND ", "glpi_plugin_webapplications_webapplications", '', '', $web->maybeRecursive()); $result = $DB->query($query); $number = $DB->numrows($result); if (!$number) { $pdf->displayLine(__('No item found')); } else { if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(25, 25, 15, 15, 20); $pdf->displayTitle('<b><i>' . __('Name'), __('Entity'), __('Technician in charge of the hardware'), __('Group in charge of the hardware'), PluginWebapplicationsWebapplicationType::getTypeName(1) . '</i></b>'); } else { $pdf->setColumnsSize(30, 30, 20, 20); $pdf->displayTitle('<b><i>' . __('Name'), __('Technician in charge of the hardware'), __('Group in charge of the hardware'), PluginWebapplicationsWebapplicationType::getTypeName(1) . '</i></b>'); } while ($data = $DB->fetch_array($result)) { $webapplicationsID = $data["id"]; if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(25, 25, 15, 15, 20); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_entities", $data['entities_id'])), Html::clean(getUsername("glpi_users", $data["users_id_tech"])), Html::clean(Dropdown::getDropdownName("glpi_groups", $data["groups_id_tech"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_webapplications_webapplicationtypes", $data["plugin_webapplications_webapplicationtypes_id"]))); } else { $pdf->setColumnsSize(50, 25, 25); $pdf->displayLine($data["name"], Html::clean(getUsername("glpi_users", $data["users_id_tech"])), Html::clean(Dropdown::getDropdownName("glpi_groups", $data["groups_id_tech"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_webapplications_webapplicationtypes", $data["plugin_webapplications_webapplicationtypes_id"]))); } } } }
/** * show for PDF the resources associated with a device * * @param $ID of the device * @param $itemtype : type of the device * */ static function PdfFromItems($pdf, $item) { global $DB, $CFG_GLPI; $pdf->setColumnsSize(100); $pdf->displayTitle('<b>' . __('Associated Human Resource', 'resources') . '</b>'); $ID = $item->getField('id'); $itemtype = get_Class($item); $canread = $item->can($ID, 'r'); $canedit = $item->can($ID, 'w'); $PluginResourcesResource = new PluginResourcesResource(); $query = "SELECT `glpi_plugin_resources_resources`.* " . " FROM `glpi_plugin_resources_resources_items`,`glpi_plugin_resources_resources` " . " LEFT JOIN `glpi_entities` ON (`glpi_entities`.`id` = `glpi_plugin_resources_resources`.`entities_id`) " . " WHERE `glpi_plugin_resources_resources_items`.`items_id` = '" . $ID . "' \n AND `glpi_plugin_resources_resources_items`.`itemtype` = '" . $itemtype . "' \n AND `glpi_plugin_resources_resources_items`.`plugin_resources_resources_id` = `glpi_plugin_resources_resources`.`id` " . getEntitiesRestrictRequest(" AND ", "glpi_plugin_resources_resources", '', '', $PluginResourcesResource->maybeRecursive()); $result = $DB->query($query); $number = $DB->numrows($result); if (!$number) { $pdf->displayLine(__('No item found')); } else { if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(14, 14, 14, 14, 14, 14, 16); $pdf->displayTitle('<b><i>' . __('Name'), __('Entity'), __('Location'), PluginResourcesContractType::getTypeName(1), PluginResourcesDepartment::getTypeName(1), __('Arrival date', 'resources'), __('Departure date', 'resources') . '</i></b>'); } else { $pdf->setColumnsSize(17, 17, 17, 17, 17, 17); $pdf->displayTitle('<b><i>' . __('Name'), __('Location'), PluginResourcesContractType::getTypeName(1), PluginResourcesDepartment::getTypeName(1), __('Arrival date', 'resources'), __('Departure date', 'resources') . '</i></b>'); } while ($data = $DB->fetch_array($result)) { $resourcesID = $data["id"]; if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(14, 14, 14, 14, 14, 14, 16); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_entities", $data['entities_id'])), Html::clean(Dropdown::getDropdownName("glpi_locations", $data["locations_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_resources_contracttypes", $data["plugin_resources_contracttypes_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_resources_departments", $data["plugin_resources_departments_id"])), Html::convDate($data["date_begin"]), Html::convDate($data["date_end"])); } else { $pdf->setColumnsSize(17, 17, 17, 17, 17, 17); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_locations", $data["locations_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_resources_contracttypes", $data["plugin_resources_contracttypes_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_resources_departments", $data["plugin_resources_departments_id"])), Html::convDate($data["date_begin"]), Html::convDate($data["date_end"])); } } } }
private function getZhuanTiListByType($cmsObjArr) {/*{{{*/ $oldZhuanTiList = ZhuanTiClient::getInstance()->getZhuanTiByDoctorId($cmsObjArr['doctorIds'],50000); $newZhuanTiList = PaperClient::getInstance()->queryPaperListByTag($cmsObjArr['entity']->id,get_Class($cmsObjArr['entity'])); return CombineZhuanTi::combineZhuanTiList($oldZhuanTiList,$newZhuanTiList); }/*}}}*/
public function __construct() { parent::__construct(); $this->table = get_Class($this); $this->load->database(); }
/** * show for PDF the applicatif associated with a device * * @param $pdf * @param $item **/ static function pdfForItem(PluginPdfSimplePDF $pdf, CommonGLPI $item) { global $DB, $CFG_GLPI; $ID = $item->getField('id'); $itemtype = get_Class($item); $canread = $item->can($ID, 'r'); $canedit = $item->can($ID, 'w'); $pdf->setColumnsSize(100); $pdf->displayTitle("<b>" . __('Associated appliances', 'appliances') . "</b>"); $query = "SELECT `glpi_plugin_appliances_appliances_items`.`id` AS entID,\n `glpi_plugin_appliances_appliances`.*\n FROM `glpi_plugin_appliances_appliances_items`,\n `glpi_plugin_appliances_appliances`\n LEFT JOIN `glpi_entities`\n ON (`glpi_entities`.`id` = `glpi_plugin_appliances_appliances`.`entities_id`)\n WHERE `glpi_plugin_appliances_appliances_items`.`items_id` = '" . $ID; "'\n AND `glpi_plugin_appliances_appliances_items`.`itemtype` = '"; $itemtype; "'\n AND `glpi_plugin_appliances_appliances_items`.`plugin_appliances_appliances_id`\n = `glpi_plugin_appliances_appliances`.`id`" . getEntitiesRestrictRequest(" AND", "glpi_plugin_appliances_appliances", 'entities_id', $item->getEntityID(), true); $result = $DB->query($query); $number = $DB->numrows($result); if (!$number) { $pdf->displayLine(__('No item found')); } else { if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(30, 30, 20, 20); $pdf->displayTitle('<b><i>' . __('Name'), __('Entity'), __('Group'), __('Type') . '</i></b>'); } else { $pdf->setColumnsSize(50, 25, 25); $pdf->displayTitle('<b><i>' . __('Name'), __('Group'), __('Type') . '</i></b>'); } while ($data = $DB->fetch_array($result)) { $appliancesID = $data["id"]; if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(30, 30, 20, 20); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_entities", $data['entities_id'])), Html::clean(Dropdown::getDropdownName("glpi_groups", $data["groups_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_appliances_appliancetypes", $data["plugin_appliances_appliancetypes_id"]))); } else { $pdf->setColumnsSize(50, 25, 25); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_groups", $data["groups_id"])), Html::clean(Dropdown::getDropdownName("glpi_plugin_appliances_appliancetypes", $data["plugin_appliances_appliancetypes_id"]))); } PluginAppliancesRelation::showList_PDF($pdf, $data["relationtype"], $data["entID"]); PluginAppliancesOptvalue_Item::showList_PDF($pdf, $ID, $appliancesID); } } $pdf->displaySpace(); }
static function preItemUpdate(CommonDBTM $item) { //find container (if not exist, do nothing) if (isset($_REQUEST['c_id'])) { $c_id = $_REQUEST['c_id']; } else { $c_id = self::findContainer(get_Class($item), $item->fields['id'], "dom"); if ($c_id === false) { return false; } } //find fields associated to found container $field_obj = new PluginFieldsField(); $fields = $field_obj->find("plugin_fields_containers_id = {$c_id} AND type != 'header'", "ranking"); //prepare datas to update $datas = array('plugin_fields_containers_id' => $c_id, 'items_id' => $item->fields['id']); foreach ($fields as $field) { if (isset($item->input[$field['name']])) { //standard field $input = $field['name']; } else { //dropdown field $input = "plugin_fields_" . $field['name'] . "dropdowns_id"; } if (isset($item->input[$input])) { $datas[$input] = $item->input[$input]; } } //update datas $container = new self(); if ($container->updateFieldsValues($datas)) { return true; } return $item->input = array(); }
private function DrawColTitles() { // Método encargado de dibujar los títulos de las columnas.. $this->code.= '<tr>'; $i = 0; foreach ($this->columns as $col) { $idHeader = ''; if( get_Class($this->columns[$i]) == 'ColumnDos' ){ $idHeader = " id='".$this->columns[$i]->GetIDdivHeader()."' "; } if ($col->getVisible()) { // Si la columna está visible.. $colStyle = 'style="'; if (($this->colsSeparator) and ($i < (count($this->columns) - 1))) $colStyle.= 'border-right: 1px solid '.$this->colsSeparatorColor.';'; $width = ""; if ($this->columns[$i]->getWidth() > 0) $width = ' width="'.$this->columns[$i]->getWidth().'"'; $colStyle.= '"'; $showMessage = ($this->showProcessMessage)?"true":"false"; if ($this->orderBy == $i) { $img = ''; if (!strpos($this->orderBy, "_D_")) { if ($i > 0) $img = '<img border="0" src="/images/grid_asc.gif" title="Ascendente" />'; $url = $this->BuildUrl(1, $i."_D_"); } else { if ($i > 0) $img = '<img border="0" src="/images/grid_desc.gif" title="Descendente" />'; $url = $this->BuildUrl(1, $i); } } else { $img = ''; $url = $this->BuildUrl(1, $i); } if (($this->columns[$i]->getUseStyleForTitle()) and ($this->columns[$i]->getCellClass() != "")) $class = $this->columns[$i]->getCellClass(); else $class = $this->headerStyle; $title = ""; if ($this->columns[$i]->getTitleHint() != "") $title = 'title="'.$this->columns[$i]->getTitleHint().'"'; if($this->AsignEventColumn){ $this->code.= '<td class="'.$class.'" '.$colStyle.$width.'>'; $this->code.= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'; $this->code.= '<tr>'; $this->code.= '<td width="28"></td>'; $this->code.= '<td align="center" '.$title.' '.$idHeader.' ><a class="'.$this->titleStyle.'" href="#" onClick="changePage(\''.$url.'\', '.$showMessage.', '.(($this->refreshIntoWindow)?'true':'false').')">'.$col->getTitle().'</a></td>'; $this->code.= '<td align="right" width="28">'.$img.'</td>'; $this->code.= '</tr>'; $this->code.= '</table>'; $this->code.= '</td>'; }else{ //Esto le quita la animacion a las columnas $this->code.= '<td class="'.$class.'" '.$colStyle.$width.' '.$title.' '.$idHeader.' >'; $this->code.= '<font class='.$this->titleStyle.' >'.$col->getTitle()."</font>"; $this->code.= '</td>'; } } $i++; } $this->code.= '</tr>'; }
static function showAssociated($item, $withtemplate = '') { global $DB, $CFG_GLPI; $display_entity = Session::isMultiEntitiesMode(); $numcols = 5; if ($display_entity) { $numcols++; } $ID = $item->getField('id'); $itemtype = get_Class($item); $entity = $item->getEntityID(); $showgroup = true; if (!class_exists($itemtype)) { $datatable = ""; $form = ""; } else { $objeto = new $itemtype(); $datatable = $objeto->getTable(); $form = Toolbox::getItemTypeFormURL($itemtype); } if ($showgroup) { $moreselect = ", g.name AS grp"; $morejoin = " LEFT JOIN glpi_groups AS g ON d.groups_id = g.id"; } else { $numcols--; $moreselect = ""; $morejoin = ""; } if ($withtemplate != 2) { //echo "<form method='post' action=\"".$CFG_GLPI["root_doc"]."/plugins/relation/front/relation.form.php\">"; echo "<form method='post' name='relation_form' id='add_relation_form' action=" . PluginRelationRelation::getFormURL(true) . ">"; } echo "<div align='center'><table class='tab_cadre_fixe'>"; // Children $query4 = "SELECT `name` FROM `{$datatable}` WHERE `id` = '{$ID}'"; $result4 = $DB->query($query4); $thisdata = $DB->fetch_array($result4); echo "<tr><th colspan='" . $numcols . "'>" . __('Elementos relacionados', 'Elementos relacionados') . "</th></tr>"; // CRI 26/11/2015 Cambio de orden de columna tipo de relacion echo "<tr>"; if ($showgroup) { echo "<th>" . __('Tipo Relacion', 'Tipo Relacion') . "</th>"; } echo "<th>" . __('Nombre', 'Nombre') . "</th>"; echo "<th>" . __('Estado', 'Estado') . "</th>"; // CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { echo "<th>" . __('Entidad', 'Entidad') . "</th>"; } echo "<th>" . __('Tipo', 'Tipo') . "</th>"; if (Session::haveRight("plugin_relation", CREATE)) { echo "<th> </th>"; } echo "</tr>"; //imprimo las relaciones directas $queryAssociated = "select r.id, r.items_id, r.itemtype, tr.name from glpi_plugin_relation_relations r left join glpi_plugin_relation_typerelations tr on r.relation_type=tr.id where r.parent_id="; $queryAssociated .= $ID . " and r.parent_type='" . $itemtype . "'order by 4,3,2"; $resultAssociated = $DB->query($queryAssociated); if ($DB->numrows($resultAssociated)) { while ($data = $DB->fetch_array($resultAssociated)) { //print_r($data); //echo "<br>"; $nombreClase = $data['itemtype']; $form = Toolbox::getItemTypeFormURL($nombreClase); $objAsociado = new $nombreClase(); $objAsociado->getFromDB($data['items_id']); echo '<tr class="tab_bg_1">'; // CRI 2.0 Cambio de orden de columna tipo de relacion if ($showgroup) { echo '<td align="center">' . $data['name'] . '</td>'; } if ($data['itemtype'] == "User") { $user = getUserName($data['items_id'], 2); echo '<td align="center"><a href="' . $form . '?id=' . $data['items_id'] . '">' . getUserName($data['items_id']) . ' (' . $objAsociado->fields['name'] . ") " . Html::showToolTip($user["comment"], array('link' => $user["link"], 'display' => false)); //getUserName($data['items_id']) echo '</a></td>'; } else { echo '<td align="center"><a href="' . $form . '?id=' . $data['items_id'] . '">' . $objAsociado->fields['name']; if ($_SESSION["glpiis_ids_visible"]) { echo " (" . $data["items_id"] . ")"; } echo '</a></td>'; } echo '<td align="center">' . PluginRelationRelation::getStatusItem($data['itemtype'], $data['items_id']) . '</td>'; //CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { if ($objAsociado->fields['entities_id'] == 0) { echo "<td align='center'>" . __('Entidad Raiz', 'Entidad Raiz') . "</td>"; } else { echo "<td align='center'>" . Dropdown::getDropdownName("glpi_entities", $objAsociado->fields['entities_id']) . "</td>"; } //echo "<td align='center'>".$objAsociado->fields['entities_id']."</td>"; } echo '<td align="center">' . PluginRelationRelation::getViewNameClass($data['itemtype']) . '</td>'; // Gobierno TI: [olb26s] uso de funcion getViewNameClass if (Session::haveRight('plugin_relation', CREATE)) { if ($withtemplate < 2) { echo "<td align='center' class='tab_bg_2'><a href='" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.form.php?deleterelation=deleterelation&id=" . $data['id'] . "'>" . __('Eliminar', 'Eliminar') . "</a></td>"; } } echo '</tr>'; } } //imprimo las relaciones inversas $queryAssociated = "select r.id, r.parent_id, r.parent_type, tr.invname from glpi_plugin_relation_relations r left join glpi_plugin_relation_typerelations tr on r.relation_type=tr.id where r.items_id="; $queryAssociated .= $ID . " and itemtype='" . $itemtype . "' order by 4,3,2"; $resultAssociated = $DB->query($queryAssociated); if ($DB->numrows($resultAssociated) > 0) { while ($data = $DB->fetch_array($resultAssociated)) { $nombreClase = $data['parent_type']; $form = Toolbox::getItemTypeFormURL($nombreClase); $objAsociado = new $nombreClase(); $objAsociado->getFromDB($data['parent_id']); echo '<tr class="tab_bg_1">'; // CRI 2.0 26/11/2015 Cambio de orden de columna tipo de relacion if ($showgroup) { echo '<td align="center">' . $data['invname'] . '</td>'; } if ($data['parent_type'] == "User") { $user = getUserName($data['parent_id'], 2); echo '<td align="center"><a href="' . $form . '?id=' . $data['parent_id'] . '">' . getUserName($data['parent_id']) . ' (' . $objAsociado->fields['name'] . ") " . Html::showToolTip($user["comment"], array('link' => $user["link"], 'display' => false)); echo '</a></td>'; } else { echo '<td align="center"><a href="' . $form . '?id=' . $data['parent_id'] . '">' . $objAsociado->fields['name']; if ($_SESSION["glpiis_ids_visible"]) { echo " (" . $data["parent_id"] . ")"; } echo '</a></td>'; } echo '<td align="center">' . PluginRelationRelation::getStatusItem($data['parent_type'], $data['parent_id']) . '</td>'; //CRI 2.0 Añadir Estado del CI 11/12/2014 if ($display_entity) { if ($objAsociado->fields['entities_id'] == 0) { echo "<td align='center'>" . __('Entidad Raiz', 'Entidad Raiz') . "</td>"; } else { echo "<td align='center'>" . Dropdown::getDropdownName("glpi_entities", $objAsociado->fields['entities_id']) . "</td>"; } } echo '<td align="center">' . PluginRelationRelation::getViewNameClass($data['parent_type']) . '</td>'; // Gobierno TI: [olb26s] uso de funcion getViewNameClass if (Session::haveRight('plugin_relation', CREATE)) { if ($withtemplate < 2) { echo "<td align='center' class='tab_bg_2'><a href='" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.form.php?deleterelation=deleterelation&id=" . $data['id'] . "'>" . __('Eliminar', 'Eliminar') . "</a></td>"; } } echo '</tr>'; } } if (Session::haveRight('plugin_relation', CREATE)) { echo '<tr class="tab_bg_1">'; echo '<td align="center" colspan="' . ($numcols - 1) . '">'; echo '<input type="hidden" name="id" value="' . $ID . '">'; echo '<input type="hidden" name="type" value="' . $itemtype . '">'; PluginRelationRelation::dropdown(array('name' => "childID", 'itemtype' => $itemtype, 'entity' => $entity)); echo '</td>'; echo '<td align="center"><input class="submit" type="submit" value="' . _sx('button', 'Add') . '" name="additem"/></td>'; echo '</tr>'; } if (!empty($withtemplate)) { echo "<input type='hidden' name='is_template' value='1'>"; } echo "</table></div>"; //echo "</form>"; Html::closeForm(); // Imprimir Grafico if (PluginRelationRelation::command_exists('dot') == true) { echo "<br><table class='tab_cadre' cellpadding='2'>"; echo "<tr><th>" . __('Grafico de la Relacion', 'Grafico de la Relacion') . "</th></tr>"; echo "<tr class='tab_bg_1'><td>"; $im = PluginRelationPrototype::relationGraphviz($ID, $itemtype); //echo '<img src="data:image/png;base64,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"/>'; //echo $im; echo "<div id=target></div>"; echo "<div align='center'>"; echo "<a onclick='view_relation_graphviz.dialog(\"open\");' href='#view_relation_graphviz' title='" . __('Relacion') . "'>" . __('Ver relacion', 'relation') . "</a>"; echo "</div>"; Ajax::createModalWindow('view_relation_graphviz', $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.test.php?item_id=" . $ID . "&item_type=" . $itemtype, array('title' => __('Ver Relaciones', 'relation'))); //echo '<img src="data:image/gif;base64,'.base64_encode($im).'"/>'; //echo $CFG_GLPI["root_doc"].'/plugins/relation/front/relation.test.php?item_id='.$ID.'&item_type='.$itemtype; //echo "<img src='".$CFG_GLPI["root_doc"]."/plugins/relation/front/relation.test.php?item_id=$ID&item_type=$itemtype' alt=''>"; //echo file_get_contents($CFG_GLPI["root_doc"]."/plugins/relation/front/relation.test.php?item_id=".$ID."&item_type=".$itemtype); echo "</td></tr>"; echo "</table>"; Html::scriptStart(); echo "\$(document).ready(function(){\n\t\t\t\t\$('#target').load('" . $CFG_GLPI["root_doc"] . "/plugins/relation/front/relation.test.php?item_id=" . $ID . "&item_type=" . $itemtype . "');\n\t\t\t\t});"; echo Html::scriptEnd(); } }
public function getResponseFile() { throw new KurogoDataException("getResponseFile() does not yet work with " . get_Class($this)); }
public function toValidator($command) { return str_replace('Command', 'Validator', get_Class($command)); }
public function __construct() { $this->log = new logBase(get_Class($this)); }
/** * @brief 获取问卷展示的信息,同时展示等待状态下健康记录的答案(即未提交的健康记录) * @author zjj * * @param $questionSheet 问卷 * @param $patient 患者 * * @return $questionSheetInfos 问卷展示信息 */ private function getQuestionSheetDisplayInfos(QuestionSheet $questionSheet, Patient $patient) {/*{{{*/ $answerContents = PatientFileClient::getInstance()->getAnswerContentsOfWaitRecord4Patient($patient->id); $allQuestionInfos = $questionSheet->getWrapperQuestionArr(); $questionSheetInfos = array(); $unDisplyWrapperIds = DAL::get()->queryUnDisplayWrapperIdsByPatientId('QuestionWrapper', $patient->id); foreach ($allQuestionInfos as $questionInfo) { $wrapper = $questionInfo['wrapper']; //过滤不在展示日期内的问题包 if (in_array($wrapper->id, $unDisplyWrapperIds)) { continue; } $questionSheetInfo['wrapperName'] = $wrapper->name; if (count($questionInfo['questions']) > 1) { $questionSheetInfo['type'] = get_Class($wrapper); $questionSheetInfo['value'] = $this->getQuestionDisplayInfos($questionInfo['questions'], $answerContents); } else { $questionSheetInfo['type'] = get_Class($questionInfo['questions'][0]); $questionInfos = $this->getQuestionDisplayInfos($questionInfo['questions'], $answerContents); $questionSheetInfo['value'] = array_shift($questionInfos); } $questionSheetInfos[] = $questionSheetInfo; } return $questionSheetInfos; }/*}}}*/
/** * show for PDF the projet associated with a device * * @param $ID of the device * @param $itemtype : type of the device * */ static function PdfFromItems($pdf, $item) { global $DB, $CFG_GLPI; $pdf->setColumnsSize(100); $pdf->displayTitle('<b>' . _n('Associated project', 'Associated projects', 2, 'projet') . '</b>'); $ID = $item->getField('id'); $itemtype = get_Class($item); $canread = $item->can($ID, 'r'); $canedit = $item->can($ID, 'w'); $PluginProjetProjet = new PluginProjetProjet(); $query = "SELECT `glpi_plugin_projet_projets`.* " . " FROM `glpi_plugin_projet_projets_items`,`glpi_plugin_projet_projets` " . " LEFT JOIN `glpi_entities` ON (`glpi_entities`.`id` = `glpi_plugin_projet_projets`.`entities_id`) " . " WHERE `glpi_plugin_projet_projets_items`.`items_id` = '" . $ID . "' \n AND `glpi_plugin_projet_projets_items`.`itemtype` = '" . $itemtype . "' \n AND `glpi_plugin_projet_projets_items`.`plugin_projet_projets_id` = `glpi_plugin_projet_projets`.`id` " . getEntitiesRestrictRequest(" AND ", "glpi_plugin_projet_projets", '', '', $PluginProjetProjet->maybeRecursive()); $result = $DB->query($query); $number = $DB->numrows($result); if (!$number) { $pdf->displayLine(__('No item found')); } else { if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(14, 14, 14, 14, 14, 14, 16); $pdf->displayTitle('<b><i>' . __('Name'), __('Entity'), __('Comments'), __('Description'), __('Progress'), __('Start date'), __('End date') . '</i></b>'); } else { $pdf->setColumnsSize(17, 17, 17, 17, 17, 17); $pdf->displayTitle('<b><i>' . __('Name'), __('Comments'), __('Description'), __('Progress'), __('Start date'), __('End date') . '</i></b>'); } while ($data = $DB->fetch_array($result)) { if (Session::isMultiEntitiesMode()) { $pdf->setColumnsSize(14, 14, 14, 14, 14, 14, 16); $pdf->displayLine($data["name"], Html::clean(Dropdown::getDropdownName("glpi_entities", $data['entities_id'])), $data["comment"], $data["description"], PluginProjetProjet::displayProgressBar('100', $data["advance"], array("simple" => true)), Html::convdate($data["date_begin"]), Html::convdate($data["date_end"])); } else { $pdf->setColumnsSize(17, 17, 17, 17, 17, 17); $pdf->displayLine($data["name"], $data["comment"], $data["description"], PluginProjetProjet::displayProgressBar('100', $data["advance"], array("simple" => true)), Html::convdate($data["date_begin"]), Html::convdate($data["date_end"])); } } } }
/** * Submits a new query to the database. * @param string $formstring name of the form to use * @param array $formParams * @return array $response */ public function submit($formstring, array $formParams = array()) { // get the formclass $formConfig = Daiquiri_Config::getInstance()->query->forms->{$formstring}; if ($formConfig === null || get_Class($formConfig) !== 'Zend_Config') { throw new Exception('form options not found'); } else { $formOptions = $formConfig->toArray(); $formOptions['name'] = $formstring; } // get queues $resource = Query_Model_Resource_AbstractQuery::factory(); $queues = array(); $defaultQueue = false; if ($resource::$hasQueues === true) { try { $queues = $resource->fetchQueues(); $defaultQueue = $resource->fetchDefaultQueue(); } catch (Exception $e) { return array('status' => 'error'); } $usrGrp = Daiquiri_Auth::getInstance()->getCurrentRole(); foreach ($queues as $key => $value) { // show only the guest queue for the guest user: if ($value['name'] !== "guest" && $usrGrp === "guest") { unset($queues[$key]); } // remove the guest queue if this is a non guest user if ($value['name'] === "guest" && $usrGrp !== "guest") { unset($queues[$key]); } } } // get the form $form = new $formConfig->class(array('formOptions' => $formOptions, 'queues' => $queues, 'defaultQueue' => $defaultQueue)); // init errors array $errors = array(); // validate form if (!empty($formParams)) { if ($form->isValid($formParams)) { // form is valid, get sql string from functions $sql = $form->getQuery(); $tablename = $form->getTablename(); $queueId = $form->getQueue(); //clean from default flag $queueId = str_replace("_def", "", $queueId); if (empty($tablename)) { $tablename = null; } $options = array(); if (!empty($queueId)) { $options['queue'] = $queues[$queueId]['name']; } // validate query $model = new Query_Model_Query(); if ($model->validate($sql, false, $tablename, $errors) !== true) { // set description for form $form->setDescription(implode('; ', $errors)); // construct response array return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => array('form' => $errors)); } // take a detour to the query plan if ($model->canShowPlan()) { // store query, tablename and queue in session Zend_Session::namespaceUnset('query_plan'); $ns = new Zend_Session_Namespace('query_plan'); $ns->sql = $sql; $ns->tablename = $tablename; if (isset($options['queue'])) { $ns->queue = $options['queue']; } else { $ns->queue = null; } $ns->plan = $model->plan($sql, $errors); if (!empty($errors)) { return $this->getModelHelper('CRUD')->validationErrorResponse($form, $errors); } // construct response with redirect to plan $baseurl = Daiquiri_Config::getInstance()->getSiteUrl(); return array('status' => 'plan', 'redirect' => $baseurl . '/query/form/plan?form=' . $formstring); } else { // submit query $response = $model->query($sql, false, $tablename, $options); if ($response['status'] === 'ok') { // submitting the query was successful return $response; } else { // set description for form $form->setDescription(implode('; ', $response['errors'])); // construct response array return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => array('form' => $response['errors'])); } } } else { return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'error', 'errors' => $form->getMessages()); } } return array('form' => $form, 'formOptions' => $formOptions, 'status' => 'form'); }
/** * Standard method to show a box (usage by boxes not mandatory, a box can still use its own function) * * @param array $head Array with properties of box title * @param array $contents Array with properties of box lines * @return void */ function showBox($head, $contents) { global $langs, $conf; $MAXLENGTHBOX = 60; // Mettre 0 pour pas de limite $bcx[0] = 'class="box_pair"'; $bcx[1] = 'class="box_impair"'; $var = false; dol_syslog(get_Class($this)); // Define nbcol and nblines of the box to show $nbcol = 0; if (isset($contents[0])) { $nbcol = count($contents[0]); } $nblines = count($contents); print "\n\n<!-- Box start -->\n"; print '<div class="box" id="boxto_' . $this->box_id . '">' . "\n"; if (!empty($head['text']) || !empty($head['sublink']) || $nblines) { print '<table summary="boxtable' . $this->box_id . '" width="100%" class="noborder boxtable">' . "\n"; } // Show box title if (!empty($head['text']) || !empty($head['sublink'])) { //print '<div id="boxto_'.$this->box_id.'_title">'."\n"; //print '<table summary="boxtabletitle'.$this->box_id.'" width="100%" class="noborder">'."\n"; print '<tr class="box_titre">'; print '<td'; if ($nbcol > 0) { print ' colspan="' . $nbcol . '"'; } print '>'; if ($conf->use_javascript_ajax) { print '<table summary="" class="nobordernopadding" width="100%"><tr><td>'; } if (!empty($head['text'])) { $s = dol_trunc($head['text'], isset($head['limit']) ? $head['limit'] : $MAXLENGTHBOX); print $s; } if (!empty($head['sublink'])) { print ' <a href="' . $head['sublink'] . '" target="_blank">' . img_picto($head['subtext'], $head['subpicto']) . '</a>'; } if ($conf->use_javascript_ajax) { print '</td><td class="nocellnopadd" width="30" nowrap="nowrap">'; // The image must have the class 'boxhandle' beause it's value used in DOM draggable objects to define the area used to catch the full object print img_picto($langs->trans("MoveBox", $this->box_id), 'grip', 'class="boxhandle" style="cursor:move;"'); print img_picto($langs->trans("Close", $this->box_id), 'close', 'class="boxclose" style="cursor:pointer;" id="imgclose' . $this->box_id . '"'); print '</td></tr></table>'; } print '</td>'; print "</tr>\n"; // print "</table>\n"; // print "</div>\n"; } // Show box lines if ($nblines) { //print '<table summary="boxtablelines'.$this->box_id.'" width="100%" class="noborder">'."\n"; // Loop on each record for ($i = 0, $n = $nblines; $i < $n; $i++) { if (isset($contents[$i])) { $var = !$var; // TR if (isset($contents[$i][0]['tr'])) { print '<tr valign="top" ' . $contents[$i][0]['tr'] . '>'; } else { print '<tr valign="top" ' . $bcx[$var] . '>'; } // Loop on each TD $nbcolthisline = count($contents[$i]); for ($j = 0; $j < $nbcolthisline; $j++) { // Define tdparam $tdparam = ''; if (isset($contents[$i][$j]['td'])) { $tdparam .= ' ' . $contents[$i][$j]['td']; } if (empty($contents[$i][$j]['text'])) { $contents[$i][$j]['text'] = ""; } $texte = isset($contents[$i][$j]['text']) ? $contents[$i][$j]['text'] : ''; $textewithnotags = preg_replace('/<([^>]+)>/i', '', $texte); $texte2 = isset($contents[$i][$j]['text2']) ? $contents[$i][$j]['text2'] : ''; $texte2withnotags = preg_replace('/<([^>]+)>/i', '', $texte2); //print "xxx $textewithnotags y"; print '<td' . $tdparam . '>'; // Url if (!empty($contents[$i][$j]['url'])) { print '<a href="' . $contents[$i][$j]['url'] . '" title="' . $textewithnotags . '"'; //print ' alt="'.$textewithnotags.'"'; // Pas de alt sur un "<a href>" print isset($contents[$i][$j]['target']) ? ' target="' . $contents[$i][$j]['target'] . '"' : ''; print '>'; } // Logo if (!empty($contents[$i][$j]['logo'])) { $logo = preg_replace("/^object_/i", "", $contents[$i][$j]['logo']); print img_object($langs->trans("Show"), $logo); } $maxlength = $MAXLENGTHBOX; if (!empty($contents[$i][$j]['maxlength'])) { $maxlength = $contents[$i][$j]['maxlength']; } if ($maxlength) { $textewithnotags = dol_trunc($textewithnotags, $maxlength); } if (preg_match('/^<img/i', $texte) || !empty($contents[$i][$j]['asis'])) { print $texte; } else { print $textewithnotags; } // show text with html cleaning // End Url if (!empty($contents[$i][$j]['url'])) { print '</a>'; } if (preg_match('/^<img/i', $texte2) || !empty($contents[$i][$j]['asis2'])) { print $texte2; } else { print $texte2withnotags; } // show text with html cleaning print "</td>"; } print "</tr>\n"; } } } if (!empty($head['text']) || !empty($head['sublink']) || $nblines) { print "</table>\n"; } // If invisible box with no contents if (empty($head['text']) && empty($head['sublink']) && !$nblines) { print "<br>\n"; } print "</div>\n"; print "<!-- Box end -->\n\n"; }
/** * replace Markups **/ private function replaceMarkups(DOMElement $itemDom) { $string = ""; $explicitHtmlBr = false; foreach ($itemDom->childNodes as $element) { if (get_Class($element) == "DOMText") { //seems that encoding is lost when using the DOM ??? $string .= htmlspecialchars($element->wholeText); } if (get_Class($element) == "DOMElement") { switch ($element->tagName) { case "toggleRead": $class = ''; if ($itemDom->tagName == 'question') { $class = 'dontread'; } else { $class = 'read'; } // This code retrieve what is in the <toggleRead> tag but // add a trailing carriage return (I don't know why) so // I remove it. $nodeValue = $element->nodeValue; $string .= "<html:span class=\"" . $class . "\">" . $nodeValue . "</html:span>"; break; case "html:br": $explicitHtmlBr = true; $string .= "<html:br/>"; break; default: if ($element->getAttribute("html:class") == "") { $class = $element->getAttribute("class"); } else { $class = $element->getAttribute("html:class"); } $string .= "<" . $element->tagName . " class=\"" . $class . "\">" . $element->nodeValue . "</" . $element->tagName . ">"; //echo "<big>";echo $string;echo "</big>"; break; } } } //$string = str_replace("<toggleRead>","<html:span class=\"read\">",$string); //$string = str_replace("</toggleRead>","</html:span>",$string); //remove any starting or ending starting line $string = trim($string); if (!$explicitHtmlBr) { $string = $string; //echo $string; $string = str_replace("\n", '<html:br/>', $string); } return $string; }
/** * Path Parser * * Extract a path from a URI and actually connect to an SSH server if appropriate * * If "notification" is set as a context parameter the message code for successful login is * NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE. * * @param String $path * @return String * @access private */ function _parse_path($path) { extract(parse_url($path) + array('port' => 22)); if (!isset($host)) { return false; } if (isset($this->context)) { $context = stream_context_get_params($this->context); if (isset($context['notification'])) { $this->notification = $context['notification']; } } if ($host[0] == '$') { $host = substr($host, 1); global ${$host}; if (!is_object(${$host}) || get_class(${$host}) != 'Net_SFTP') { return false; } $this->sftp = ${$host}; } else { if (isset($this->context)) { $context = stream_context_get_options($this->context); } if (isset($context[$scheme]['session'])) { $sftp = $context[$scheme]['session']; } if (isset($context[$scheme]['sftp'])) { $sftp = $context[$scheme]['sftp']; } if (isset($sftp) && is_object($sftp) && get_class($sftp) == 'Net_SFTP') { $this->sftp = $sftp; return $path; } if (isset($context[$scheme]['username'])) { $user = $context[$scheme]['username']; } if (isset($context[$scheme]['password'])) { $pass = $context[$scheme]['password']; } if (isset($context[$scheme]['privkey']) && is_object($context[$scheme]['privkey']) && get_Class($context[$scheme]['privkey']) == 'Crypt_RSA') { $pass = $context[$scheme]['privkey']; } if (!isset($user) || !isset($pass)) { return false; } // casting $pass to a string is necessary in the event that it's a Crypt_RSA object if (isset(self::$instances[$host][$port][$user][(string) $pass])) { $this->sftp = self::$instances[$host][$port][$user][(string) $pass]; } else { $this->sftp = new Net_SFTP($host, $port); $this->sftp->disableStatCache(); if (isset($this->notification) && is_callable($this->notification)) { /* if !is_callable($this->notification) we could do this: user_error('fopen(): failed to call user notifier', E_USER_WARNING); the ftp wrapper gives errors like that when the notifier isn't callable. i've opted not to do that, however, since the ftp wrapper gives the line on which the fopen occurred as the line number - not the line that the user_error is on. */ call_user_func($this->notification, STREAM_NOTIFY_CONNECT, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0); call_user_func($this->notification, STREAM_NOTIFY_AUTH_REQUIRED, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0); if (!$this->sftp->login($user, $pass)) { call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_ERR, 'Login Failure', NET_SSH2_MSG_USERAUTH_FAILURE, 0, 0); return false; } call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_INFO, 'Login Success', NET_SSH2_MSG_USERAUTH_SUCCESS, 0, 0); } else { if (!$this->sftp->login($user, $pass)) { return false; } } self::$instances[$host][$port][$user][(string) $pass] = $this->sftp; } } return $path; }
/** * Pre item hook for add and update * Validates and store plugin data in item object * * @param CommonDBTM $item Item instance * * @return boolean */ static function preItem(CommonDBTM $item) { //find container (if not exist, do nothing) if (isset($_REQUEST['c_id'])) { $c_id = $_REQUEST['c_id']; } else { $c_id = self::findContainer(get_Class($item), "dom"); if ($c_id === false) { $c_id = self::findContainer(get_Class($item)); //tries for 'tab' if ($c_id === false) { return false; } } } //need to check if container is usable on this object entity $loc_c = new PluginFieldsContainer(); $loc_c->getFromDB($c_id); $entities = array($loc_c->fields['entities_id']); if ($loc_c->fields['is_recursive']) { $entities = getSonsOf(getTableForItemType('Entity'), $loc_c->fields['entities_id']); } //workaround: when a ticket is created from readdonly profile, //it is not initialized; see https://github.com/glpi-project/glpi/issues/1438 if (!isset($item->fields) || count($item->fields) == 0) { $item->fields = $item->input; } if (!in_array($item->fields['entities_id'], $entities)) { return false; } $data = self::populateData($c_id, $item); if ($data !== false) { if (self::validateValues($data, $item::getType(), isset($_REQUEST['massiveaction'])) === false) { return $item->input = []; } return $item->plugin_fields_data = $data; } return $item->input = []; }