ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
ilPCParagraph Class Reference

Class ilPCParagraph. More...

+ Inheritance diagram for ilPCParagraph:
+ Collaboration diagram for ilPCParagraph:

Public Member Functions

 init ()
 Init page content component. More...
 
 setNode ($a_node)
 Set Page Content Node. More...
 
 createAtNode (&$node)
 Create new page content (incl. More...
 
 createBeforeNode (&$node)
 Create new page content (incl. More...
 
 createAfter ($node)
 Create paragraph node (incl. More...
 
 create (&$a_pg_obj, $a_hier_id, $a_pc_id="")
 Create paragraph node (incl. More...
 
 setText ($a_text, $a_auto_split=false)
 Set (xml) content of text paragraph. More...
 
 getText ($a_short_mode=false)
 Get (xml) content of paragraph. More...
 
 getParagraphSequenceContent ($a_pg_obj)
 Get paragraph sequenc of current paragraph. More...
 
 setCharacteristic ($a_char)
 Set Characteristic of paragraph. More...
 
 getCharacteristic ()
 Get characteristic of paragraph. More...
 
 setSubCharacteristic ($a_char)
 set attribute subcharacteristic More...
 
 getAutoIndent ()
 Get AutoIndent (Code Paragraphs) More...
 
 setAutoIndent ($a_char)
 
 getSubCharacteristic ()
 get attribute subcharacteristic More...
 
 setDownloadTitle ($a_char)
 set attribute download title More...
 
 getDownloadTitle ()
 get attribute download title More...
 
 setShowLineNumbers ($a_char)
 set attribute showlinenumbers More...
 
 getShowLineNumbers ()
 get attribute showlinenumbers More...
 
 setLanguage ($a_lang)
 set language More...
 
 getLanguage ()
 get language More...
 
 input2xml ($a_text, $a_wysiwyg=0, $a_handle_lists=true)
 
 autoSplit ($a_text)
 This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks. More...
 
 handleNextBr ($a_str)
 Remove preceding
More...
 
 removeTrailingBr ($a_str)
 Remove trailing
More...
 
 getType ()
 Need to override getType from ilPageContent to distinguish between Pararagraph and Source. More...
 
 saveJS ($a_pg_obj, $a_content, $a_char, $a_pc_id, $a_insert_at="")
 Save input coming from ajax. More...
 
 getLastSavedPCId ($a_pg_obj, $a_as_ajax_str=false)
 Get last inserted pc ids. More...
 
 updatePage ($a_page)
 Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object) More...
 
 autoLinkGlossaries ($a_glos)
 Auto link glossaries. More...
 
 getJavascriptFiles ($a_mode)
 Get Javascript files. More...
 
 getOnloadCode ($a_mode)
 Get onload code. More...
 
- Public Member Functions inherited from ilPageContent
 __construct ($a_pg_obj)
 Constructor. More...
 
 setPage ($a_val)
 Set page. More...
 
 getPage ()
 Get page. More...
 
 init ()
 Init object. More...
 
 getType ()
 Get type of page content. More...
 
 setNode ($a_node)
 Set xml node of page content. More...
 
getNode ()
 Get xml node of page content. More...
 
 getJavascriptFiles ($a_mode)
 Get Javascript files. More...
 
 getCssFiles ($a_mode)
 Get css files. More...
 
 getOnloadCode ($a_mode)
 Get on load code. More...
 
 setHierId ($a_hier_id)
 Set hierarchical ID in xml structure. More...
 
 getHierId ()
 Get hierarchical id. More...
 
 lookupHierId ()
 Get hierarchical id from dom. More...
 
 readHierId ()
 Read PC Id. More...
 
 setPcId ($a_pcid)
 Set PC Id. More...
 
 getPCId ()
 Get PC Id. More...
 
 setFileDownloadLink ($a_download_link)
 Set file download link. More...
 
 getFileDownloadLink ()
 Get file download link. More...
 
 setFullscreenLink ($a_fullscreen_link)
 Set fullscreen link. More...
 
 getFullscreenLink ()
 Get fullscreen link. More...
 
 setSourcecodeDownloadScript ($script_name)
 Set sourcecode download script. More...
 
 getSourcecodeDownloadScript ()
 Get sourcecode download script. More...
 
 readPCId ()
 Read PC Id. More...
 
 writePCId ($a_pc_id)
 Write pc id. More...
 
 setEnabled ($value)
 Set Enabled value for page content component. More...
 
 enable ()
 Enable page content. More...
 
 disable ()
 Disable page content. More...
 
 isEnabled ()
 Check whether page content is enabled. More...
 
 createPageContentNode ($a_set_this_node=true)
 Create page content node (always use this method first when adding a new element) More...
 
 modifyPageContentPostXsl ($a_output, $a_mode)
 Modify page content after xsl. More...
 

Static Public Member Functions

static _input2xml ($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
 converts user input to xml More...
 
static intLinks2xml ($a_text)
 internal links to xml More...
 
static input2xmlReplaceLists ($a_text)
 Converts xml from DB to output in edit textarea. More...
 
static xml2outputReplaceLists ($a_text)
 Replaces

with *. More...

 
static segmentString ($a_haystack, $a_needles)
 Segments a string into an array at each position of a substring. More...
 
static xml2output ($a_text, $a_wysiwyg=false, $a_replace_lists=true, $unmask=true)
 Converts xml from DB to output in edit textarea. More...
 
static handleAjaxContent ($a_content)
 Handle ajax content. More...
 
static handleAjaxContentPost ($text)
 Post input2xml handling of ajax content. More...
 
static autoLinkGlossariesPage ($a_page, $a_terms)
 Auto link glossary of whole page. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 
static saveAnchors ($a_page, $a_domdoc)
 Save anchors. More...
 
static _deleteAnchors ($a_parent_type, $a_page_id, $a_page_lang)
 Delete anchors of a page. More...
 
static _saveAnchor ($a_parent_type, $a_page_id, $a_page_lang, $a_anchor_name)
 Save an anchor. More...
 
static _readAnchors ($a_parent_type, $a_page_id, $a_page_lang="-")
 Read anchors of a page. More...
 
static saveMetaKeywords ($a_page, $a_domdoc)
 save all keywords More...
 
- Static Public Member Functions inherited from ilPageContent
static incEdId ($ed_id)
 Increases an hierarchical editing id at lowest level (last number) More...
 
static decEdId ($ed_id)
 Decreases an hierarchical editing id at lowest level (last number) More...
 
static haveSameContainer ($ed_id1, $ed_id2)
 Check, if two ids are in same container. More...
 
static sortHierIds ($a_array)
 Sort an array of Hier IDS in ascending order. More...
 
static isGreaterHierId ($a, $b)
 Check whether Hier ID $a is greater than Hier ID $b. More...
 
static getLangVars ()
 Get lang vars needed for editing. More...
 
static handleCopiedContent (DOMDocument $a_domdoc, $a_self_ass=true, $a_clone_mobs=false)
 Handle copied content. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 

Data Fields

 $dom
 
 $par_node
 
- Data Fields inherited from ilPageContent
 $hier_id
 
 $node
 
 $dom
 
 $page_lang
 

Static Protected Member Functions

static getBBMap ()
 Get bb to xml tag map. More...
 
static getXMLTagMap ()
 Get tag to bb map. More...
 
static replaceBBCode ($a_text, $a_bb, $a_tag)
 Replace bb code. More...
 
static linkTermsInDom ($a_dom, $a_terms, $a_par_node=null)
 Link terms in a dom page object in bb style. More...
 

Protected Attributes

 $user
 
- Protected Attributes inherited from ilPageContent
 $file_download_link
 
 $fullscreen_link
 
 $sourcecode_download_script
 
 $log
 

Static Protected Attributes

static $bb_tags
 

Additional Inherited Members

- Protected Member Functions inherited from ilPageContent
 setType ($a_type)
 Set Type. More...
 

Detailed Description

Class ilPCParagraph.

Paragraph of ilPageObject

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 16 of file class.ilPCParagraph.php.

Member Function Documentation

◆ _deleteAnchors()

static ilPCParagraph::_deleteAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang 
)
static

Delete anchors of a page.

Definition at line 1873 of file class.ilPCParagraph.php.

References $DIC, and $ilDB.

1874  {
1875  global $DIC;
1876 
1877  $ilDB = $DIC->database();
1878 
1879  $ilDB->manipulate(
1880  "DELETE FROM page_anchor WHERE " .
1881  " page_parent_type = " . $ilDB->quote($a_parent_type, "text") .
1882  " AND page_id = " . $ilDB->quote($a_page_id, "integer") .
1883  " AND page_lang = " . $ilDB->quote($a_page_lang, "text")
1884  );
1885  }
global $DIC
Definition: saml.php:7
global $ilDB

◆ _input2xml()

static ilPCParagraph::_input2xml (   $a_text,
  $a_lang,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)
static

converts user input to xml

Definition at line 511 of file class.ilPCParagraph.php.

References $tag, ilUtil\attribsToArray(), input2xmlReplaceLists(), and ilUtil\stripSlashes().

Referenced by input2xml(), ilPCDataTableGUI\update(), and ilPCDataTableGUI\updateJS().

512  {
513  if (!$a_wysiwyg) {
514  $a_text = ilUtil::stripSlashes($a_text, false);
515  }
516 
517  if ($a_wysiwyg) {
518  $a_text = str_replace("<br />", chr(10), $a_text);
519  }
520 
521  // note: the order of the processing steps is crucial
522  // and should be the same as in xml2output() in REVERSE order!
523  $a_text = trim($a_text);
524 
525  //echo "<br>between:".htmlentities($a_text);
526 
527  // mask html
528  if (!$a_wysiwyg) {
529  $a_text = str_replace("&", "&amp;", $a_text);
530  }
531  $a_text = str_replace("<", "&lt;", $a_text);
532  $a_text = str_replace(">", "&gt;", $a_text);
533 
534  // Reconvert PageTurn and BibItemIdentifier
535  $a_text = preg_replace('/&lt;([\s\/]*?PageTurn.*?)&gt;/i', "<$1>", $a_text);
536  $a_text = preg_replace('/&lt;([\s\/]*?BibItemIdentifier.*?)&gt;/i', "<$1>", $a_text);
537 
538  //echo "<br>second:".htmlentities($a_text);
539 
540  // mask curly brackets
541  /*
542  echo htmlentities($a_text);
543  $a_text = str_replace("{", "&#123;", $a_text);
544  $a_text = str_replace("}", "&#125;", $a_text);
545  echo htmlentities($a_text);*/
546  // linefeed to br
547  $a_text = str_replace(chr(13) . chr(10), "<br />", $a_text);
548  $a_text = str_replace(chr(13), "<br />", $a_text);
549  $a_text = str_replace(chr(10), "<br />", $a_text);
550 
551  if ($a_handle_lists) {
552  $a_text = ilPCParagraph::input2xmlReplaceLists($a_text);
553  }
554 
555  foreach (self::getBBMap() as $bb => $tag) {
556  // remove empty tags
557  $a_text = str_replace("[" . $bb . "][/" . $bb . "]", "", $a_text);
558 
559  // replace bb code by tag
560  $a_text = self::replaceBBCode($a_text, $bb, $tag);
561  }
562 
563  $a_text = self::intLinks2xml($a_text);
564 
565  // external link
566  $ws = "[ \t\r\f\v\n]*";
567  // remove empty external links
568  while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]\[\/xln\]~i", $a_text, $found)) {
569  $a_text = str_replace($found[0], "", $a_text);
570  }
571  while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]\[\/xln\]~i', $a_text, $found)) {
572  $a_text = str_replace($found[0], "", $a_text);
573  }
574  // external links
575  while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]~i", $a_text, $found)) {
576  $attribs = ilUtil::attribsToArray($found[2]);
577  if (isset($attribs["url"])) {
578  $a2 = ilUtil::attribsToArray($found[4]);
579  $tstr = "";
580  if (in_array($a2["target"], array("FAQ", "Glossary", "Media"))) {
581  $tstr = ' TargetFrame="' . $a2["target"] . '"';
582  }
583  $a_text = str_replace("[" . $found[1] . "]", "<ExtLink Href=\"" . $attribs["url"] . "\"$tstr>", $a_text);
584  } else {
585  $a_text = str_replace("[" . $found[1] . "]", "[error: xln" . $found[1] . "]", $a_text);
586  }
587  }
588 
589  // ie/tinymce fix for links without "", see bug #8391
590  while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]~i', $a_text, $found)) {
591  if ($found[3] != "") {
592  $a_text = str_replace("[" . $found[1] . "]", "<ExtLink Href=\"" . $found[3] . "\">", $a_text);
593  } else {
594  $a_text = str_replace("[" . $found[1] . "]", "[error: xln" . $found[1] . "]", $a_text);
595  }
596  }
597  $a_text = preg_replace('~\[\/xln\]~i', "</ExtLink>", $a_text);
598 
599  // anchor
600  $ws = "[ \t\r\f\v\n]*";
601  while (preg_match("~\[(anc$ws(name$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found)) {
602  $attribs = ilUtil::attribsToArray($found[2]);
603  $a_text = str_replace("[" . $found[1] . "]", "<Anchor Name=\"" . $attribs["name"] . "\">", $a_text);
604  }
605  $a_text = preg_replace("~\[\/anc\]~i", "</Anchor>", $a_text);
606 
607  // marked text
608  while (preg_match("~\[(marked$ws(class$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found)) {
609  $attribs = ilUtil::attribsToArray($found[2]);
610  if (isset($attribs["class"])) {
611  $a_text = str_replace("[" . $found[1] . "]", "<Marked Class=\"" . $attribs["class"] . "\">", $a_text);
612  } else {
613  $a_text = str_replace("[" . $found[1] . "]", "[error:marked" . $found[1] . "]", $a_text);
614  }
615  }
616  $a_text = preg_replace('~\[\/marked\]~i', "</Marked>", $a_text);
617 
618 
619  //echo htmlentities($a_text); exit;
620  return $a_text;
621  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static input2xmlReplaceLists($a_text)
Converts xml from DB to output in edit textarea.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
if(function_exists('posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
Definition: cron.php:35
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _readAnchors()

static ilPCParagraph::_readAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang = "-" 
)
static

Read anchors of a page.

Definition at line 1908 of file class.ilPCParagraph.php.

References $DIC, and $ilDB.

Referenced by ilInternalLinkGUI\showLinkHelp().

1909  {
1910  global $DIC;
1911 
1912  $ilDB = $DIC->database();
1913 
1914  $and_lang = ($a_page_lang != "")
1915  ? " AND page_lang = " . $ilDB->quote($a_page_lang, "text")
1916  : "";
1917 
1918  $set = $ilDB->query(
1919  "SELECT * FROM page_anchor " .
1920  " WHERE page_parent_type = " . $ilDB->quote($a_parent_type, "text") .
1921  " AND page_id = " . $ilDB->quote($a_page_id, "integer") .
1922  $and_lang
1923  );
1924  $anchors = array();
1925  while ($rec = $ilDB->fetchAssoc($set)) {
1926  $anchors[] = $rec["anchor_name"];
1927  }
1928  return $anchors;
1929  }
global $DIC
Definition: saml.php:7
global $ilDB
+ Here is the caller graph for this function:

◆ _saveAnchor()

static ilPCParagraph::_saveAnchor (   $a_parent_type,
  $a_page_id,
  $a_page_lang,
  $a_anchor_name 
)
static

Save an anchor.

Definition at line 1890 of file class.ilPCParagraph.php.

References $DIC, and $ilDB.

1891  {
1892  global $DIC;
1893 
1894  $ilDB = $DIC->database();
1895 
1896  $ilDB->manipulate("INSERT INTO page_anchor " .
1897  "(page_parent_type, page_id, page_lang, anchor_name) VALUES (" .
1898  $ilDB->quote($a_parent_type, "text") . "," .
1899  $ilDB->quote($a_page_id, "integer") . "," .
1900  $ilDB->quote($a_page_lang, "text") . "," .
1901  $ilDB->quote($a_anchor_name, "text") .
1902  ")");
1903  }
global $DIC
Definition: saml.php:7
global $ilDB

◆ afterPageHistoryEntry()

static ilPCParagraph::afterPageHistoryEntry (   $a_page,
DOMDocument  $a_old_domdoc,
  $a_old_xml,
  $a_old_nr 
)
static

After page history entry has been created.

Parameters
object$a_pagepage object
DOMDocument$a_old_domdocold dom document
string$a_old_xmlold xml
integer$a_old_nrhistory number

Definition at line 1844 of file class.ilPCParagraph.php.

1845  {
1846  }

◆ afterPageUpdate()

static ilPCParagraph::afterPageUpdate (   $a_page,
DOMDocument  $a_domdoc,
  $a_xml,
  $a_creation 
)
static

After page has been updated (or created)

Parameters
object$a_pagepage object
DOMDocument$a_domdocdom document
string$a_xmlxml
bool$a_creationtrue on creation, otherwise false

Definition at line 1818 of file class.ilPCParagraph.php.

1819  {
1820  // pc paragraph
1821  self::saveMetaKeywords($a_page, $a_domdoc);
1822  self::saveAnchors($a_page, $a_domdoc);
1823  }

◆ autoLinkGlossaries()

ilPCParagraph::autoLinkGlossaries (   $a_glos)

Auto link glossaries.

Parameters

Definition at line 1629 of file class.ilPCParagraph.php.

References $t, $text, ilObject\_getAllReferences(), ilObject\_lookupType(), ilGlossaryTerm\getTermList(), and getText().

1630  {
1631  if (is_array($a_glos) && count($a_glos) > 0) {
1632  include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1633 
1634  // check which terms occur in the text (we may
1635  // get some false positives due to the strip_tags, but
1636  // we do not want to find strong or list or other stuff
1637  // within the tags
1638  $text = strip_tags($this->getText());
1639  $found_terms = array();
1640  foreach ($a_glos as $glo) {
1641  if (ilObject::_lookupType($glo) == "glo") {
1642  $ref_ids = ilObject::_getAllReferences($glo);
1643  $glo_ref_id = current($ref_ids);
1644  if ($glo_ref_id > 0) {
1645  $terms = ilGlossaryTerm::getTermList($glo_ref_id);
1646  foreach ($terms as $t) {
1647  if (is_int(stripos($text, $t["term"]))) {
1648  $found_terms[$t["id"]] = $t;
1649  }
1650  }
1651  }
1652  }
1653  }
1654 
1655  // did we find anything? -> modify content
1656  if (count($found_terms) > 0) {
1657  self::linkTermsInDom($this->dom, $found_terms, $this->par_node);
1658  }
1659  }
1660  }
static _getAllReferences($a_id)
get all reference ids of object
getText($a_short_mode=false)
Get (xml) content of paragraph.
$text
Definition: errorreport.php:18
static getTermList( $a_glo_ref_id, $searchterm="", $a_first_letter="", $a_def="", $a_tax_node=0, $a_add_amet_fields=false, array $a_amet_filter=null, $a_include_references=false)
Get all terms for given set of glossary ids.
static _lookupType($a_id, $a_reference=false)
lookup object type
+ Here is the call graph for this function:

◆ autoLinkGlossariesPage()

static ilPCParagraph::autoLinkGlossariesPage (   $a_page,
  $a_terms 
)
static

Auto link glossary of whole page.

Parameters

Definition at line 1801 of file class.ilPCParagraph.php.

Referenced by ilObjGlossary\autoLinkGlossaryTerms(), and ilObjContentObject\autoLinkGlossaryTerms().

1802  {
1803  $a_page->buildDom();
1804  $a_dom = $a_page->getDom();
1805  self::linkTermsInDom($a_dom, $a_terms);
1806 
1807  $a_page->update();
1808  }
+ Here is the caller graph for this function:

◆ autoSplit()

ilPCParagraph::autoSplit (   $a_text)

This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks.

Definition at line 1162 of file class.ilPCParagraph.php.

References $n, handleNextBr(), and removeTrailingBr().

Referenced by setText().

1163  {
1164  $a_text = str_replace("=<SimpleBulletList>", "=<br /><SimpleBulletList>", $a_text);
1165  $a_text = str_replace("=<SimpleNumberedList>", "=<br /><SimpleNumberedList>", $a_text);
1166  $a_text = str_replace("</SimpleBulletList>=", "</SimpleBulletList><br />=", $a_text);
1167  $a_text = str_replace("</SimpleNumberedList>=", "</SimpleNumberedList><br />=", $a_text);
1168  $a_text = "<br />" . $a_text . "<br />"; // add preceding and trailing br
1169 
1170  $chunks = array();
1171  $c_text = $a_text;
1172  //echo "0";
1173  while ($c_text != "") {
1174  //var_dump($c_text); flush();
1175  //echo "1";
1176  $s1 = strpos($c_text, "<br />=");
1177  if (is_int($s1)) {
1178  //echo "2";
1179  $s2 = strpos($c_text, "<br />==");
1180  if (is_int($s2) && $s2 <= $s1) {
1181  //echo "3";
1182  $s3 = strpos($c_text, "<br />===");
1183  if (is_int($s3) && $s3 <= $s2) { // possible level three header
1184  //echo "4";
1185  $n = strpos($c_text, "<br />", $s3 + 1);
1186  if ($n > ($s3 + 9) && substr($c_text, $n - 3, 9) == "===<br />") {
1187  //echo "5";
1188  // found level three header
1189  if ($s3 > 0 || $head != "") {
1190  //echo "6";
1191  $chunks[] = array("level" => 0,
1192  "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s3)));
1193  $head = "";
1194  }
1195  $chunks[] = array("level" => 3,
1196  "text" => trim(substr($c_text, $s3 + 9, $n - $s3 - 12)));
1197  $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1198  } else {
1199  //echo "7";
1200  $head .= substr($c_text, 0, $n);
1201  $c_text = substr($c_text, $n);
1202  }
1203  } else { // possible level two header
1204  //echo "8";
1205  $n = strpos($c_text, "<br />", $s2 + 1);
1206  if ($n > ($s2 + 8) && substr($c_text, $n - 2, 8) == "==<br />") {
1207  //echo "9";
1208  // found level two header
1209  if ($s2 > 0 || $head != "") {
1210  //echo "A";
1211  $chunks[] = array("level" => 0,
1212  "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s2)));
1213  $head = "";
1214  }
1215  $chunks[] = array("level" => 2, "text" => trim(substr($c_text, $s2 + 8, $n - $s2 - 10)));
1216  $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1217  } else {
1218  //echo "B";
1219  $head .= substr($c_text, 0, $n);
1220  $c_text = substr($c_text, $n);
1221  }
1222  }
1223  } else { // possible level one header
1224  //echo "C";
1225  $n = strpos($c_text, "<br />", $s1 + 1);
1226  if ($n > ($s1 + 7) && substr($c_text, $n - 1, 7) == "=<br />") {
1227  //echo "D";
1228  // found level one header
1229  if ($s1 > 0 || $head != "") {
1230  //echo "E";
1231  $chunks[] = array("level" => 0,
1232  "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s1)));
1233  $head = "";
1234  }
1235  $chunks[] = array("level" => 1, "text" => trim(substr($c_text, $s1 + 7, $n - $s1 - 8)));
1236  $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1237  //echo "<br>ctext:".htmlentities($c_text)."<br>";
1238  } else {
1239  $head .= substr($c_text, 0, $n);
1240  $c_text = substr($c_text, $n);
1241  //echo "<br>head:".$head."c_text:".$c_text."<br>";
1242  }
1243  }
1244  } else {
1245  //echo "G";
1246  $chunks[] = array("level" => 0, "text" => $head . $c_text);
1247  $head = "";
1248  $c_text = "";
1249  }
1250  }
1251  if (count($chunks) == 0) {
1252  $chunks[] = array("level" => 0, "text" => "");
1253  }
1254 
1255 
1256  // remove preceding br
1257  if (substr($chunks[0]["text"], 0, 6) == "<br />") {
1258  $chunks[0]["text"] = substr($chunks[0]["text"], 6);
1259  }
1260 
1261  // remove trailing br
1262  if (substr(
1263  $chunks[count($chunks) - 1]["text"],
1264  strlen($chunks[count($chunks) - 1]["text"]) - 6,
1265  6
1266  ) == "<br />") {
1267  $chunks[count($chunks) - 1]["text"] =
1268  substr($chunks[count($chunks) - 1]["text"], 0, strlen($chunks[count($chunks) - 1]["text"]) - 6);
1269  if ($chunks[count($chunks) - 1]["text"] == "") {
1270  unset($chunks[count($chunks) - 1]);
1271  }
1272  }
1273  return $chunks;
1274  }
removeTrailingBr($a_str)
Remove trailing
$n
Definition: RandomTest.php:85
handleNextBr($a_str)
Remove preceding
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beforePageDelete()

static ilPCParagraph::beforePageDelete (   $a_page)
static

Before page is being deleted.

Parameters
object$a_pagepage object

Definition at line 1830 of file class.ilPCParagraph.php.

1831  {
1832  // delete anchors
1833  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1834  }

◆ create()

ilPCParagraph::create ( $a_pg_obj,
  $a_hier_id,
  $a_pc_id = "" 
)

Create paragraph node (incl.

page content node) at given hierarchical ID.

Parameters
object$a_pg_objPage Object
string$a_hier_idHierarchical ID

Definition at line 146 of file class.ilPCParagraph.php.

References IL_INSERT_AFTER.

147  {
148  //echo "-$a_pc_id-";
149  //echo "<br>-".htmlentities($a_pg_obj->getXMLFromDom())."-<br><br>"; mk();
150  $this->node = $this->dom->create_element("PageContent");
151 
152  // this next line kicks out placeholders, if something is inserted
153  $a_pg_obj->insertContent($this, $a_hier_id, IL_INSERT_AFTER, $a_pc_id);
154 
155  $this->par_node = $this->dom->create_element("Paragraph");
156  $this->par_node = $this->node->append_child($this->par_node);
157  $this->par_node->set_attribute("Language", "");
158  }
const IL_INSERT_AFTER

◆ createAfter()

ilPCParagraph::createAfter (   $node)

Create paragraph node (incl.

page content node) after given node.

Parameters
object$nodePredecessing node

Definition at line 125 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

126  {
127  $this->node = $this->createPageContentNode(false);
128  if ($succ_node = $node->next_sibling()) {
129  $this->node = $succ_node->insert_before($this->node, $succ_node);
130  } else {
131  $parent_node = $node->parent_node();
132  $this->node = $parent_node->append_child($this->node);
133  }
134  $this->par_node = $this->dom->create_element("Paragraph");
135  $this->par_node = $this->node->append_child($this->par_node);
136  $this->par_node->set_attribute("Language", "");
137  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ createAtNode()

ilPCParagraph::createAtNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 96 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

97  {
98  $this->node = $this->createPageContentNode();
99  $this->par_node = $this->dom->create_element("Paragraph");
100  $this->par_node = $this->node->append_child($this->par_node);
101  $this->par_node->set_attribute("Language", "");
102  $node->append_child($this->node);
103  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ createBeforeNode()

ilPCParagraph::createBeforeNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 110 of file class.ilPCParagraph.php.

References ilPageContent\$node, and ilPageContent\createPageContentNode().

111  {
112  $this->node = $this->createPageContentNode();
113  $this->par_node = $this->dom->create_element("Paragraph");
114  $this->par_node = $this->node->append_child($this->par_node);
115  $this->par_node->set_attribute("Language", "");
116  $node->insert_before($this->node, $node);
117  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ getAutoIndent()

ilPCParagraph::getAutoIndent ( )

Get AutoIndent (Code Paragraphs)

Parameters
stringAuto Indent attribute

Definition at line 404 of file class.ilPCParagraph.php.

405  {
406  return $this->par_node->get_attribute("AutoIndent");
407  }

◆ getBBMap()

static ilPCParagraph::getBBMap ( )
staticprotected

Get bb to xml tag map.

Returns
array map

Definition at line 56 of file class.ilPCParagraph.php.

57  {
58  return self::$bb_tags;
59  }

◆ getCharacteristic()

ilPCParagraph::getCharacteristic ( )

Get characteristic of paragraph.

Returns
string characteristic

Definition at line 377 of file class.ilPCParagraph.php.

Referenced by getType(), and setText().

378  {
379  if (is_object($this->par_node)) {
380  return $this->par_node->get_attribute("Characteristic");
381  }
382  }
+ Here is the caller graph for this function:

◆ getDownloadTitle()

ilPCParagraph::getDownloadTitle ( )

get attribute download title

Definition at line 446 of file class.ilPCParagraph.php.

447  {
448  return $this->par_node->get_attribute("DownloadTitle");
449  }

◆ getJavascriptFiles()

ilPCParagraph::getJavascriptFiles (   $a_mode)

Get Javascript files.

Definition at line 1999 of file class.ilPCParagraph.php.

References ilLinkifyUtil\getLocalJsPaths().

2000  {
2001  $adve_settings = new ilSetting("adve");
2002 
2003  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking")) {
2004  include_once("./Services/Link/classes/class.ilLinkifyUtil.php");
2006  }
2007 
2008  return array();
2009  }
static getLocalJsPaths()
Get paths of necessary js files.
+ Here is the call graph for this function:

◆ getLanguage()

ilPCParagraph::getLanguage ( )

get language

Definition at line 482 of file class.ilPCParagraph.php.

Referenced by input2xml(), and setText().

483  {
484  return $this->par_node->get_attribute("Language");
485  }
+ Here is the caller graph for this function:

◆ getLastSavedPCId()

ilPCParagraph::getLastSavedPCId (   $a_pg_obj,
  $a_as_ajax_str = false 
)

Get last inserted pc ids.

Parameters

Definition at line 1382 of file class.ilPCParagraph.php.

References ilPageContent\$hier_id.

1383  {
1384  if ($a_as_ajax_str) {
1385  $a_pg_obj->stripHierIDs();
1386  $a_pg_obj->addHierIds();
1387  $ids = "###";
1388  //var_dump($this->inserted_pc_ids);
1389  $combined = $a_pg_obj->getHierIdsForPCIds(
1390  array($this->inserted_pc_id)
1391  );
1392  foreach ($combined as $pc_id => $hier_id) {
1393  //echo "1";
1394  $ids .= $sep . $hier_id . ":" . $pc_id;
1395  $sep = ";";
1396  }
1397  $ids .= "###";
1398  return $ids;
1399  }
1400 
1401  return $this->inserted_pc_id;
1402  }

◆ getOnloadCode()

ilPCParagraph::getOnloadCode (   $a_mode)

Get onload code.

Parameters

Definition at line 2017 of file class.ilPCParagraph.php.

2018  {
2019  $adve_settings = new ilSetting("adve");
2020 
2021  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking")) {
2022  return array("il.ExtLink.autolink('.ilc_Paragraph, .ilc_page_fn_Footnote','ilc_link_ExtLink');");
2023  }
2024 
2025  return array();
2026  }

◆ getParagraphSequenceContent()

ilPCParagraph::getParagraphSequenceContent (   $a_pg_obj)

Get paragraph sequenc of current paragraph.

Definition at line 301 of file class.ilPCParagraph.php.

References ilPageContent\$hier_id, $i, ilPageContent\readHierId(), ilPageContent\readPCId(), and ilPCParagraphGUI\xml2outputJS().

302  {
303  $childs = $this->par_node->parent_node()->parent_node()->child_nodes();
304  $seq = array();
305  $cur_seq = array();
306  $found = false;
307  $pc_id = $this->readPCId();
308  $hier_id = $this->readHierId();
309  for ($i = 0; $i < count($childs); $i++) {
310  $pchilds = $childs[$i]->child_nodes();
311  if ($pchilds[0]->node_name() == "Paragraph" &&
312  $pchilds[0]->get_attribute("Characteristic") != "Code") {
313  $cur_seq[] = $childs[$i];
314 
315  // check whether this is the sequence of the current paragraph
316  if ($childs[$i]->get_attribute("PCID") == $pc_id &&
317  $childs[$i]->get_attribute("HierId") == $hier_id) {
318  $found = true;
319  }
320 
321  // if this is the current sequenc, get it
322  if ($found) {
323  $seq = $cur_seq;
324  }
325  } else {
326  // non-paragraph element found -> init the current sequence
327  $cur_seq = array();
328  $found = false;
329  }
330  }
331 
332  $content = "";
333  $ids = "###";
334  $id_sep = "";
335  foreach ($seq as $p_node) {
336  $ids .= $id_sep . $p_node->get_attribute("HierId") . ":" . $p_node->get_attribute("PCID");
337  $po = $a_pg_obj->getContentObject(
338  $p_node->get_attribute("HierId"),
339  $p_node->get_attribute("PCID")
340  );
341  $s_text = $po->getText();
342  $s_text = $po->xml2output($s_text, true, false);
343  $char = $po->getCharacteristic();
344  if ($char == "") {
345  $char = "Standard";
346  }
347  $s_text = ilPCParagraphGUI::xml2outputJS($s_text, $char, $po->readPCId());
348  $content .= $s_text;
349  $id_sep = ";";
350  }
351  $ids .= "###";
352 
353  return $ids . $content;
354  }
static xml2outputJS($s_text, $char, $a_pc_id)
Prepare content for js output.
readPCId()
Read PC Id.
$i
Definition: disco.tpl.php:19
readHierId()
Read PC Id.
+ Here is the call graph for this function:

◆ getShowLineNumbers()

ilPCParagraph::getShowLineNumbers ( )

get attribute showlinenumbers

Definition at line 466 of file class.ilPCParagraph.php.

467  {
468  return $this->par_node->get_attribute("ShowLineNumbers");
469  }

◆ getSubCharacteristic()

ilPCParagraph::getSubCharacteristic ( )

get attribute subcharacteristic

Definition at line 423 of file class.ilPCParagraph.php.

424  {
425  return $this->par_node->get_attribute("SubCharacteristic");
426  }

◆ getText()

ilPCParagraph::getText (   $a_short_mode = false)

Get (xml) content of paragraph.

Returns
string Paragraph Content.

Definition at line 284 of file class.ilPCParagraph.php.

References $i.

Referenced by autoLinkGlossaries().

285  {
286  if (is_object($this->par_node)) {
287  $content = "";
288  $childs = $this->par_node->child_nodes();
289  for ($i = 0; $i < count($childs); $i++) {
290  $content .= $this->dom->dump_node($childs[$i]);
291  }
292  return $content;
293  } else {
294  return "";
295  }
296  }
$i
Definition: disco.tpl.php:19
+ Here is the caller graph for this function:

◆ getType()

ilPCParagraph::getType ( )

Need to override getType from ilPageContent to distinguish between Pararagraph and Source.

Definition at line 1309 of file class.ilPCParagraph.php.

References getCharacteristic().

1310  {
1311  return ($this->getCharacteristic() == "Code")?"src":parent::getType();
1312  }
getCharacteristic()
Get characteristic of paragraph.
+ Here is the call graph for this function:

◆ getXMLTagMap()

static ilPCParagraph::getXMLTagMap ( )
staticprotected

Get tag to bb map.

Returns
array map

Definition at line 66 of file class.ilPCParagraph.php.

67  {
68  return array_flip(self::$bb_tags);
69  }

◆ handleAjaxContent()

static ilPCParagraph::handleAjaxContent (   $a_content)
static

Handle ajax content.

Definition at line 1408 of file class.ilPCParagraph.php.

References $a_content, $i, $id, $res, $ret, $tag, $tags, $text, ilPageContentGUI\_getCommonBBButtons(), ilDOM2Util\addParent(), ilUtil\attribsToArray(), ilDOM2Util\changeName(), ilDOM2Util\replaceByChilds(), and ilUtil\stripSlashes().

Referenced by ilPCDataTableGUI\updateJS().

1409  {
1410  $a_content = "<dummy>" . $a_content . "</dummy>";
1411 
1412  $doc = new DOMDocument();
1413 
1414  $content = ilUtil::stripSlashes($a_content, false);
1415 
1416  // $content = str_replace("&lt;", "<", $content);
1417  // $content = str_replace("&gt;", ">", $content);
1418  //echo "<br><br>".htmlentities($content); mk();
1419  $res = $doc->loadXML($content);
1420 
1421  if (!$res) {
1422  return false;
1423  }
1424 
1425  // convert tags
1426  $xpath = new DOMXpath($doc);
1427 
1428  $tags = self::getXMLTagMap();
1429 
1430  $elements = $xpath->query("//span");
1431  include_once("./Services/Utilities/classes/class.ilDOM2Util.php");
1432  while (!is_null($elements) && !is_null($element = $elements->item(0))) {
1433  //$element = $elements->item(0);
1434  $class = $element->getAttribute("class");
1435  if (substr($class, 0, 16) == "ilc_text_inline_") {
1436  $class_arr = explode(" ", $class);
1437  $tag = substr($class_arr[0], 16);
1438  if (isset($tags[$tag])) { // known tag like strong
1439  $cnode = ilDOM2Util::changeName($element, "il" . substr($class_arr[0], 16), false);
1440  } else { // unknown tag -> marked text
1441  $cnode = ilDOM2Util::changeName($element, "ilMarked", false);
1442  $cnode->setAttribute("Class", substr($class_arr[0], 16));
1443  }
1444  for ($i = 1; $i < count($class_arr); $i++) {
1445  $tag = substr($class_arr[$i], 16);
1446  if (isset($tags[$tag])) { // known tag like strong
1447  $cnode = ilDOM2Util::addParent($cnode, "il" . substr($class_arr[$i], 16));
1448  } else { // unknown tag -> marked element
1449  $cnode = ilDOM2Util::addParent($cnode, "ilMarked");
1450  $cnode->setAttribute("Class", substr($class_arr[$i], 16));
1451  }
1452  }
1453  } else {
1454  ilDOM2Util::replaceByChilds($element);
1455  }
1456 
1457  $elements = $xpath->query("//span");
1458  }
1459 
1460  // convert tags
1461  $xpath = new DOMXpath($doc);
1462  $elements = $xpath->query("/dummy/div");
1463 
1464  $ret = array();
1465  if (!is_null($elements)) {
1466  foreach ($elements as $element) {
1467  $id = $element->getAttribute("id");
1468  $class = $element->getAttribute("class");
1469  $class = substr($class, 15);
1470  if (trim($class) == "") {
1471  $class = "Standard";
1472  }
1473 
1474  $text = $doc->saveXML($element);
1475  $text = str_replace("<br/>", "\n", $text);
1476 
1477  // remove wrapping div
1478  $pos = strpos($text, ">");
1479  $text = substr($text, $pos + 1);
1480  $pos = strrpos($text, "<");
1481  $text = substr($text, 0, $pos);
1482 
1483  // todo: remove empty spans <span ...> </span>
1484 
1485  // replace tags by bbcode
1486  foreach (ilPageContentGUI::_getCommonBBButtons() as $bb => $cl) {
1487  if (!in_array($bb, array("code", "tex", "fn", "xln"))) {
1488  $text = str_replace(
1489  "<il" . $cl . ">",
1490  "[" . $bb . "]",
1491  $text
1492  );
1493  $text = str_replace(
1494  "</il" . $cl . ">",
1495  "[/" . $bb . "]",
1496  $text
1497  );
1498  $text = str_replace("<il" . $cl . "/>", "", $text);
1499  }
1500  }
1501  $text = str_replace(
1502  array("<code>", "</code>"),
1503  array("[code]", "[/code]"),
1504  $text
1505  );
1506  $text = str_replace(
1507  array('<sup class="ilc_sup_Sup">', "</sup>"),
1508  array("[sup]", "[/sup]"),
1509  $text
1510  );
1511  $text = str_replace(
1512  array('<sub class="ilc_sub_Sub">', "</sub>"),
1513  array("[sub]", "[/sub]"),
1514  $text
1515  );
1516 
1517  $text = str_replace("<code/>", "", $text);
1518  $text = str_replace('<ul class="ilc_list_u_BulletedList"/>', "", $text);
1519  $text = str_replace('<ul class="ilc_list_o_NumberedList"/>', "", $text);
1520 
1521  // replace marked text
1522  // external links
1523  $any = "[^>]*";
1524  while (preg_match('~<ilMarked(' . $any . ')>~i', $text, $found)) {
1525  $found[0];
1526  $attribs = ilUtil::attribsToArray($found[1]);
1527  $text = str_replace("<ilMarked" . $found[1] . ">", "[marked class=\"" . $attribs["Class"] . "\"]", $text);
1528  }
1529  $text = str_replace("</ilMarked>", "[/marked]", $text);
1530 
1531 
1532  $ret[] = array("text" => $text, "id" => $id, "class" => $class);
1533  }
1534  }
1535 
1536  // we should only have one here!
1537  return $ret[0];
1538  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
if(!array_key_exists('StateId', $_REQUEST)) $id
static replaceByChilds($node)
Replace a node by its child.
foreach($_POST as $key=> $value) $res
$a_content
Definition: workflow.php:93
$tags
Definition: croninfo.php:19
$text
Definition: errorreport.php:18
static changeName($node, $name, $keep_attributes=true)
Change name of a node.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static addParent($node, $name)
Add parent.
static _getCommonBBButtons()
Get common bb buttons.
$ret
Definition: parser.php:6
$i
Definition: disco.tpl.php:19
if(function_exists('posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
Definition: cron.php:35
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleAjaxContentPost()

static ilPCParagraph::handleAjaxContentPost (   $text)
static

Post input2xml handling of ajax content.

Definition at line 1543 of file class.ilPCParagraph.php.

References $text.

Referenced by saveJS(), and ilPCDataTableGUI\updateJS().

1544  {
1545  $text = str_replace(
1546  array("&lt;ul&gt;", "&lt;/ul&gt;"),
1547  array("<SimpleBulletList>", "</SimpleBulletList>"),
1548  $text
1549  );
1550  $text = str_replace(
1551  array("&lt;ul class='ilc_list_u_BulletedList'&gt;", "&lt;/ul&gt;"),
1552  array("<SimpleBulletList>", "</SimpleBulletList>"),
1553  $text
1554  );
1555  $text = str_replace(
1556  array("&lt;ul class=\"ilc_list_u_BulletedList\"&gt;", "&lt;/ul&gt;"),
1557  array("<SimpleBulletList>", "</SimpleBulletList>"),
1558  $text
1559  );
1560  $text = str_replace(
1561  array("&lt;ol&gt;", "&lt;/ol&gt;"),
1562  array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1563  $text
1564  );
1565  $text = str_replace(
1566  array("&lt;ol class='ilc_list_o_NumberedList'&gt;", "&lt;/ol&gt;"),
1567  array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1568  $text
1569  );
1570  $text = str_replace(
1571  array("&lt;ol class=\"ilc_list_o_NumberedList\"&gt;", "&lt;/ol&gt;"),
1572  array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1573  $text
1574  );
1575  $text = str_replace(
1576  array("&lt;li&gt;", "&lt;/li&gt;"),
1577  array("<SimpleListItem>", "</SimpleListItem>"),
1578  $text
1579  );
1580  $text = str_replace(
1581  array("&lt;li class='ilc_list_item_StandardListItem'&gt;", "&lt;/li&gt;"),
1582  array("<SimpleListItem>", "</SimpleListItem>"),
1583  $text
1584  );
1585  $text = str_replace(
1586  array("&lt;li class=\"ilc_list_item_StandardListItem\"&gt;", "&lt;/li&gt;"),
1587  array("<SimpleListItem>", "</SimpleListItem>"),
1588  $text
1589  );
1590 
1591  $text = str_replace(
1592  array("&lt;li class=\"ilc_list_item_StandardListItem\"/&gt;"),
1593  array("<SimpleListItem></SimpleListItem>"),
1594  $text
1595  );
1596 
1597  $text = str_replace("<SimpleBulletList><br />", "<SimpleBulletList>", $text);
1598  $text = str_replace("<SimpleNumberedList><br />", "<SimpleNumberedList>", $text);
1599  $text = str_replace("<br /><SimpleBulletList>", "<SimpleBulletList>", $text);
1600  $text = str_replace("<br /><SimpleNumberedList>", "<SimpleNumberedList>", $text);
1601  $text = str_replace("</SimpleBulletList><br />", "</SimpleBulletList>", $text);
1602  $text = str_replace("</SimpleNumberedList><br />", "</SimpleNumberedList>", $text);
1603  $text = str_replace("</SimpleListItem><br />", "</SimpleListItem>", $text);
1604 
1605  return $text;
1606  }
$text
Definition: errorreport.php:18
+ Here is the caller graph for this function:

◆ handleNextBr()

ilPCParagraph::handleNextBr (   $a_str)

Remove preceding

Definition at line 1279 of file class.ilPCParagraph.php.

Referenced by autoSplit().

1280  {
1281  // do not remove, if next line starts with a "=", otherwise two
1282  // headlines in a row will not be recognized
1283  if (substr($a_str, 0, 6) == "<br />" && substr($a_str, 6, 1) != "=") {
1284  $a_str = substr($a_str, 6);
1285  } else {
1286  // if next line starts with a "=" we need to reinsert the <br />
1287  // otherwise it will not be recognized
1288  if (substr($a_str, 0, 1) == "=") {
1289  $a_str = "<br />" . $a_str;
1290  }
1291  }
1292  return $a_str;
1293  }
+ Here is the caller graph for this function:

◆ init()

ilPCParagraph::init ( )

Init page content component.

Definition at line 43 of file class.ilPCParagraph.php.

References $DIC, ilPageContent\setType(), and user().

44  {
45  global $DIC;
46 
47  $this->user = $DIC->user();
48  $this->setType("par");
49  }
global $DIC
Definition: saml.php:7
setType($a_type)
Set Type.
user()
Definition: user.php:4
+ Here is the call graph for this function:

◆ input2xml()

ilPCParagraph::input2xml (   $a_text,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)

Definition at line 487 of file class.ilPCParagraph.php.

References _input2xml(), and getLanguage().

488  {
489  return $this->_input2xml($a_text, $this->getLanguage(), $a_wysiwyg, $a_handle_lists);
490  }
getLanguage()
get language
static _input2xml($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
converts user input to xml
+ Here is the call graph for this function:

◆ input2xmlReplaceLists()

static ilPCParagraph::input2xmlReplaceLists (   $a_text)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 809 of file class.ilPCParagraph.php.

References $i, $row, $rows, and $text.

Referenced by _input2xml(), and ilSCORM2004Asset\convertLists().

810  {
811  $rows = explode("<br />", $a_text . "<br />");
812  //var_dump($a_text);
813 
814  $old_level = 0;
815 
816  $text = "";
817 
818  foreach ($rows as $row) {
819  $level = 0;
820  if (str_replace("#", "*", substr($row, 0, 3)) == "***") {
821  $level = 3;
822  } elseif (str_replace("#", "*", substr($row, 0, 2)) == "**") {
823  $level = 2;
824  } elseif (str_replace("#", "*", substr($row, 0, 1)) == "*") {
825  $level = 1;
826  }
827 
828  // end previous line
829  if ($level < $old_level) {
830  for ($i = $old_level; $i > $level; $i--) {
831  $text .= "</SimpleListItem></" . $clist[$i] . ">";
832  }
833  if ($level > 0) {
834  $text .= "</SimpleListItem>";
835  }
836  } elseif ($old_level > 0 && $level > 0 && ($level == $old_level)) {
837  $text .= "</SimpleListItem>";
838  } elseif (($level == $old_level) && $text != "") {
839  $text .= "<br />";
840  }
841 
842  // start next line
843  if ($level > $old_level) {
844  for ($i = $old_level + 1; $i <= $level; $i++) {
845  if (substr($row, $i - 1, 1) == "*") {
846  $clist[$i] = "SimpleBulletList";
847  } else {
848  $clist[$i] = "SimpleNumberedList";
849  }
850  $text .= "<" . $clist[$i] . "><SimpleListItem>";
851  }
852  } elseif ($old_level > 0 && $level > 0) {
853  $text .= "<SimpleListItem>";
854  }
855  $text .= substr($row, $level);
856 
857  $old_level = $level;
858  }
859 
860  // remove "<br />" at the end
861  if (substr($text, strlen($text) - 6) == "<br />") {
862  $text = substr($text, 0, strlen($text) - 6);
863  }
864 
865  return $text;
866  }
$text
Definition: errorreport.php:18
$row
$rows
Definition: xhr_table.php:10
$i
Definition: disco.tpl.php:19
+ Here is the caller graph for this function:

◆ intLinks2xml()

static ilPCParagraph::intLinks2xml (   $a_text)
static

internal links to xml

Parameters

Definition at line 629 of file class.ilPCParagraph.php.

References $DIC, $t, ilObjUser\_lookupId(), and ilUtil\attribsToArray().

630  {
631  global $DIC;
632 
633  $objDefinition = $DIC["objDefinition"];
634 
635  $rtypes = $objDefinition->getAllRepositoryTypes();
636 
637  // internal links
638  //$any = "[^\]]*"; // this doesn't work :-(
639  $ws = "[ \t\r\f\v\n]*";
640  $ltypes = "page|chap|term|media|obj|dfile|sess|wpage|ppage|" . implode($rtypes, "|");
641  // empty internal links
642  while (preg_match('~\[(iln' . $ws . '((inst' . $ws . '=' . $ws . '([\"0-9])*)?' . $ws .
643  "((" . $ltypes . ")$ws=$ws([\"0-9])*)$ws" .
644  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]\[\/iln\]~i", $a_text, $found)) {
645  $a_text = str_replace($found[0], "", $a_text);
646  }
647  while (preg_match('~\[(iln' . $ws . '((inst' . $ws . '=' . $ws . '([\"0-9])*)?' . $ws .
648  "((" . $ltypes . ")$ws=$ws([\"0-9])*)$ws" .
649  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]~i", $a_text, $found)) {
650  $attribs = ilUtil::attribsToArray($found[2]);
651  $inst_str = $attribs["inst"];
652  // pages
653  if (isset($attribs["page"])) {
654  $tframestr = "";
655  if (!empty($found[10])) {
656  $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
657  }
658  $ancstr = "";
659  if ($attribs["anchor"] != "") {
660  $ancstr = ' Anchor="' . $attribs["anchor"] . '" ';
661  }
662  // see 26066 for addcslashes
663  $a_text = preg_replace(
664  '/\[' . addcslashes($found[1], '/') . '\]/i',
665  "<IntLink Target=\"il_" . $inst_str . "_pg_" . $attribs['page'] . "\" Type=\"PageObject\"" . $tframestr . $ancstr . ">",
666  $a_text
667  );
668  }
669  // chapters
670  elseif (isset($attribs["chap"])) {
671  if (!empty($found[10])) {
672  $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
673  } else {
674  $tframestr = "";
675  }
676  $a_text = preg_replace(
677  '/\[' . $found[1] . '\]/i',
678  "<IntLink Target=\"il_" . $inst_str . "_st_" . $attribs['chap'] . "\" Type=\"StructureObject\"" . $tframestr . ">",
679  $a_text
680  );
681  }
682  // glossary terms
683  elseif (isset($attribs["term"])) {
684  switch ($found[10]) {
685  case "New":
686  $tframestr = " TargetFrame=\"New\" ";
687  break;
688 
689  default:
690  $tframestr = " TargetFrame=\"Glossary\" ";
691  break;
692  }
693  $a_text = preg_replace(
694  '/\[' . $found[1] . '\]/i',
695  "<IntLink Target=\"il_" . $inst_str . "_git_" . $attribs['term'] . "\" Type=\"GlossaryItem\" $tframestr>",
696  $a_text
697  );
698  }
699  // wiki pages
700  elseif (isset($attribs["wpage"])) {
701  $tframestr = "";
702  $a_text = preg_replace(
703  '/\[' . $found[1] . '\]/i',
704  "<IntLink Target=\"il_" . $inst_str . "_wpage_" . $attribs['wpage'] . "\" Type=\"WikiPage\" $tframestr>",
705  $a_text
706  );
707  }
708  // portfolio pages
709  elseif (isset($attribs["ppage"])) {
710  $tframestr = "";
711  $a_text = preg_replace(
712  '/\[' . $found[1] . '\]/i',
713  "<IntLink Target=\"il_" . $inst_str . "_ppage_" . $attribs['ppage'] . "\" Type=\"PortfolioPage\" $tframestr>",
714  $a_text
715  );
716  }
717  // media object
718  elseif (isset($attribs["media"])) {
719  if (!empty($found[10])) {
720  $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
721  $a_text = preg_replace(
722  '/\[' . $found[1] . '\]/i',
723  "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"" . $tframestr . ">",
724  $a_text
725  );
726  } else {
727  $a_text = preg_replace(
728  '/\[' . $found[1] . '\]/i',
729  "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"/>",
730  $a_text
731  );
732  }
733  }
734  // direct download file (no repository object)
735  elseif (isset($attribs["dfile"])) {
736  $a_text = preg_replace(
737  '/\[' . $found[1] . '\]/i',
738  "<IntLink Target=\"il_" . $inst_str . "_dfile_" . $attribs['dfile'] . "\" Type=\"File\">",
739  $a_text
740  );
741  }
742  // repository items (id is ref_id (will be used internally but will
743  // be replaced by object id for export purposes)
744  else {
745  foreach ($objDefinition->getAllRepositoryTypes() as $t) {
746  if (isset($attribs[$t])) {
747  $obj_id = $attribs[$t];
748  }
749  }
750  if (isset($attribs["obj"])) {
751  $obj_id = $attribs["obj"];
752  }
753 
754  if ($obj_id > 0) {
755  if ($inst_str == "") {
756  $a_text = preg_replace(
757  '/\[' . $found[1] . '\]/i',
758  "<IntLink Target=\"il_" . $inst_str . "_obj_" . $obj_id . "\" Type=\"RepositoryItem\">",
759  $a_text
760  );
761  } else {
762  $a_text = preg_replace(
763  '/\[' . $found[1] . '\]/i',
764  "<IntLink Target=\"il_" . $inst_str . "_" . $found[6] . "_" . $obj_id . "\" Type=\"RepositoryItem\">",
765  $a_text
766  );
767  }
768  } else {
769  $a_text = preg_replace('/\[' . $found[1] . '\]/i', "[error: iln" . $found[1] . "]", $a_text);
770  }
771  }
772  }
773 
774  while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?" . $ws . "media$ws=$ws([\"0-9])*)$ws)/\]~i", $a_text, $found)) {
775  $attribs = ilUtil::attribsToArray($found[2]);
776  $inst_str = $attribs["inst"];
777  $a_text = preg_replace(
778  '~\[' . $found[1] . '/\]~i',
779  "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"/>",
780  $a_text
781  );
782  }
783 
784  // user
785  while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?" . $ws . "user$ws=$ws(\"([^\"])*)\")$ws)/\]~i", $a_text, $found)) {
786  $attribs = ilUtil::attribsToArray($found[2]);
787  $inst_str = $attribs["inst"];
788  include_once("./Services/User/classes/class.ilObjUser.php");
789  $user_id = ilObjUser::_lookupId($attribs['user']);
790  $a_text = preg_replace(
791  '~\[' . $found[1] . '/\]~i',
792  "<IntLink Target=\"il_" . $inst_str . "_user_" . $user_id . "\" Type=\"User\"/>",
793  $a_text
794  );
795  }
796 
797  $a_text = preg_replace('~\[\/iln\]~i', "</IntLink>", $a_text);
798  return $a_text;
799  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
global $DIC
Definition: saml.php:7
static _lookupId($a_user_str)
Lookup id by login.
+ Here is the call graph for this function:

◆ linkTermsInDom()

static ilPCParagraph::linkTermsInDom (   $a_dom,
  $a_terms,
  $a_par_node = null 
)
staticprotected

Link terms in a dom page object in bb style.

Parameters

Definition at line 1668 of file class.ilPCParagraph.php.

References ilPageContent\$node, $t, $text, DOMXML_LOAD_PARSING, domxml_open_mem(), ilUtil\sortArray(), ilStr\strIPos(), ilStr\strLen(), ilStr\strPos(), ilStr\strrPos(), and ilStr\subStr().

1669  {
1670  // sort terms by their length (shortes first)
1671  // to prevent that nested tags are builded
1672  foreach ($a_terms as $k => $t) {
1673  $a_terms[$k]["termlength"] = strlen($t["term"]);
1674  }
1675  $a_terms = ilUtil::sortArray($a_terms, "termlength", "asc", true);
1676 
1677 
1678  if ($a_dom instanceof php4DOMDocument) {
1679  $a_dom = $a_dom->myDOMDocument;
1680  }
1681  if ($a_par_node instanceof php4DOMElement) {
1682  $a_par_node = $a_par_node->myDOMNode;
1683  }
1684 
1685  $xpath = new DOMXPath($a_dom);
1686 
1687  if ($a_par_node == null) {
1688  $parnodes = $xpath->query("//Paragraph[@Characteristic != 'Code']");
1689  } else {
1690  $parnodes = $xpath->query(".//Paragraph[@Characteristic != 'Code']", $a_par_node->parentNode);
1691  }
1692 
1693  include_once("./Services/Utilities/classes/class.ilStr.php");
1694 
1695  foreach ($parnodes as $parnode) {
1696  $textnodes = $xpath->query('.//text()', $parnode);
1697  foreach ($textnodes as $node) {
1698  $p = $node->getNodePath();
1699 
1700  // we do not change text nodes inside of links
1701  if (!is_int(strpos($p, "/IntLink")) &&
1702  !is_int(strpos($p, "/ExtLink"))) {
1703  $node_val = $node->nodeValue;
1704 
1705  // all terms
1706  foreach ($a_terms as $t) {
1707  $pos = ilStr::strIPos($node_val, $t["term"]);
1708 
1709  // if term found
1710  while (is_int($pos)) {
1711  // check if we are in a tex tag, see #22261
1712  $tex_bpos = ilStr::strrPos(ilStr::subStr($node_val, 0, $pos), "[tex]");
1713  $tex_epos = ilStr::strPos($node_val, "[/tex]", $tex_bpos);
1714  if ($tex_bpos > 0 && $tex_epos > 0 && $tex_bpos < $pos && $tex_epos > $pos) {
1715  $pos += ilStr::strLen($t["term"]);
1716  } else {
1717 
1718  // check if the string is not included in another word
1719  // note that []
1720  $valid_limiters = array("", " ", "&nbsp;", ".", ",", ":", ";", "!", "?", "\"", "'", "(", ")");
1721  $b = ($pos > 0)
1722  ? ilStr::subStr($node_val, $pos - 1, 1)
1723  : "";
1724  $a = ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]), 1);
1725  if ((in_array($b, $valid_limiters) || htmlentities($b, null, 'utf-8') == "&nbsp;") && in_array($a, $valid_limiters)) {
1726  $mid = '[iln term="' . $t["id"] . '"]' .
1727  ilStr::subStr($node_val, $pos, ilStr::strLen($t["term"])) .
1728  "[/iln]";
1729 
1730  $node_val = ilStr::subStr($node_val, 0, $pos) .
1731  $mid .
1732  ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]));
1733 
1734  $pos += ilStr::strLen($mid);
1735  } else {
1736  $pos += ilStr::strLen($t["term"]);
1737  }
1738  }
1739  $pos = ilStr::strIPos($node_val, $t["term"], $pos);
1740  }
1741 
1742  // insert [iln] tags
1743  }
1744 
1745  $node->nodeValue = $node_val;
1746  }
1747 
1748  // var_dump($p);
1749 // var_dump($node->nodeValue);
1750  }
1751 
1752 
1753  // dump paragraph node
1754  $text = $a_dom->saveXML($parnode);
1755  $text = substr($text, 0, strlen($text) - strlen("</Paragraph>"));
1756  $text = substr($text, strpos($text, ">") + 1);
1757 
1758  // replace [iln] by tags with xml representation
1759  $text = self::intLinks2xml($text);
1760 
1761  // "set text"
1762  $temp_dom = domxml_open_mem(
1763  '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text . '</Paragraph>',
1765  $error
1766  );
1767  $temp_dom = $temp_dom->myDOMDocument;
1768 
1769  if (empty($error)) {
1770  // delete children of paragraph node
1771  $children = $parnode->childNodes;
1772  while ($parnode->hasChildNodes()) {
1773  $parnode->removeChild($parnode->firstChild);
1774  }
1775 
1776  // copy new content children in paragraph node
1777  $xpath_temp = new DOMXPath($temp_dom);
1778  $temp_pars = $xpath_temp->query("//Paragraph");
1779 
1780  foreach ($temp_pars as $new_par_node) {
1781  $new_childs = $new_par_node->childNodes;
1782 
1783  foreach ($new_childs as $new_child) {
1784  //$cloned_child = $new_child->cloneNode(true);
1785  $cloned_child = $a_dom->importNode($new_child, true);
1786  $parnode->appendChild($cloned_child);
1787  }
1788  }
1789  }
1790  }
1791  // exit;
1792  }
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static strLen($a_string)
Definition: class.ilStr.php:78
static strPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:30
domxml_open_mem($str, $mode=0, &$error=null)
static subStr($a_str, $a_start, $a_length=null)
Definition: class.ilStr.php:15
static strIPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:48
php4DomElement
static strrPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:39
$text
Definition: errorreport.php:18
const DOMXML_LOAD_PARSING
+ Here is the call graph for this function:

◆ removeTrailingBr()

ilPCParagraph::removeTrailingBr (   $a_str)

Remove trailing

Definition at line 1298 of file class.ilPCParagraph.php.

Referenced by autoSplit().

1299  {
1300  if (substr($a_str, strlen($a_str) - 6) == "<br />") {
1301  $a_str = substr($a_str, 0, strlen($a_str) - 6);
1302  }
1303  return $a_str;
1304  }
+ Here is the caller graph for this function:

◆ replaceBBCode()

static ilPCParagraph::replaceBBCode (   $a_text,
  $a_bb,
  $a_tag 
)
staticprotected

Replace bb code.

Parameters
string$a_texttext
string$a_bbbb tag
string$a_tagxml tag
Returns
string

Definition at line 500 of file class.ilPCParagraph.php.

501  {
502  $a_text = preg_replace('/\[' . $a_bb . '\]/i', "<" . $a_tag . ">", $a_text);
503  $a_text = preg_replace('/\[\/' . $a_bb . '\]/i', "</" . $a_tag . ">", $a_text);
504  return $a_text;
505  }

◆ saveAnchors()

static ilPCParagraph::saveAnchors (   $a_page,
  $a_domdoc 
)
static

Save anchors.

Parameters
stringxml page code

Definition at line 1853 of file class.ilPCParagraph.php.

References $name, ilPageContent\$node, and $nodes.

1854  {
1855  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1856 
1857  // get all anchors
1858  $xpath = new DOMXPath($a_domdoc);
1859  $nodes = $xpath->query('//Anchor');
1860  $saved = array();
1861  foreach ($nodes as $node) {
1862  $name = $node->getAttribute("Name");
1863  if (trim($name) != "" && !in_array($name, $saved)) {
1864  self::_saveAnchor($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage(), $name);
1865  $saved[] = $name;
1866  }
1867  }
1868  }

◆ saveJS()

ilPCParagraph::saveJS (   $a_pg_obj,
  $a_content,
  $a_char,
  $a_pc_id,
  $a_insert_at = "" 
)

Save input coming from ajax.

Parameters

Definition at line 1324 of file class.ilPCParagraph.php.

References $a_content, $ilUser, $t, $user, exit, ilPageContent\getPage(), and handleAjaxContentPost().

1325  {
1326  $ilUser = $this->user;
1327 
1328  $this->log->debug("step 1: " . substr($a_content, 0, 1000));
1329  $t = self::handleAjaxContent($a_content);
1330  $this->log->debug("step 2: " . substr($t["text"], 0, 1000));
1331  if ($t === false) {
1332  return false;
1333  }
1334 
1335  $pc_id = explode(":", $a_pc_id);
1336  $insert_at = explode(":", $a_insert_at);
1337  $t_id = explode(":", $t["id"]);
1338 
1339  // insert new paragraph
1340  if ($a_insert_at != "") {
1341  $par = new ilPCParagraph($this->getPage());
1342  $par->create($a_pg_obj, $insert_at[0], $insert_at[1]);
1343  } else {
1344  $par = $a_pg_obj->getContentObject($pc_id[0], $pc_id[1]);
1345  }
1346 
1347  if ($a_insert_at != "") {
1348  $pc_id = $a_pg_obj->generatePCId();
1349  $par->writePCId($pc_id);
1350  $this->inserted_pc_id = $pc_id;
1351  } else {
1352  $this->inserted_pc_id = $pc_id[1];
1353  }
1354 
1355  $par->setLanguage($ilUser->getLanguage());
1356  $par->setCharacteristic($t["class"]);
1357 
1358  $t2 = $par->input2xml($t["text"], true, false);
1359  $this->log->debug("step 3: " . substr($t2, 0, 1000));
1360 
1362  $this->log->debug("step 4: " . substr($t2, 0, 1000));
1363 
1364  $updated = $par->setText($t2, true);
1365 
1366  if ($updated !== true) {
1367  echo $updated;
1368  exit;
1369  return false;
1370  }
1371  $updated = $par->updatePage($a_pg_obj);
1372  //$updated = $a_pg_obj->update();
1373  return $updated;
1374  }
static handleAjaxContentPost($text)
Post input2xml handling of ajax content.
Class ilPCParagraph.
$a_content
Definition: workflow.php:93
$ilUser
Definition: imgupload.php:18
exit
Definition: backend.php:16
+ Here is the call graph for this function:

◆ saveMetaKeywords()

static ilPCParagraph::saveMetaKeywords (   $a_page,
  $a_domdoc 
)
static

save all keywords

Parameters
object$a_pagepage object
object$a_domdocdom document

Definition at line 1937 of file class.ilPCParagraph.php.

References $id, $lang, ilPageContent\$node, $nodes, and ilUtil\stripSlashes().

1938  {
1939  // not nice, should be set by context per method
1940  if ($a_page->getParentType() == "gdf" ||
1941  $a_page->getParentType() == "lm") {
1942  // get existing keywords
1943  $keywords = array();
1944 
1945  // find all Keyw tags
1946  $xpath = new DOMXPath($a_domdoc);
1947  $nodes = $xpath->query('//Keyw');
1948  foreach ($nodes as $node) {
1949  $k = trim(strip_tags($node->nodeValue));
1950  if (!in_array($k, $keywords)) {
1951  $keywords[] = $k;
1952  }
1953  }
1954 
1955  $meta_type = ($a_page->getParentType() == "gdf")
1956  ? "gdf"
1957  : "pg";
1958  $meta_rep_id = $a_page->getParentId();
1959  $meta_id = $a_page->getId();
1960 
1961  include_once("./Services/MetaData/classes/class.ilMD.php");
1962  $md_obj = new ilMD($meta_rep_id, $meta_id, $meta_type);
1963  $mkeywords = array();
1964  $lang = "";
1965  if (is_object($md_section = $md_obj->getGeneral())) {
1966  foreach ($ids = $md_section->getKeywordIds() as $id) {
1967  $md_key = $md_section->getKeyword($id);
1968  $mkeywords[] = strtolower($md_key->getKeyword());
1969  if ($lang == "") {
1970  $lang = $md_key->getKeywordLanguageCode();
1971  }
1972  }
1973  if ($lang == "") {
1974  foreach ($ids = $md_section->getLanguageIds() as $id) {
1975  $md_lang = $md_section->getLanguage($id);
1976  if ($lang == "") {
1977  $lang = $md_lang->getLanguageCode();
1978  }
1979  }
1980  }
1981  foreach ($keywords as $k) {
1982  if (!in_array(strtolower($k), $mkeywords)) {
1983  if (trim($k) != "" && $lang != "") {
1984  $md_key = $md_section->addKeyword();
1985  $md_key->setKeyword(ilUtil::stripSlashes($k));
1986  $md_key->setKeywordLanguage(new ilMDLanguageItem($lang));
1987  $md_key->save();
1988  }
1989  $mkeywords[] = strtolower($k);
1990  }
1991  }
1992  }
1993  }
1994  }
if(!array_key_exists('StateId', $_REQUEST)) $id
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
+ Here is the call graph for this function:

◆ segmentString()

static ilPCParagraph::segmentString (   $a_haystack,
  $a_needles 
)
static

Segments a string into an array at each position of a substring.

Definition at line 946 of file class.ilPCParagraph.php.

Referenced by xml2outputReplaceLists().

947  {
948  $segments = array();
949 
950  $nothing_found = false;
951  while (!$nothing_found) {
952  $nothing_found = true;
953  $found = -1;
954  foreach ($a_needles as $needle) {
955  $pos = stripos($a_haystack, $needle);
956  if (is_int($pos) && ($pos < $found || $found == -1)) {
957  $found = $pos;
958  $found_needle = $needle;
959  $nothing_found = false;
960  }
961  }
962  if ($found > 0) {
963  $segments[] = substr($a_haystack, 0, $found);
964  $a_haystack = substr($a_haystack, $found);
965  }
966  if ($found > -1) {
967  $segments[] = substr($a_haystack, 0, strlen($found_needle));
968  $a_haystack = substr($a_haystack, strlen($found_needle));
969  }
970  }
971  if ($a_haystack != "") {
972  $segments[] = $a_haystack;
973  }
974 
975  return $segments;
976  }
+ Here is the caller graph for this function:

◆ setAutoIndent()

ilPCParagraph::setAutoIndent (   $a_char)

Definition at line 409 of file class.ilPCParagraph.php.

410  {
411  if (!empty($a_char)) {
412  $this->par_node->set_attribute("AutoIndent", $a_char);
413  } else {
414  if ($this->par_node->has_attribute("AutoIndent")) {
415  $this->par_node->remove_attribute("AutoIndent");
416  }
417  }
418  }

◆ setCharacteristic()

ilPCParagraph::setCharacteristic (   $a_char)

Set Characteristic of paragraph.

Parameters
string$a_charCharacteristic

Definition at line 361 of file class.ilPCParagraph.php.

362  {
363  if (!empty($a_char)) {
364  $this->par_node->set_attribute("Characteristic", $a_char);
365  } else {
366  if ($this->par_node->has_attribute("Characteristic")) {
367  $this->par_node->remove_attribute("Characteristic");
368  }
369  }
370  }

◆ setDownloadTitle()

ilPCParagraph::setDownloadTitle (   $a_char)

set attribute download title

Definition at line 432 of file class.ilPCParagraph.php.

433  {
434  if (!empty($a_char)) {
435  $this->par_node->set_attribute("DownloadTitle", $a_char);
436  } else {
437  if ($this->par_node->has_attribute("DownloadTitle")) {
438  $this->par_node->remove_attribute("DownloadTitle");
439  }
440  }
441  }

◆ setLanguage()

ilPCParagraph::setLanguage (   $a_lang)

set language

Definition at line 474 of file class.ilPCParagraph.php.

475  {
476  $this->par_node->set_attribute("Language", $a_lang);
477  }

◆ setNode()

ilPCParagraph::setNode (   $a_node)

Set Page Content Node.

Parameters
object$a_nodePage Content DOM Node

Definition at line 78 of file class.ilPCParagraph.php.

References $i.

79  {
80  parent::setNode($a_node); // this is the PageContent node
81 
82  $childs = $a_node->child_nodes();
83  for ($i = 0; $i < count($childs); $i++) {
84  if ($childs[$i]->node_name() == "Paragraph") {
85  $this->par_node = $childs[$i]; //... and this the Paragraph node
86  }
87  }
88  }
$i
Definition: disco.tpl.php:19

◆ setShowLineNumbers()

ilPCParagraph::setShowLineNumbers (   $a_char)

set attribute showlinenumbers

Definition at line 455 of file class.ilPCParagraph.php.

456  {
457  $a_char = empty($a_char)?"n":$a_char;
458 
459  $this->par_node->set_attribute("ShowLineNumbers", $a_char);
460  }

◆ setSubCharacteristic()

ilPCParagraph::setSubCharacteristic (   $a_char)

set attribute subcharacteristic

Definition at line 388 of file class.ilPCParagraph.php.

389  {
390  if (!empty($a_char)) {
391  $this->par_node->set_attribute("SubCharacteristic", $a_char);
392  } else {
393  if ($this->par_node->has_attribute("SubCharacteristic")) {
394  $this->par_node->remove_attribute("SubCharacteristic");
395  }
396  }
397  }

◆ setText()

ilPCParagraph::setText (   $a_text,
  $a_auto_split = false 
)

Set (xml) content of text paragraph.

Parameters
string$a_texttext content
boolean$a_auto_splitauto split paragraph at headlines true/false

Definition at line 166 of file class.ilPCParagraph.php.

References $i, ilPageContent\$node, $ok, $path, $res, $t, $text, autoSplit(), DOMXML_LOAD_PARSING, domxml_open_mem(), getCharacteristic(), getLanguage(), ilPageContent\getPage(), success(), xpath_eval(), and xpath_new_context().

167  {
168  if (!is_array($a_text)) {
169  $text = array(array("level" => 0, "text" => $a_text));
170  } else {
171  $text = $a_text;
172  }
173 
174  if ($a_auto_split) {
175  $text = $this->autoSplit($a_text);
176  }
177 
178  // DOMXML_LOAD_PARSING, DOMXML_LOAD_VALIDATING, DOMXML_LOAD_RECOVERING
179  $check = "";
180  foreach ($text as $t) {
181  $check .= "<Paragraph>" . $t["text"] . "</Paragraph>";
182  }
183  /*$temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text[0]["text"].'</Paragraph>',
184  DOMXML_LOAD_PARSING, $error);*/
185  $temp_dom = domxml_open_mem(
186  '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $check . '</Paragraph>',
188  $error
189  );
190  //$this->text = $a_text;
191 
192  // remove all childs
193  if (empty($error)) {
194  $temp_dom = domxml_open_mem(
195  '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text[0]["text"] . '</Paragraph>',
197  $error
198  );
199 
200  // delete children of paragraph node
201  $children = $this->par_node->child_nodes();
202  for ($i = 0; $i < count($children); $i++) {
203  $this->par_node->remove_child($children[$i]);
204  }
205 
206  // copy new content children in paragraph node
207  $xpc = xpath_new_context($temp_dom);
208  $path = "//Paragraph";
209  $res = xpath_eval($xpc, $path);
210  if (count($res->nodeset) == 1) {
211  $new_par_node = $res->nodeset[0];
212  $new_childs = $new_par_node->child_nodes();
213 
214  for ($i = 0; $i < count($new_childs); $i++) {
215  $cloned_child = $new_childs[$i]->clone_node(true);
216  $this->par_node->append_child($cloned_child);
217  }
218  $orig_characteristic = $this->getCharacteristic();
219 
220  // if headlines are entered and current characteristic is a headline
221  // use no characteristic as standard
222  if ((count($text) > 1) && (substr($orig_characteristic, 0, 8) == "Headline")) {
223  $orig_characteristic = "";
224  }
225  if ($text[0]["level"] > 0) {
226  $this->par_node->set_attribute("Characteristic", 'Headline' . $text[0]["level"]);
227  }
228  }
229 
230  $ok = true;
231 
232  $c_node = $this->node;
233  // add other chunks afterwards
234  for ($i = 1; $i < count($text); $i++) {
235  if ($ok) {
236  $next_par = new ilPCParagraph($this->getPage());
237  $next_par->createAfter($c_node);
238  $next_par->setLanguage($this->getLanguage());
239  if ($text[$i]["level"] > 0) {
240  $next_par->setCharacteristic("Headline" . $text[$i]["level"]);
241  } else {
242  $next_par->setCharacteristic($orig_characteristic);
243  }
244  $ok = $next_par->setText($text[$i]["text"], false);
245  $c_node = $next_par->node;
246  }
247  }
248 
249  return true;
250  } else {
251  // We want the correct number of \n here to have the real lines numbers
252  $text = str_replace("<br>", "\n", $check); // replace <br> with \n to get correct line
253  $text = str_replace("<br/>", "\n", $text);
254  $text = str_replace("<br />", "\n", $text);
255  $text = str_replace("</SimpleListItem>", "</SimpleListItem>\n", $text);
256  $text = str_replace("<SimpleBulletList>", "\n<SimpleBulletList>", $text);
257  $text = str_replace("<SimpleNumberedList>", "\n<SimpleNumberedList>", $text);
258  $text = str_replace("<Paragraph>\n", "<Paragraph>", $text);
259  $text = str_replace("</Paragraph>", "</Paragraph>\n", $text);
260  include_once("./Services/Dom/classes/class.ilDomDocument.php");
261  $doc = new ilDOMDocument();
262  $text = '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text . '</Paragraph>';
263  //echo htmlentities($text);
264  $this->success = $doc->loadXML($text);
265  $error = $doc->errors;
266  $estr = "";
267  foreach ($error as $e) {
268  $e = str_replace(" in Entity", "", $e);
269  $estr .= $e . "<br />";
270  }
271  if (DEVMODE) {
272  $estr .= "<br />" . $text;
273  }
274 
275  return $estr;
276  }
277  }
$path
Definition: aliased.php:25
xpath_new_context($dom_document)
success()
Definition: success.php:2
domxml_open_mem($str, $mode=0, &$error=null)
xpath_eval($xpath_context, $eval_str, $contextnode=null)
Class ilPCParagraph.
getLanguage()
get language
foreach($_POST as $key=> $value) $res
$text
Definition: errorreport.php:18
getCharacteristic()
Get characteristic of paragraph.
autoSplit($a_text)
This function splits a paragraph text that has been already processed with input2xml at each header p...
const DOMXML_LOAD_PARSING
$i
Definition: disco.tpl.php:19
+ Here is the call graph for this function:

◆ updatePage()

ilPCParagraph::updatePage (   $a_page)

Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object)

Parameters

Definition at line 1615 of file class.ilPCParagraph.php.

References $ret.

1616  {
1617  $a_page->beforePageContentUpdate($this);
1618 
1619  $ret = $a_page->update();
1620  return $ret;
1621  }
$ret
Definition: parser.php:6

◆ xml2output()

static ilPCParagraph::xml2output (   $a_text,
  $a_wysiwyg = false,
  $a_replace_lists = true,
  $unmask = true 
)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 985 of file class.ilPCParagraph.php.

References $tag, $target, $target_id, $target_type, ilObjUser\_lookupLogin(), ilObject\_lookupType(), ilUtil\attribsToArray(), and xml2outputReplaceLists().

Referenced by ilPCDataTableGUI\editData(), ilPCDataTableGUI\editDataCl(), ilPresentationListTableGUI\fillRow(), ilTermListTableGUI\fillRow(), and ilPageObject\getPageContentsHashes().

986  {
987  // note: the order of the processing steps is crucial
988  // and should be the same as in input2xml() in REVERSE order!
989 
990  // xml to bb code
991  $any = "[^>]*";
992 
993  foreach (self::getBBMap() as $bb => $tag) {
994  $a_text = preg_replace('~<' . $tag . '[^>]*>~i', "[" . $bb . "]", $a_text);
995  $a_text = preg_replace('~</' . $tag . '>~i', "[/" . $bb . "]", $a_text);
996  $a_text = preg_replace('~<' . $tag . '/>~i', "[" . $bb . "][/" . $bb . "]", $a_text);
997  }
998 
999  // replace lists
1000  if ($a_replace_lists) {
1001  //echo "<br>".htmlentities($a_text);
1002  $a_text = ilPCParagraph::xml2outputReplaceLists($a_text);
1003  //echo "<br>".htmlentities($a_text);
1004  }
1005 
1006  // internal links
1007  while (preg_match('~<IntLink(' . $any . ')>~i', $a_text, $found)) {
1008  $found[0];
1009  $attribs = ilUtil::attribsToArray($found[1]);
1010  $target = explode("_", $attribs["Target"]);
1011  $target_id = $target[count($target) - 1];
1012  $inst_str = (!is_int(strpos($attribs["Target"], "__")))
1013  ? $inst_str = "inst=\"" . $target[1] . "\" "
1014  : $inst_str = "";
1015  switch ($attribs["Type"]) {
1016  case "PageObject":
1017  $tframestr = (!empty($attribs["TargetFrame"]))
1018  ? " target=\"" . $attribs["TargetFrame"] . "\""
1019  : "";
1020  $ancstr = (!empty($attribs["Anchor"]))
1021  ? ' anchor="' . $attribs["Anchor"] . '"'
1022  : "";
1023  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "page=\"" . $target_id . "\"$tframestr$ancstr]", $a_text);
1024  break;
1025 
1026  case "StructureObject":
1027  $tframestr = (!empty($attribs["TargetFrame"]))
1028  ? " target=\"" . $attribs["TargetFrame"] . "\""
1029  : "";
1030  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "chap=\"" . $target_id . "\"$tframestr]", $a_text);
1031  break;
1032 
1033  case "GlossaryItem":
1034  $tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1035  ? ""
1036  : " target=\"" . $attribs["TargetFrame"] . "\"";
1037  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "term=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1038  break;
1039 
1040  case "WikiPage":
1041  $tframestr = "";
1042  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "wpage=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1043  break;
1044 
1045  case "PortfolioPage":
1046  $tframestr = "";
1047  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "ppage=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1048  break;
1049 
1050  case "MediaObject":
1051  if (empty($attribs["TargetFrame"])) {
1052  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "media=\"" . $target_id . "\"/]", $a_text);
1053  } else {
1054  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln media=\"" . $target_id . "\"" .
1055  " target=\"" . $attribs["TargetFrame"] . "\"]", $a_text);
1056  }
1057  break;
1058 
1059  // Repository Item (using ref id)
1060  case "RepositoryItem":
1061  if ($inst_str == "") {
1063  } else {
1064  $rtype = $target[count($target) - 2];
1065  $target_type = $rtype;
1066  }
1067  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "$target_type=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1068  break;
1069 
1070  // Download File (not in repository, Object ID)
1071  case "File":
1072  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "dfile=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1073  break;
1074 
1075  // User
1076  case "User":
1077  include_once("./Services/User/classes/class.ilObjUser.php");
1078  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "user=\"" . ilObjUser::_lookupLogin($target_id) . "\"/]", $a_text);
1079  break;
1080 
1081  default:
1082  $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln]", $a_text);
1083  break;
1084  }
1085  }
1086  $a_text = str_replace("</IntLink>", "[/iln]", $a_text);
1087 
1088  // external links
1089  while (preg_match('~<ExtLink(' . $any . ')>~i', $a_text, $found)) {
1090  $found[0];
1091  $attribs = ilUtil::attribsToArray($found[1]);
1092  //$found[1] = str_replace("?", "\?", $found[1]);
1093  $tstr = "";
1094  if (in_array($attribs["TargetFrame"], array("FAQ", "Glossary", "Media"))) {
1095  $tstr = ' target="' . $attribs["TargetFrame"] . '"';
1096  }
1097  $a_text = str_replace("<ExtLink" . $found[1] . ">", "[xln url=\"" . $attribs["Href"] . "\"$tstr]", $a_text);
1098  }
1099  $a_text = str_replace("</ExtLink>", "[/xln]", $a_text);
1100 
1101  // anchor
1102  while (preg_match('~<Anchor(' . $any . '/)>~i', $a_text, $found)) {
1103  $found[0];
1104  $attribs = ilUtil::attribsToArray($found[1]);
1105  $a_text = str_replace("<Anchor" . $found[1] . ">", "[anc name=\"" . $attribs["Name"] . "\"][/anc]", $a_text);
1106  }
1107  while (preg_match('~<Anchor(' . $any . ')>~i', $a_text, $found)) {
1108  $found[0];
1109  $attribs = ilUtil::attribsToArray($found[1]);
1110  $a_text = str_replace("<Anchor" . $found[1] . ">", "[anc name=\"" . $attribs["Name"] . "\"]", $a_text);
1111  }
1112  $a_text = str_replace("</Anchor>", "[/anc]", $a_text);
1113 
1114  // marked text
1115  while (preg_match('~<Marked(' . $any . ')>~i', $a_text, $found)) {
1116  $found[0];
1117  $attribs = ilUtil::attribsToArray($found[1]);
1118  $a_text = str_replace("<Marked" . $found[1] . ">", "[marked class=\"" . $attribs["Class"] . "\"]", $a_text);
1119  }
1120  $a_text = str_replace("</Marked>", "[/marked]", $a_text);
1121 
1122  // br to linefeed
1123  if (!$a_wysiwyg) {
1124  $a_text = str_replace("<br />", "\n", $a_text);
1125  $a_text = str_replace("<br/>", "\n", $a_text);
1126  }
1127 
1128  if (!$a_wysiwyg) {
1129  // prevent curly brackets from being swallowed up by template engine
1130  $a_text = str_replace("{", "&#123;", $a_text);
1131  $a_text = str_replace("}", "&#125;", $a_text);
1132 
1133  // unmask html
1134  if ($unmask) {
1135  $a_text = str_replace("&lt;", "<", $a_text);
1136  $a_text = str_replace("&gt;", ">", $a_text);
1137  }
1138 
1139  // this is needed to allow html like <tag attribute="value">... in paragraphs
1140  $a_text = str_replace("&quot;", "\"", $a_text);
1141 
1142  // make ampersands in (enabled) html attributes work
1143  // e.g. <a href="foo.php?n=4&t=5">hhh</a>
1144  $a_text = str_replace("&amp;", "&", $a_text);
1145 
1146  // make &gt; and $lt; work to allow (disabled) html descriptions
1147  if ($unmask) {
1148  $a_text = str_replace("&lt;", "&amp;lt;", $a_text);
1149  $a_text = str_replace("&gt;", "&amp;gt;", $a_text);
1150  }
1151  }
1152  return $a_text;
1153  //return str_replace("<br />", chr(13).chr(10), $a_text);
1154  }
static _lookupLogin($a_user_id)
lookup login
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static xml2outputReplaceLists($a_text)
Replaces with *.
$target_type
Definition: goto.php:48
$target_id
Definition: goto.php:49
static _lookupType($a_id, $a_reference=false)
lookup object type
$target
Definition: test.php:19
if(function_exists('posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
Definition: cron.php:35
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ xml2outputReplaceLists()

static ilPCParagraph::xml2outputReplaceLists (   $a_text)
static

Replaces

with *.

Parameters
string$a_textxml from db
Returns
string string containing * for lists

Definition at line 875 of file class.ilPCParagraph.php.

References $i, $li, $list, $text, and segmentString().

Referenced by xml2output().

876  {
877  $segments = ilPCParagraph::segmentString($a_text, array("<SimpleBulletList>", "</SimpleBulletList>",
878  "</SimpleListItem>", "<SimpleListItem>", "<SimpleListItem/>", "<SimpleNumberedList>", "</SimpleNumberedList>"));
879 
880  $current_list = array();
881  $text = "";
882  for ($i = 0; $i <= count($segments); $i++) {
883  if ($segments[$i] == "<SimpleBulletList>") {
884  if (count($current_list) == 0) {
885  $list_start = true;
886  }
887  array_push($current_list, "*");
888  $li = false;
889  } elseif ($segments[$i] == "<SimpleNumberedList>") {
890  if (count($current_list) == 0) {
891  $list_start = true;
892  }
893  array_push($current_list, "#");
894  $li = false;
895  } elseif ($segments[$i] == "</SimpleBulletList>") {
896  array_pop($current_list);
897  $li = false;
898  } elseif ($segments[$i] == "</SimpleNumberedList>") {
899  array_pop($current_list);
900  $li = false;
901  } elseif ($segments[$i] == "<SimpleListItem>") {
902  $li = true;
903  } elseif ($segments[$i] == "</SimpleListItem>") {
904  $li = false;
905  } elseif ($segments[$i] == "<SimpleListItem/>") {
906  if ($list_start) {
907  $text .= "<br />";
908  $list_start = false;
909  }
910  foreach ($current_list as $list) {
911  $text .= $list;
912  }
913  $text .= "<br />";
914  $li = false;
915  } else {
916  if ($li) {
917  if ($list_start) {
918  $text .= "<br />";
919  $list_start = false;
920  }
921  foreach ($current_list as $list) {
922  $text .= $list;
923  }
924  }
925  $text .= $segments[$i];
926  if ($li) {
927  $text .= "<br />";
928  }
929  $li = false;
930  }
931  }
932 
933  // remove trailing <br />, if text ends with list
934  if ($segments[count($segments) - 1] == "</SimpleBulletList>" ||
935  $segments[count($segments) - 1] == "</SimpleNumberedList>" &&
936  substr($text, strlen($text) - 6) == "<br />") {
937  $text = substr($text, 0, strlen($text) - 6);
938  }
939 
940  return $text;
941  }
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
static segmentString($a_haystack, $a_needles)
Segments a string into an array at each position of a substring.
$li
Definition: langwiz.php:233
$text
Definition: errorreport.php:18
$i
Definition: disco.tpl.php:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $bb_tags

ilPCParagraph::$bb_tags
staticprotected
Initial value:
= array(
"com" => "Comment",
"emp" => "Emph",
"str" => "Strong",
"fn" => "Footnote",
"code" => "Code",
"acc" => "Accent",
"imp" => "Important",
"kw" => "Keyw",
"sub" => "Sub",
"sup" => "Sup",
"quot" => "Quotation",
)

Definition at line 26 of file class.ilPCParagraph.php.

◆ $dom

ilPCParagraph::$dom

Definition at line 23 of file class.ilPCParagraph.php.

Referenced by ilPCSourceCode\modifyPageContentPostXsl().

◆ $par_node

ilPCParagraph::$par_node

Definition at line 24 of file class.ilPCParagraph.php.

◆ $user

ilPCParagraph::$user
protected

Definition at line 21 of file class.ilPCParagraph.php.

Referenced by saveJS().


The documentation for this class was generated from the following file: