Пример #1
0
 /**
  * @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;
 }
Пример #4
0
 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");
 }
Пример #5
0
 /**
  * @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"])));
             }
         }
     }
 }
Пример #7
0
 /** 
  * 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"]));
             }
         }
     }
 }
Пример #8
0
 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();
 }
Пример #10
0
 /**
  * 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();
 }
Пример #11
0
 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();
 }
Пример #12
0
	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>';
	}
Пример #13
0
 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>&nbsp;</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'] . ")&nbsp;" . 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&amp;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'] . ")&nbsp;" . 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&amp;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();
     }
 }
Пример #14
0
 public function getResponseFile()
 {
     throw new KurogoDataException("getResponseFile() does not yet work with " . get_Class($this));
 }
Пример #15
0
 public function toValidator($command)
 {
     return str_replace('Command', 'Validator', get_Class($command));
 }
Пример #16
0
 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;
    }/*}}}*/
Пример #18
0
 /** 
  * 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"]));
             }
         }
     }
 }
Пример #19
0
 /**
  * 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');
 }
Пример #20
0
 /**
  *	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;
 }
Пример #22
0
 /**
  * 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;
 }
Пример #23
0
 /**
  * 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 = [];
 }