43

Édition des campagnes

Code

Créez le fichier campaignedit.php dans le dossier actions avec le contenu suivant :

  1. function campaignedit($lang, $arglist=false) {
  2.     global $supported_languages;
  3.  
  4.     $campaign=$page=false;
  5.  
  6.     if (is_array($arglist)) {
  7.         if (isset($arglist[0])) {
  8.             $campaign=$arglist[0];
  9.         }
  10.         if (isset($arglist[1])) {
  11.             $page=$arglist[1];
  12.         }
  13.     }
  14.  
  15.     $clang=false;
  16.     foreach ($supported_languages as $slang) {
  17.         if (isset($_POST[$slang])) {
  18.             $clang=$slang;
  19.             break;
  20.         }
  21.     }
  22.     if (!$clang) {
  23.         if (isset($_POST['clang'])) {
  24.             $clang = $_POST['clang'];
  25.         }
  26.         else if (isset($_GET['clang'])) {
  27.             $clang = $_GET['clang'];
  28.         }
  29.         else {
  30.             $clang=$lang;
  31.         }
  32.         if (!in_array($clang, $supported_languages)) {
  33.             return run('error/notfound', $lang);
  34.         }
  35.     }
  36.  
  37.     if (!$campaign) {
  38.         return run('error/notfound', $lang);
  39.     }
  40.  
  41.     if (!$page) {
  42.         require_once 'actions/campaigneditsummary.php';
  43.  
  44.         return campaigneditsummary($lang, $clang, $campaign);
  45.     }
  46.  
  47.     require_once 'actions/campaigneditpage.php';
  48.  
  49.     return campaigneditpage($lang, $clang, $campaign, $page);
  50. }

