Jump to content

Orkun

Members
  • Posts

    295
  • Joined

  • Last visited

Everything posted by Orkun

  1. Hi Guys I'am trying to output the localized month names in french, german and italian for my newsletter. At the moment my default language is french. This code outputs everytime time the french month name: foreach ($languages->find("name!=en") as $language) { $user->language = $languages->get($language->name); switch ($language->name) { case 'default': $date = strftime("%d. %B %G", $page->date). "-FR/DEFAULT"; break; case 'de': $date = strftime("%d. %B %G", $page->date). "-DE"; break; case 'it': $date = strftime("%d. %B %G", $page->date). "-IT"; break; } echo $date."<br />"; } output looks like this: 31. mars 2016-FR/DEFAULT 31. mars 2016-DE 31. mars 2016-IT I also have set the right locale inside every language translation file. How can I fix this, that it looks like this: 31. mars 2016-FR/DEFAULT 31. März 2016-DE 31. marzo 2016-IT
  2. Hi Guys I have a question about the ProcessList.module in /wire/modules/. When I add a summary field to the admin template, the module takes the value of the summary field and outputs it, when it doesn't find a summary field it takes the summary value of the getModuleInfo(). How can I alter the behavior of ProcessList::render with Hooks so that I can also use another field than summary?
  3. Hi @BitPoet Would it be possible to wrap up this whole process in a Fieldtype module? Something like "FieldtypeCrypt" which has a different configuration options like a button called "Created All Key Components" which would do this process: 1. Create a asymmetric Key pair 2. Exctract the private Key and save it as a PEM-File under site/modules/FieldtypeCrypt/Keys/privatekey.pem 3. Extract the public Key and save it as a PEM-File under site/modules/FieldtypeCrypt/Keys/publickey.pem 4. Create the masterkey and encrypt it with the publickey and save the result as file under /site/modules/FieldtypeCrypt/Keys/masterkey.pem and so on... It's the first time I will be make a Fieldtype module so I have to read me in, in that Topic. I've found this thread where Kongondo mentions some other helpful threads for creating fieldtype modules. When I want to use the fieldtype in the frontend forms so I have to also make a Inputfield for that, am I right? Greetings Nukro
  4. Hi Guys I really like the Form API of Processwire, it is really flexible. You can build from a simple contact form until to a complex registration form in a short time without using HTML. The only "flaw" which I encountered is. The bigger the form is, the bigger the code gets and this can be frustrating when you are building forms with more than 20 Inputfields. The code gets longer and readability gets lost over the time since it is a (almost)self repeating process of "codeblocks" where the structure is almost always the same. So I decided to write up a simple class to "minify" the code when building forms with the form API. How does the class work? It is a very simply class where you create a new (didn't know how to name the class ^^)ProcessForm Object and get the InputfieldForm Object with the getFormObject() function. Now you can call the addInputfield() function to create any kind(not are all supported, only the simple ones) of Inputfield. And at the end you can render the ProcessForm object which basically calls the render() function of the InputfieldForm class. <?php $form = new ProcessForm("./contact", "post", "contactform"); //default ("./", "post", "ProcessForm") $form->addInput(array( 'type' => "InputfieldText", 'label' => "First Name", 'attributes' => array('id' => "firstname", 'name' => "firstname"), 'required' => 1 )); $form->addInput(array( 'type' => "InputfieldRadios", 'label' => "To much code for a simple Form?", 'options' => array('yes' => "Yes, absolutely", 'no' => "No, absolutely not"), 'attributes' => array('id' => "tomuchcode", 'name' => "tomuchcode"), 'required' => 1 )); $form->render(); ?> Is this usefull? Honestly said, I don't know if this is usefull for you. It is usefull for me, since I can "minify" or have a better overview/readability over my code. PS: I am still learning PHP OOP, so dont hate me when my "oop skills" are too low. I'am very open to better approaches, tipps, suggestions to improve this class or go antoher way to manage the big amount of code when building big forms with API. PPS: The class isn't tested very well(or better said it isn't tested at all ^^) since I am to lazy to do tests. So don't use this in commercial projects(but when you want still using it commercial it is at your own risk ^^). The code is on Github Greetings Orkun aka "Nukro"
  5. Hi Guys How can i set markup inside a Inputfieldradio Option Label? I am using unicode emoticons as labels at the moment, but this emoticons dont work well in some browsers(especially IE). Now i decided to use images, but it isn't possible to add html for label. I think I can alter the behavior of the InputfieldRadios::render function with hooks? To achieve what I want. But I don't know how to do this. // Unicode Smiley Types$smile_1 = '
  6. $stats = array(); $mainIndexes = array("total", "intern", "extern"); foreach ($mainIndexes as $mainIndex) { $stats[$mainIndex] = array( 'main' => array(), 'yes' => array(), 'no' => array(), ); } $stats['total']['main']['selector'] = "template=50, parent=$formSuperSelector"; $stats['total']['main']['count'] = $this->pages->count($stats['total']['main']['selector']); $stats['total']['yes']['selector'] = $stats['total']['main']['selector'].", teilnahme=yes"; $stats['total']['yes']['count'] = $this->pages->count($stats['total']['yes']['selector']); $stats['total']['no']['selector'] = $stats['total']['main']['selector'].", teilnahme=no"; $stats['total']['no']['count'] = $this->pages->count($stats['total']['no']['selector']); $stats['intern']['main']['selector'] = "template=50, formtype=intern, parent=$formSuperSelector"; $stats['intern']['main']['count'] = $this->pages->count($stats['intern']['main']['selector']); $stats['intern']['yes']['selector'] = $stats['intern']['main']['selector'].", teilnahme=yes"; $stats['intern']['yes']['count'] = $this->pages->count($stats['intern']['yes']['selector']); $stats['intern']['no']['selector'] = $stats['intern']['main']['selector'].", teilnahme=no"; $stats['intern']['no']['count'] = $this->pages->count($stats['intern']['no']['selector']); $stats['extern']['main']['selector'] = "template=50, formtype=extern, parent=$formSuperSelector"; $stats['extern']['main']['count'] = $this->pages->count($stats['extern']['main']['selector']); $stats['extern']['yes']['selector'] = $stats['extern']['main']['selector'].", teilnahme=yes"; $stats['extern']['yes']['count'] = $this->pages->count($stats['extern']['yes']['selector']); $stats['extern']['no']['selector'] = $stats['extern']['main']['selector'].", teilnahme=no"; $stats['extern']['no']['count'] = $this->pages->count($stats['extern']['no']['selector']); print_r($stats); It works like a charm.
  7. at the moment i have total pages of 317. But when I do $this->pages->count($selector), i get somehow 415?
  8. I know I could do it like this(will probably do it like this ^^): $totalselector = "template=50, parent=$formSuperSelector"; $internselector = "template=50, formtype=intern, parent=$formSuperSelector"; $externselector = "template=50, formtype=extern, parent=$formSuperSelector"; $stats = array( ... ... "selector" => $totalselector, "count" => $this->pages->find($totalselector)->count ... ... ) But now I am interested why the other method above doesnt works EDIT: Just realised that this method is limited: "yes" => array( "selector" => "$totalselector, teilnahme=yes", //need a new var with this selector "count" => $this->pages->find($totalselector)->count //because of this ), while this only works for "main" index: "main" => array( "selector" => $totalselector, "count" => $this->pages->find($totalselector)->count
  9. $stats = array( "total" => array( "main" => array( "selector" => "template=50, parent=$formSuperSelector", "count" => $this->pages->find($stats['total']['main']['selector'])->count ), "yes" => array( "selector" => $stats['total']['main']['selector'].", teilnahme=yes", "count" => $this->pages->find($stats['total']['yes']['selector'])->count ), "no" => array( "selector" => $stats['total']['main']['selector'].", teilnahme=no", "count" => $this->pages->find($stats['total']['no']['selector'])->count ) ), "intern" => array( "main" => array( "selector" => "template=50, formtype=intern, parent=$formSuperSelector", "count" => $this->pages->find($stats['intern']['main']['selector'])->count ), "yes" => array( "selector" => $stats['intern']['main']['selector'].", teilnahme=yes", "count" => $this->pages->find($stats['intern']['yes']['selector'])->count ), "no" => array( "selector" => $stats['intern']['main']['selector'].", teilnahme=no", "count" => $this->pages->find($stats['intern']['no']['selector'])->count ) ), "extern" => array( "main" => array( "selector" => "template=50, formtype=extern, parent=$formSuperSelector", "count" => $this->pages->find($stats['extern']['main']['selector'])->count ), "yes" => array( "selector" => $stats['extern']['main']['selector'].", teilnahme=yes", "count" => $this->pages->find($stats['extern']['yes']['selector'])->count ), "no" => array( "selector" => $stats['extern']['main']['selector'].", teilnahme=no", "count" => $this->pages->find($stats['extern']['no']['selector'])->count ) ), ); var_dump($stats['total']['main']['count']); How can I bring this to work? I always get a "Notice: Undefined variable: stats in..." when trying to access: "count" => $this->pages->find($stats['intern']['yes']['selector'])->count or "selector" => $stats['intern']['main']['selector'].", teilnahme=yes",
  10. Could you possibly make an example, or show one? That would be very helpful since I am not so advanced in AJAX/JSON.
  11. Thank you BitPoet, you were right! I set the private_key_bits configarg to 2048 bits and it worked. I get a encrypted key which is 344 bytes long. I don't know how I could forget that. 172 bytes = 1376 bits (1 byte(by eight ) = 8 bits)
  12. It still gives me a empty var_dump when I change the config.php file: From: $config->publicKey = file_get_contents('./site/templates/publickey.txt', TRUE); To: $config->publicKey = openssl_pkey_get_public('file://./site/templates/publickey.pem'); I think it has to do something with the $crypter->createRandomKey(128) function. Because it encrypts when I type a simple string instead of $crypter->createRandomKey(128).
  13. I know that the Topic title is probably confusing(sry for that ). Let me explain my Question: I have two Filters(Main Filter & Detail Filter) like you can see below. When I click on a main filter it gets bold and will be added to the "Meine Auswahl(my selection)" container below the Filters. When I click on the "X" span inside the "My Selection" Container, the selected Filter gets resetted. Now, what I want to achieve is a ajax Filter which changes the php Selector for the for the $pages->find(). For Example: When I come to that page, the selector for the main and detailfilter should look like this: $branches = $pages->find("template=branch"); // Main Filters <?php $genres = $pages->find("template=genre, select_sparte=''"); ?> //Detailfilters (Returns a NullPage so dont show the Detailfilters when none main filter is selected) When I select for e.g Example Filter 1 it should change to this without a page refresh: <?php $genres = $pages->find("template=genre, select_sparte.title='Example Filter 1'"); ?> So that I get the Detail Filters of Example Filter 1 without a page refresh. Is this even possible? When yes how, can you guys show me a direction?
  14. I made a new class to handle Keys and so on. You find it here. CI_Encrypt class extends the Keys class. basic-crypt.php $crypter = new CI_Encrypt(); $crypter->initAsymmetricKeyPair(); //Create the Asymmetric Key Pair $crypter->createPrivateKeyFile(); //Extract Private Key and save it as a File $crypter->createPublicKeyFile(); //Extract Public Key and save it as a File //Encrypt the Random Key with the Public Key $encryptedKey = $crypter->openssl_encrypt_key($crypter->createRandomKey(128), $config->publicKey); var_dump($crypter->createRandomKey(128)); print_r("<br />"); print_r("<br />"); var_dump($config->publicKey); print_r("<br />"); print_r("<br />"); var_dump($encryptedKey); //Create a File with the encrypted Master Key to serve it for the config.php file $crypter->createEncryptedMasterKeyFile($encryptedKey); $outBody .= "<strong>Public Key(config.php):</strong> ".$config->publicKey."<br /><br />"; $outBody .= "<strong>Master Key(config.php):</strong> ".$config->masterKey."<br /><hr />"; config.php /** * Encryption/Decryption Settings * */ $config->publicKey = file_get_contents('./site/templates/publickey.txt', TRUE); $config->masterKey = file_get_contents('./site/templates/masterkey.txt', TRUE); I dont know why, but the openssl_encrypt_key() function which I wrote doesn't accept the createRandomKey() function which I also wrote. I always get a empty var_dump.
  15. I am very thankful for that Tutorial @BitPoet! Unfortunately I found out from my Supervisor that the passwords shouldn't be limited to single users... He declared me the Scenaro like this: - Every User(Worker) can see all Projects(Pages). - A Customer(Page) can have multiple children Projects Pages / A Project Page can only have 1 unique Customer parent Page. (Parent/Children Scenario fits well) - A Project Page can have multiple children "Services" Pages. - A Service Page can have multiple children "Credential" Pages. - Admin can assign mutliple Service Pages to a user (He defines which services a user can access/see) - When a User has access to Service Page, he can see all Credentials/Childrens of it. I think for this setup it will be needed a Master Key Page with a "Master Key Field" which all PW-Users has access to it to see the Credentials in Cleartext? Setup in PW-Tree Format: - Home - Customers |-> Customer 1 |-> Project 1(e.g Website blabla) |-> Service 1(e.g Processwire Logins) |-> Credential 1 (e.g Username: user1 / Password: password1) |-> Credential 2 (e.g Username: user2 / Password: password2) ... |-> Service 2(e.g MySQL Logins) ... ... |-> Project 2 |-> Project 3 ... |-> Customer 2 |-> Customer 3 - PW-Users (Workers) -> PW-User 1 -> PW-User 2 -> PW-User 3 ...
  16. @BitPoet, @horst, @cstevensjr, @Martijn Geerts Thank you for your advices! I have some Questions/Points to discuss to/with you @BitPoet The Encrypt.php class from Codeligniter uses CBC as default mode so no need to set extra mode via set_mode function (check) /** * Get Mcrypt Mode Value * * @return int */ protected function _get_mode() { if ($this->_mcrypt_mode === NULL) { return $this->_mcrypt_mode = MCRYPT_MODE_CBC; } return $this->_mcrypt_mode; } ------------------------------------------------------------------------------------------------------------------------------------------------------------ I changed the Encrypt.php class and added a new function called "generate_key". Is this enough? /** * Create a random key * * @param int $length Output length * @return string */ public function generate_key($password) { $iterations = 1000; $salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); $hashed_key = hash_pbkdf2("sha256", $password, $salt, $iterations, 120); return $hashed_key; } -------------------------------------------------------------------------------------------------------------------------------------------------------------- In the Encrypt.php class the "encode" function uses an other function called "mcrypt_encode" which prepends an iv to the encrypted data. /** * Encrypt using Mcrypt * * @param string * @param string * @return string */ public function mcrypt_encode($data, $key) { $init_size = mcrypt_get_iv_size($this->_get_cipher(), $this->_get_mode()); $init_vect = mcrypt_create_iv($init_size, MCRYPT_RAND); $encrypted_data = $init_vect.mcrypt_encrypt($this->_get_cipher(), $key, $data, $this->_get_mode(), $init_vect); return $this->_add_cipher_noise($encrypted_data, $key); } -------------------------------------------------------------------------------------------------------------------------------------------------------------- As for as I know the Passwords Visibility should be limited to single PW users (Which Passwords can the workers see? ). Can you further explain this part respectively make an example? For encrypting the key I use the hash_pbkdf2 hashing-function, is this enough? Do I have to make an Frontend Registration(handled via API) where the workers can sign up(take the password and give it as parameter to "generate_key" function where the return value of this function will be the "master key", which is saved in a field called "e.g master_key" under the user template in processwire?) I'm sorry if I am asking stupid or too much questions. I am very meticulous since it is my first time with Encryption/Decryption and also because it is my final exam(I am doing preparatory work at the moment, which I have also must document ). Here is also the altered Version of the Encrypt.php class. Tried out the current class on a template: <?php include 'Crypter Class/Classes/Encrypt.php'; $form = $modules->get("InputfieldForm"); $form->action = $page->url; $form->method = "post"; $form->id = "myForm"; $field = $modules->get("InputfieldText"); $field->label = "Password"; $field->attr("id+name", "passwort"); $field->required = 1; $field->columnWidth = 40; $form->append($field); $submit = $modules->get("InputfieldSubmit"); $submit->attr("value", "save"); $submit->attr("id+name", "submit"); $form->append($submit); if($input->post->submit){ $form->processInput($input->post); if($form->getErrors()) { $outBody .= $form->render(); }else { $data = $form->get("passwort")->value; $crypter = new CI_Encrypt(); $masterkeypage = $pages->get("template=secret"); $masterkeypage->setOutputFormatting(false); //At the moment it is statically respectively no user pw is assigned $masterkeypage->masterkey = $crypter->generate_key("userpassword?"); if($masterkeypage->save()){ $page->of(false); $page->pwmessage = $crypter->encode($data, $masterkeypage->masterkey); if($page->save()){ $session->redirect($page->url); } } } }else { $crypter = new CI_Encrypt(); $masterkeypage = $pages->get("template=secret"); $decryptedtext = $crypter->decode($page->pwmessage, $masterkeypage->masterkey); $outBody .= "<h4><strong>Save encrypted Password in Database</strong></h4>"; $outBody .= "<strong>Encrypted:</strong> ".$page->pwmessage."<br>"; $outBody .= "<strong>Decrypted:</strong> ".$decryptedtext."<br>"; $outBody .= "<strong>Key</strong>: $masterkeypage->masterkey <br/>"; $outBody .= "<br />"; $outBody .= $form->render(); } PS: Sorry for this long post
  17. Hi Guys I have an Question about Encryption/Decryption in Processwire. Does Processwire has an encryption Library which provides two-way data encryption for sensitive data? I mean something like the Encryption Library from Codeligniter. I saw the Password.php class in the core which uses some encryption magic, but I don't think, that the purpose of the password class is to provide a two-way data encryption. Because I don't see how it should be possible that I can read/decrypt the password from the database since it hashed(one-way encryption). Why I need a two-way data encryption or. why I am asking? In the near Future I must make a "Password/-Login Manager(included Customer / project management)" where a Processwire User can create Logins(FTP, MySQL, Processwire Login etc...) and assign them to different Projects. Since the Passwords for the Logins are very sensitive data, they must be stored encrypted in the Database, but they must also be listed in Plaintext in the Password Manager Interface. Because of that I am writing this thread to collect some Information about Encrypting/Decrypting in Processwire and some experience from other developers regarding Encrypting/Decrypting. Why I am developing a Password/-Login Manager? My Company uses Active Collab for managing Customer Logins/Projects etc. It works very well! The Problem is that the Password Manager Plugin doesn't exist anymore in the new update of the Tool. So we decided, that i develop a Password Manager in the beautiful CMS/CMF Processwire. It also serves as a perfect final exam for my education as a apprentice in Web-Developement/Informatics. Finally a Code Snippet regarding the Encryption Library from Codeligniter: include 'Crypter Class/Classes/Encrypt.php'; $data = $page->pwmessage; //normal text field in Processwire $ci_crypter = new CI_Encrypt(); $ci_crypter->set_key("r7kl-icfc-8ext-p"); $ci_crypter->set_cipher(MCRYPT_RIJNDAEL_256); $ci_crypter->set_mode(MCRYPT_MODE_ECB); $ci_encrypted = $ci_crypter->encode($data, $ci_crypter->get_key()); $ci_decrypted = $ci_crypter->decode($ci_encrypted, $ci_crypter->get_key()); $outBody .= "<strong>Original:</strong> ".$data."<br>"; $outBody .= "<strong>Encrypted:</strong> ".$ci_encrypted."<br>"; $outBody .= "<strong>Decrypted:</strong> ".$ci_decrypted."<br>";
  18. This Solution worked for me: https://processwire.com/talk/topic/9105-select-options-fieldtype-possible-to-output-all-available-options-in-template/
  19. I have a problem that my Select Options Field doesnt change the language on the frontend, when I am changing the language on the frontend. My Field Settings looks like this But the Frontend shows me always the default language when accesssing these urls ... www.domain.com/form www.domain.com/de/form www.domain.com/it/form Why it doesnt change the language on the frontend?
  20. I've created a custom process module, which the user can manage form-entries. In my executeEntries function, I've created a custom InputfieldSelector(should serve as real-time-search) and a custom MarkupAdminDataTable(serves as Resulttable) which holds the entries. How is it possible to combine the InputfieldSelector with the MarkupAdminDataTable? How can I get the selector from the InputfieldSelector? How can I convince the MarkupAdminDataTable, that he uses the new selector from the InputfieldSelector every time when I change the filters in the InputfieldSelector? public function executeEntries: public function executeEntries(){ $this->fuel->breadcrumbs->add(new Breadcrumb('./', 'Event-Manager')); $this->fuel->breadcrumbs->add(new Breadcrumb('./', 'Dashboard')); $this->fuel->set('processHeadline', 'Formulareinträge Event-Formular'); $form = $this->modules->get("InputfieldForm"); $form->method = "post"; $form->attr('id',$this->className()); $fieldset = $this->modules->get("InputfieldFieldset"); $fieldset->label = "Suche"; $fieldset->collapsed = Inputfield::collapsedNo; $field = $this->modules->get("InputfieldSelector"); $field->label = "Filter"; $field->attr("name+id", "filters"); $field->setAttribute("value", "template=50"); $allowedFields = array(); $formtemplate = $this->templates->get("name=form-submission"); foreach ($formtemplate->fields as $fieldN) { $allowedFields[] = $fieldN->name; } array_push($allowedFields, "template"); $field->limitFields = $allowedFields; $fieldset->add($field); $entries = $this->pages->find("template=form-submission"); $table = $this->modules->get("MarkupAdminDataTable"); $table->headerRow( array("Name", "Erstellt", "Aktionen") ); $table->setEncodeEntities(false); $table->action(array('Als Excel exportieren' => "./export")); foreach($entries as $entry){ $data = array( $entry->title, date("d.m.Y H:i:s", $entry->created), "<a href='showentry?id=$entry->id'>Details anzeigen</a> | <a href='./editentry?id=$entry->id'>Bearbeiten</a>", ); $table->row($data); } $preview = $this->modules->get("InputfieldMarkup"); $preview->value .= "<h2>" . $this->_("Formulareinträge Event-Formular") . "</h2>"; $entriesLimit = 20; $entriesOffset = ($this->input->pageNum - 1) * $entriesLimit; $entriesTotal = count($entries); $preview->value .= sprintf($this->_("Anzahl der Einträge: %s"), $entriesTotal); $preview->value .= " | "; $preview->value .= sprintf($this->_("Anzahl pro Seite: %s"), $entriesLimit) . "<br/>"; $preview->value .= $table->render(); $pagination = new PageArray(); $pagination->setTotal($entriesTotal); $pagination->setLimit($entriesLimit); $pagination->setStart($entriesOffset); $preview->value .= $pagination->renderPager(); $form->add($fieldset); $form->add($preview); return $form->render(); } How the Interface looks like:
  21. how can I achieve something like this: in a custom process module ? I made a Interface(form) with the Inputfields components, but i don't know how to make the asmSelect to set the values so that it looks like above. At the Moment mine InputfieldAsmSelect looks like this in my alternative Interface: Here's the code which I have so far: $field = $this->modules->get("InputfieldAsmSelect"); $field->columnWidth = 50; $field->label = __("Titel"); $field->attr("id+name",'titel'); $fieldsTitel = $this->fields->get('titel'); $options = $fieldsTitel->type->getOptions($fieldsTitel); foreach ($options as $option) { $field->addOption($option->value, $option->title); } $valArray = array(); foreach ($entryPage->titel as $value) { $valArray[] .= $value->title; } $field->value = $valArray; $form->append($field);
  22. Do you mean the ProcessPageLister.module File? I looked in that file, but couldn't figure out which parts I need. Are there other Files where it is "clearer" which parts i need to achieve that "add Filter/Condition" functionality. Isn't that handled also with Ajax/Jquery ? Greetings Orkun
  23. How can I achieve something like this where I can add more Conditions or delete them: Inside this Form where I create Segments for a Mailchimp Account Form processing looks like this: if($this->input->post->createSegment) { $form->segmentnameParam->required = 1; $form->fieldParam->required = 1; $form->operatorParam->required = 1; $form->searchParam->required = 1; $form->match->required = 1; $form->processInput($this->input->post); if(!$form->getErrors()) { $segment_name = $this->sanitizer->text($form->get("segmentnameParam")->value); $field_name = $form->get("fieldParam")->value; $operator = $form->get("operatorParam")->value; $search_value = $this->sanitizer->text($form->get("searchParam")->value); $match = $this->sanitizer->text($form->get("match")->value); $res = $this->mailchimp->call("/lists/segment-add", array( "id" => $list_id, "opts" => array( "type" => "saved", "name" => $segment_name, "segment_opts" => array( "match" => $match, "conditions" => array( array( "field" => $field_name, "op" => "eq", "value" => $search_value, ) ) ) ) )); if($res){ $this->message(sprintf($this->_("Created new Segment called: '%s'"), $segmentnameParam)); } $this->session->redirect("../edit/?id=$list_id"); } }
×
×
  • Create New...