Créez le fichier campaigneditsummary.php dans le dossier actions avec le contenu suivant :

  1. require_once 'readarg.php';
  2. require_once 'strtofname.php';
  3. require_once 'userhasrole.php';
  4. require_once 'userprofile.php';
  5. require_once 'models/thread.inc';
  6.  
  7. function campaigneditsummary($lang, $clang, $thread) {
  8.     global $with_toolbar;
  9.  
  10.     $user_id=user_profile('id');
  11.  
  12.     if (!$user_id) {
  13.         return run('error/unauthorized', $lang);
  14.     }
  15.  
  16.     $thread_id = thread_id($thread);
  17.     if (!$thread_id) {
  18.         return run('error/notfound', $lang);
  19.     }
  20.  
  21.     $r = thread_get($lang, $thread_id);
  22.     if (!$r) {
  23.         return run('error/notfound', $lang);
  24.     }
  25.     extract($r); /* thread_user_id thread_type thread_title */
  26.  
  27.     if ($thread_type != 'campaign') {
  28.         return run('error/notfound', $lang);
  29.     }
  30.  
  31.     if ($thread_user_id != $user_id and !user_has_role('administrator')) {
  32.         return run('error/notfound', $lang);
  33.     }
  34.  
  35.     $confirmed=false;
  36.  
  37.     $action='init';
  38.     if (isset($_POST['thread_reorder'])) {
  39.         $action='reorder';
  40.     }
  41.     else if (isset($_POST['node_create'])) {
  42.         $action='create';
  43.     }
  44.     else if (isset($_POST['node_copy'])) {
  45.         $action='copy';
  46.     }
  47.     else if (isset($_POST['node_delete'])) {
  48.         $action='delete';
  49.     }
  50.     else if (isset($_POST['node_confirmdelete'])) {
  51.         $action='delete';
  52.         $confirmed=true;
  53.     }
  54.  
  55.     $new_node_name=$new_node_title=$new_node_number=false;
  56.     $old_node_number=false;
  57.  
  58.     $p=false;
  59.  
  60.     switch($action) {
  61.         case 'create':
  62.         case 'delete':
  63.         case 'copy':
  64.         case 'reorder':
  65.             if (isset($_POST['new_node_title'])) {
  66.                 $new_node_title=readarg($_POST['new_node_title']);
  67.                 $new_node_name = strtofname($new_node_title);
  68.             }
  69.             if (isset($_POST['new_node_number'])) {
  70.                 $new_node_number=readarg($_POST['new_node_number']);
  71.             }
  72.             if (isset($_POST['old_node_number'])) {
  73.                 $old_node_number=readarg($_POST['old_node_number']);
  74.             }
  75.             if (isset($_POST['p'])) {
  76.                 $p=$_POST['p']; // DON'T readarg!
  77.             }
  78.             break;
  79.         default:
  80.             break;
  81.     }
  82.  
  83.     $thread_contents = array();
  84.  
  85.     $r = thread_get_contents($clang, $thread_id);   /* node_id node_number node_ignored node_name node_title node_cloud thread_image */
  86.  
  87.     if (!$r or count($r) != count($p)) {
  88.         $p = false;
  89.     }
  90.  
  91.     if ($r) {
  92.         $pos=1;
  93.         $thread_url = url('campaignedit', $lang) . '/' . $thread_id;
  94.         foreach ($r as $c) {
  95.             $c['node_url'] = $thread_url  . '/' . $c['node_id'];
  96.             $c['pos'] = $p ? $p[$pos] : $pos;
  97.             $thread_contents[$pos] = $c;
  98.             $pos++;
  99.         }
  100.     }
  101.  
  102.     $missing_new_node_title=false;
  103.     $bad_new_node_title=false;
  104.     $bad_new_node_number=false;
  105.  
  106.     $missing_old_node_number=false;
  107.     $bad_old_node_number=false;
  108.  
  109.     switch($action) {
  110.         case 'copy':
  111.         case 'create':
  112.             if (!$new_node_title) {
  113.                 $missing_new_node_title = true;
  114.             }
  115.             else if (!$new_node_name) {
  116.                 $bad_new_node_title = true;
  117.             }
  118.             else if (!preg_match('#^\w+(-\w+)*$#', $new_node_name)) {
  119.                 $bad_new_node_title = true;
  120.             }
  121.             if (!$new_node_number) {
  122.                 $new_node_number = false;
  123.             }
  124.             else if (!is_numeric($new_node_number)) {
  125.                 $bad_new_node_number = true;
  126.             }
  127.             else if ($new_node_number < 1 or $new_node_number > count($thread_contents) + 1) {
  128.                 $bad_new_node_number = true;
  129.             }
  130.             break;
  131.  
  132.         default:
  133.             break;
  134.     }
  135.  
  136.     switch($action) {
  137.         case 'copy':
  138.         case 'delete':
  139.             if (!$old_node_number) {
  140.                 $missing_old_node_number = true;
  141.             }
  142.             else if (!is_numeric($old_node_number)) {
  143.                 $bad_old_node_number = true;
  144.             }
  145.             else if ($old_node_number < 1 or $old_node_number > count($thread_contents)) {
  146.                 $bad_old_node_number = true;
  147.             }
  148.             break;
  149.  
  150.         default:
  151.             break;
  152.     }
  153.  
  154.     $confirm_delete_node=false;
  155.  
  156.     switch($action) {
  157.         case 'create':
  158.         case 'copy':
  159.             if ($missing_new_node_title or $bad_new_node_title or $bad_new_node_number) {
  160.                 break;
  161.             }
  162.  
  163.             if ($action == 'copy') {
  164.                 if ($missing_old_node_number or $bad_old_node_number) {
  165.                     break;
  166.                 }
  167.  
  168.                 $node_id = $thread_contents[$old_node_number]['node_id'];
  169.  
  170.                 $np = thread_copy_node($clang, $thread_user_id, $thread_id, $node_id, $new_node_name, $new_node_title, $new_node_number);
  171.             }
  172.             else {
  173.                 $np = thread_create_node($clang, $thread_user_id, $thread_id, $new_node_name, $new_node_title, $new_node_number);
  174.             }
  175.  
  176.             if (!$np) {
  177.                 break;
  178.             }
  179.  
  180.             extract($np);   /* node_id node_number */
  181.             $node_ignored = false;
  182.             $node_title = $new_node_title;
  183.             $node_url = url('campaignedit', $lang) . '/' . $thread_id . '/' . $node_id;
  184.             $pos = $node_number;
  185.  
  186.             if ($thread_contents) {
  187.                 foreach ($thread_contents as &$c) {
  188.                     if ($c['node_number'] >= $pos) {
  189.                         $c['node_number']++;
  190.                     }
  191.                     if ($c['pos'] >= $pos) {
  192.                         $c['pos']++;
  193.                     }
  194.                 }
  195.                 array_splice($thread_contents, $pos-1, 0, array(compact('node_id', 'node_title', 'node_number', 'node_ignored', 'node_url', 'pos')));
  196.             }
  197.             else {
  198.                 $pos=1;
  199.                 $thread_contents=array($pos => compact('node_id', 'node_title', 'node_number', 'node_ignored', 'node_url', 'pos'));
  200.             }
  201.  
  202.             $new_node_name=$new_node_title=false;
  203.             $new_node_number=$node_number+1;
  204.  
  205.             $old_node_number = false;
  206.  
  207.             break;
  208.  
  209.         case 'delete':
  210.             if ($missing_old_node_number or $bad_old_node_number) {
  211.                 break;
  212.             }
  213.  
  214.             if (!$confirmed) {
  215.                 $confirm_delete_node=true;
  216.                 break;
  217.             }
  218.  
  219.             $node_id = $thread_contents[$old_node_number]['node_id'];
  220.  
  221.             $r = thread_delete_node($thread_id, $node_id);
  222.  
  223.             if (!$r) {
  224.                 break;
  225.             }
  226.  
  227.             unset($thread_contents[$old_node_number]);
  228.             $thread_contents = array_values($thread_contents);
  229.  
  230.             foreach ($thread_contents as &$c) {
  231.                 if ($c['node_number'] >= $old_node_number) {
  232.                     $c['node_number']--;
  233.                 }
  234.                 if ($c['pos'] >= $old_node_number) {
  235.                     $c['pos']--;
  236.                 }
  237.             }
  238.  
  239.             $old_node_number = false;
  240.  
  241.             break;
  242.  
  243.         case 'reorder':
  244.             if (!$p) {
  245.                 break;
  246.             }
  247.  
  248.             $neworder=range(1, count($p));
  249.             array_multisort($p, SORT_NUMERIC, $neworder);
  250.  
  251.             $number=1;
  252.             $nc=array();
  253.             foreach ($neworder as $i) {
  254.                 $c = &$thread_contents[$i];
  255.                 if ($c['node_number'] != $number) {
  256.                     thread_set_node_number($thread_id, $c['node_id'], $number);
  257.                     $c['node_number'] = $number;
  258.                 }
  259.                 $c['pos']=$number;
  260.  
  261.                 $nc[$number++] = $c;
  262.             }
  263.             $thread_contents = $nc;
  264.  
  265.             break;
  266.  
  267.         default:
  268.             break;
  269.     }
  270.  
  271.     head('title', $thread_title ? $thread_title : $thread_id);
  272.     head('description', false);
  273.     head('keywords', false);
  274.     head('robots', 'noindex, nofollow');
  275.  
  276.     $viewsms=url('campaign', $clang) . '/'. $thread_id . '?' . 'slang=' . $lang;
  277.  
  278.     $admin=true;
  279.     $banner = build('banner', $lang, $with_toolbar ? false : compact('viewsms', 'admin'));
  280.     $toolbar = $with_toolbar ? build('toolbar', $lang, compact('viewsms', 'admin')) : false;
  281.  
  282.     $inlanguages=view('inlanguages', false, compact('clang'));
  283.  
  284.     $errors = compact('missing_new_node_title', 'bad_new_node_title', 'bad_new_node_number', 'missing_old_node_number', 'bad_old_node_number');
  285.  
  286.     $content = view('campaigneditsummary', $lang, compact('clang', 'inlanguages', 'thread_title', 'thread_id', 'thread_contents', 'new_node_name', 'new_node_title', 'new_node_number', 'old_node_number', 'confirm_delete_node', 'errors'));
  287.  
  288.     $output = layout('editing', compact('toolbar', 'banner', 'content'));
  289.  
  290.     return $output;
  291. }

Créez la vue campaigneditsummary en français et en anglais dans les fichiers views/fr/campaignsummary.phtml et views/en/campaignsummary.phtml :

  1. <?php extract($errors); ?>
  2. <h3<?php if ($thread_title): ?> title="<?php echo $thread_id; ?>"<?php endif; ?>><?php echo htmlspecialchars($thread_title ? $thread_title : $thread_id , ENT_COMPAT, 'UTF-8'); ?></h3>
  3. <form method="post" class="compact">
  4. <input name="clang" type="hidden" value="<?php echo $clang; ?>" />
  5. <p>
  6. <?php echo $inlanguages; ?>
  7. </p>
  8. <p>
  9. <input class="submit submit_add" id="node_create" name="node_create" type="submit" value="Ajouter" />
  10. la campagne
  11. <input id="new_node_title" name="new_node_title" type="text" size="50" maxlength="100" value="<?php echo htmlspecialchars($new_node_title, ENT_COMPAT, 'UTF-8'); ?>" title="Titre" onkeypress="return focusonenter(event, 'new_node_number')"/>
  12. <span class="nowrap">
  13. #
  14. <input id="new_node_number" name="new_node_number" type="text" size="2" maxlength="3" value="<?php echo htmlspecialchars($new_node_number, ENT_COMPAT, 'UTF-8'); ?>" title="Numéro" onkeypress="return submitonenter(event, 'node_create')"/>
  15. </span>
  16. </p>
  17. <?php if ($thread_contents): ?>
  18. <div id="threadcontent">
  19. <fieldset class="block">
  20. <legend>Titres</legend>
  21. <table id="nodelist">
  22. <tbody>
  23. <?php
  24. $i=1;
  25. $maxlen=strlen(count($thread_contents))+1;
  26. foreach ($thread_contents as $c) {
  27.     extract($c);    /* pos, node_id node_title, node_url, node_number, node_ignored */
  28.     $node_url .= '?' . 'clang=' . $clang;
  29. ?>
  30. <tr>
  31. <td><input name="p[<?php echo $i; ?>]" type="text" size="2" maxlength="<?php echo $maxlen; ?>" value="<?php echo $pos; ?>" /></td>
  32. <td><a href="<?php echo $node_url; ?>" title="<?php echo $node_id; ?>"><?php echo $node_title ? htmlspecialchars($node_title, ENT_COMPAT, 'UTF-8') : $node_id; ?></a></td>
  33. </tr>
  34. <?php
  35.     $i++;
  36. }
  37. ?>
  38. </tbody>
  39. </table>
  40. </fieldset>
  41. <p>
  42. <input class="submit submit_sort" id="thread_reorder" name="thread_reorder" type="submit" value="Trier" />
  43. la liste ou
  44. <input class="submit submit_copy" id="node_copy" name="node_copy" type="submit" value="Copier" />
  45. ou
  46. <input class="submit submit_delete" id="node_delete" name="node_delete" type="submit" value="Supprimer" />
  47. la campagne
  48. <span class="nowrap">
  49. #
  50. <input id="old_node_number" name="old_node_number" type="text" size="2" maxlength="3" value="<?php echo htmlspecialchars($old_node_number, ENT_COMPAT, 'UTF-8'); ?>" title="Numéro" onkeypress="return submitonenter(event, 'node_delete')"/>
  51. </span>
  52. <?php if ($confirm_delete_node): ?>
  53. <input class="submit submit_confirm" id="node_confirmdelete" name="node_confirmdelete" type="submit" value="Confirmer" />
  54. <?php endif; ?>
  55. </p>
  56. </div>
  57. <?php endif; ?>
  58. </form>
  59. <?php
  60. $focus=false;
  61. if ($missing_new_node_title or $bad_new_node_title) {
  62.     $focus='#new_node_title';
  63. }
  64. else if ($bad_new_node_number) {
  65.     $focus='#new_node_number';
  66. }
  67. else if ($missing_old_node_number or $bad_old_node_number) {
  68.     $focus='#old_node_number';
  69. }
  70. else if ($confirm_delete_node) {
  71.     $focus='#old_node_number';
  72. }
  73. ?>
  74. <?php if ($focus): ?>
  75. <?php head('javascript', 'jquery.scrollTo', 'screen'); ?>
  76. <script>
  77. $(function() {$('<?php echo $focus; ?>').focus(); $.scrollTo('<?php echo $focus; ?>', {offset: -200}); });
  78. </script>
  79. <?php endif; ?>
  1. <?php extract($errors); ?>
  2. <h3<?php if ($thread_title): ?> title="<?php echo $thread_id; ?>"<?php endif; ?>><?php echo htmlspecialchars($thread_title ? $thread_title : $thread_id , ENT_COMPAT, 'UTF-8'); ?></h3>
  3. <form method="post" class="compact">
  4. <input name="clang" type="hidden" value="<?php echo $clang; ?>" />
  5. <p>
  6. <?php echo $inlanguages; ?>
  7. </p>
  8. <p>
  9. <input class="submit submit_add" id="node_create" name="node_create" type="submit" value="Add" />
  10. campaign
  11. <input id="new_node_title" name="new_node_title" type="text" size="50" maxlength="100" value="<?php echo htmlspecialchars($new_node_title, ENT_COMPAT, 'UTF-8'); ?>" title="Title" onkeypress="return focusonenter(event, 'new_node_number')"/>
  12. <span class="nowrap">
  13. #
  14. <input id="new_node_number" name="new_node_number" type="text" size="2" maxlength="3" value="<?php echo htmlspecialchars($new_node_number, ENT_COMPAT, 'UTF-8'); ?>" title="Number" onkeypress="return submitonenter(event, 'node_create')"/>
  15. </span>
  16. </p>
  17. <?php if ($thread_contents): ?>
  18. <div id="threadcontent">
  19. <fieldset class="block">
  20. <legend>Titles</legend>
  21. <table id="nodelist">
  22. <tbody>
  23. <?php
  24. $i=1;
  25. $maxlen=strlen(count($thread_contents))+1;
  26. foreach ($thread_contents as $c) {
  27.     extract($c);    /* pos, node_id node_title, node_url, node_number, node_ignored */
  28.     $node_url .= '?' . 'clang=' . $clang;
  29. ?>
  30. <tr>
  31. <td><input name="p[<?php echo $i; ?>]" type="text" size="2" maxlength="<?php echo $maxlen; ?>" value="<?php echo $pos; ?>" /></td>
  32. <td><a href="<?php echo $node_url; ?>" title="<?php echo $node_id; ?>"><?php echo $node_title ? htmlspecialchars($node_title, ENT_COMPAT, 'UTF-8') : $node_id; ?></a></td>
  33. </tr>
  34. <?php
  35.     $i++;
  36. }
  37. ?>
  38. </tbody>
  39. </table>
  40. </fieldset>
  41. <p>
  42. <input class="submit submit_sort" id="thread_reorder" name="thread_reorder" type="submit" value="Sort" />
  43. list or
  44. <input class="submit submit_copy" id="node_copy" name="node_copy" type="submit" value="Copy" />
  45. or
  46. <input class="submit submit_delete" id="node_delete" name="node_delete" type="submit" value="Delete" />
  47. campaign
  48. <span class="nowrap">
  49. #
  50. <input id="old_node_number" name="old_node_number" type="text" size="2" maxlength="3" value="<?php echo htmlspecialchars($old_node_number, ENT_COMPAT, 'UTF-8'); ?>" title="Number" onkeypress="return submitonenter(event, 'node_delete')"/>
  51. </span>
  52. <?php if ($confirm_delete_node): ?>
  53. <input class="submit submit_confirm" id="node_confirmdelete" name="node_confirmdelete" type="submit" value="Confirm" />
  54. <?php endif; ?>
  55. </p>
  56. </div>
  57. <?php endif; ?>
  58. </form>
  59. <?php
  60. $focus=false;
  61. if ($missing_new_node_title or $bad_new_node_title) {
  62.     $focus='#new_node_title';
  63. }
  64. else if ($bad_new_node_number) {
  65.     $focus='#new_node_number';
  66. }
  67. else if ($missing_old_node_number or $bad_old_node_number) {
  68.     $focus='#old_node_number';
  69. }
  70. else if ($confirm_delete_node) {
  71.     $focus='#old_node_number';
  72. }
  73. ?>
  74. <?php if ($focus): ?>
  75. <?php head('javascript', 'jquery.scrollTo', 'screen'); ?>
  76. <script>
  77. $(function() {$('<?php echo $focus; ?>').focus(); $.scrollTo('<?php echo $focus; ?>', {offset: -200}); });
  78. </script>
  79. <?php endif; ?>

Créez le fichier campaigneditpage.php dans le dossier actions avec le contenu suivant :

  1. require_once 'userhasrole.php';
  2. require_once 'userprofile.php';
  3. require_once 'models/thread.inc';
  4.  
  5. function campaigneditpage($lang, $clang, $thread, $node) {
  6.     global $with_toolbar, $supported_contents, $limited_contents;
  7.  
  8.     $user_id=user_profile('id');
  9.  
  10.     if (!$user_id) {
  11.         return run('error/unauthorized', $lang);
  12.     }
  13.  
  14.     $thread_id = thread_id($thread);
  15.     if (!$thread_id) {
  16.         return run('error/notfound', $lang);
  17.     }
  18.  
  19.     $node_id = thread_node_id($thread_id, $node, $clang);
  20.     if (!$node_id) {
  21.         return run('error/notfound', $lang);
  22.     }
  23.  
  24.     $r = thread_get($clang, $thread_id);
  25.     if (!$r) {
  26.         return run('error/notfound', $lang);
  27.     }
  28.     extract($r); /* thread_user_id thread_type thread_name thread_title thread_abstract thread_cloud */
  29.  
  30.     if ($thread_type != 'campaign') {
  31.         return run('error/notfound', $lang);
  32.     }
  33.  
  34.     if ($thread_user_id != $user_id and !user_has_role('administrator')) {
  35.         return run('error/notfound', $lang);
  36.     }
  37.  
  38.     $content_types=$limited_contents['campaign'];
  39.     $node_editor = build('nodeeditor', $lang, $clang, $node_id, $content_types);
  40.  
  41.     $node_name=$node_title=false;
  42.     $r = thread_get_node($clang, $thread_id, $node_id);
  43.     if ($r) {
  44.         extract($r); /* node_name node_title */
  45.     }
  46.  
  47.     head('title', $node_title ? $node_title : $node_id);
  48.     head('description', false);
  49.     head('keywords', false);
  50.     head('robots', 'noindex, nofollow');
  51.  
  52.     $banner=$toolbar=false;
  53.  
  54.     $headline_text=translate('campaignsummary:title', $lang);
  55.     $headline_url=url('campaignedit', $lang) . '/' . $thread_id . '?' . 'clang=' . $clang;
  56.     $headline = compact('headline_text', 'headline_url');
  57.     $viewsms=url('campaign', $clang) . '/'. $thread_id . '/' . $node_id;
  58.  
  59.     $banner = build('banner', $lang, $with_toolbar ? compact('headline') : compact('headline', 'viewsms'));
  60.     $toolbar = $with_toolbar ? build('toolbar', $lang, compact('viewsms')) : false;
  61.  
  62.     $prev_node_label=$prev_node_url=false;
  63.     $r=thread_node_prev($clang, $thread_id, $node_id);
  64.     if ($r) {
  65.         extract($r);
  66.         $prev_node_label = $prev_node_title ? $prev_node_title : $prev_node_id;
  67.         $prev_node_url=url('campaignedit', $lang) . '/' . $thread_id . '/'. $prev_node_id . '?' . 'clang=' . $clang;
  68.     }
  69.  
  70.     $next_node_label=$next_node_url=false;
  71.     $r=thread_node_next($clang, $thread_id, $node_id);
  72.     if ($r) {
  73.         extract($r);
  74.         $next_node_label = $next_node_title ? $next_node_title : $next_node_id;
  75.         $next_node_url=url('campaignedit', $lang) . '/' . $thread_id . '/'. $next_node_id . '?' . 'clang=' . $clang;
  76.     }
  77.  
  78.     $title = view('headline', false, $headline);
  79.     $sidebar = view('sidebar', false, compact('title'));
  80.  
  81.     $content = view('campaigneditpage', $lang, compact('node_editor', 'node_id', 'node_title', 'prev_node_url', 'prev_node_label', 'next_node_url', 'next_node_label'));
  82.  
  83.     $output = layout('editing', compact('toolbar', 'banner', 'content', 'sidebar'));
  84.  
  85.     return $output;
  86. }

Créez la vue campaigneditpage en français et en anglais dans les fichiers views/fr/campaigneditpage.phtml et views/en/campaigneditpage.phtml :

  1. <h3<?php if ($node_title): ?> title="<?php echo $node_id; ?>"<?php endif; ?>><?php echo htmlspecialchars($node_title ? $node_title : $node_id , ENT_COMPAT, 'UTF-8'); ?></h3>
  2. <?php if ($next_node_url or $prev_node_url): ?>
  3. <p class="navigation menu">
  4. <?php if ($prev_node_url): ?>
  5. <a class="previous" href="<?php echo $prev_node_url; ?>"><span>&lt;</span></a>
  6. <a href="<?php echo $prev_node_url; ?>"><?php echo htmlspecialchars($prev_node_label, ENT_COMPAT, 'UTF-8'); ?></a>
  7. <?php endif; ?>
  8. <?php if ($next_node_url and $prev_node_url): ?>
  9. &nbsp;|&nbsp;
  10. <?php endif; ?>
  11. <?php if ($next_node_url): ?>
  12. <a href="<?php echo $next_node_url; ?>"><?php echo htmlspecialchars($next_node_label, ENT_COMPAT, 'UTF-8'); ?></a>
  13. <a class="next" href="<?php echo $next_node_url; ?>"><span>&gt;</span></a>
  14. <?php endif; ?>
  15. </p>
  16. <?php endif; ?>
  17. <?php echo $node_editor; ?>
  1. <h3<?php if ($node_title): ?> title="<?php echo $node_id; ?>"<?php endif; ?>><?php echo htmlspecialchars($node_title ? $node_title : $node_id , ENT_COMPAT, 'UTF-8'); ?></h3>
  2. <?php if ($next_node_url or $prev_node_url): ?>
  3. <p class="navigation menu">
  4. <?php if ($prev_node_url): ?>
  5. <a class="previous" href="<?php echo $prev_node_url; ?>"><span>&lt;</span></a>
  6. <a href="<?php echo $prev_node_url; ?>"><?php echo htmlspecialchars($prev_node_label, ENT_COMPAT, 'UTF-8'); ?></a>
  7. <?php endif; ?>
  8. <?php if ($next_node_url and $prev_node_url): ?>
  9. &nbsp;|&nbsp;
  10. <?php endif; ?>
  11. <?php if ($next_node_url): ?>
  12. <a href="<?php echo $next_node_url; ?>"><?php echo htmlspecialchars($next_node_label, ENT_COMPAT, 'UTF-8'); ?></a>
  13. <a class="next" href="<?php echo $next_node_url; ?>"><span>&gt;</span></a>
  14. <?php endif; ?>
  15. </p>
  16. <?php endif; ?>
  17. <?php echo $node_editor; ?>

Créez l'URL pour l'action campaignedit en français et en anglais dans le fichier aliases.inc :

  1.         'edition/campagne' => 'campaignedit',
  1.         'edit/campaign' => 'campaignedit',

Éditez le fichier actions/campaignsummary.php :

  1.     global $system_languages, $with_toolbar;
  1.     $slang=false;
  2.     if (isset($_GET['slang'])) {
  3.         $slang = $_GET['slang'];
  4.     }
  5.     else {
  6.         $slang=$lang;
  7.     }
  8.     if (!in_array($slang, $system_languages)) {
  9.         return run('error/notfound', $lang);
  10.     }
  1.     $editsms=url('campaignedit', $slang) . '/'. $campaign_id . '?' . 'clang=' . $lang;
  2.  
  3.     $banner = build('banner', $lang, $with_toolbar ? compact('headline', 'search') : compact('headline', 'search', 'editsms'));
  4.     $toolbar = $with_toolbar ? build('toolbar', $lang, compact('editsms')) : false;

Éditez le fichier actions/campaignpage.php :

  1.     global $system_languages, $with_toolbar;
  1.     $slang=false;
  2.     if (isset($_GET['slang'])) {
  3.         $slang = $_GET['slang'];
  4.     }
  5.     else {
  6.         $slang=$lang;
  7.     }
  8.     if (!in_array($slang, $system_languages)) {
  9.         return run('error/notfound', $lang);
  10.     }
  1.  
  2.     $banner = build('banner', $lang, $with_toolbar ? compact('headline', 'search') : compact('headline', 'search', 'editsms'));
  3.     $toolbar = $with_toolbar ? build('toolbar', $lang, compact('editsms')) : false;

Éditez le fichier blocks/banner.php :

  1.     $is_client = user_has_role('client');
  1.                 case 'editsms':
  2.                     if ($param) {
  3.                         if ($is_client or $is_admin) {
  4.                             $edit_page=$param;
  5.                         }
  6.                     }
  7.                     break;
  8.                 case 'viewsms':
  9.                     if ($param) {
  10.                         if ($is_client or $is_admin) {
  11.                             $view_page=$param;
  12.                         }
  13.                     }
  14.                     break;

Éditez le fichier blocks/toolbar.php :

  1.     $is_client = user_has_role('client');
  1.                 case 'editsms':
  2.                     if ($param) {
  3.                         if ($is_client or $is_admin) {
  4.                             $edit_page=$param;
  5.                         }
  6.                     }
  7.                     break;
  8.                 case 'viewsms':
  9.                     if ($param) {
  10.                         if ($is_client or $is_admin) {
  11.                             $view_page=$param;
  12.                         }
  13.                     }
  14.                     break;
Test

Connectez-vous en tant que client, e.g. barfoo.

Cliquez sur le grand téléphone pour afficher la liste des campagnes.

BarFoo

  1. Le moteur web

Cliquez sur le clavier pour passer en mode édition.

BarFoo

la campagne #

Titres
Le moteur web

la liste ou ou la campagne #

Appuyez sur le drapeau pour afficher la liste des campagnes en anglais.

Ajoutez une campagne appelée The web engine.

Entrez First promotional campaign of iZend for software editors comme extrait et les mots clés iZend web engine dans le nuage. Appuyez sur Éditer.

Ajoutez un contenu du type SMS.

Entrez Create your multimedia website in a few minutes with iZend - The web engine: https://www.izend.org for the text of the SMS.

Git
  1. /izendsms.com
    1. actions
      1. campaignedit.php
      2. campaigneditpage.php
      3. campaigneditsummary.php
      4. campaignpage.php
      5. campaignsummary.php
    2. blocks
      1. banner.php
      2. toolbar.php
    3. includes
      1. aliases.inc
    4. views
      1. en
        1. campaigneditpage.phtml
        2. campaigneditsummary.phtml
      2. fr
        1. campaigneditpage.phtml
        2. campaigneditsummary.phtml

Commitez cette version :

$ git status
$ git add actions blocks/toolbar.php views includes
$ git commit -m'Adds editing campaigns'

Fil d'une campagne, Spécialisation de l'éditeur

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].