Todos los programas tendrán un coste para el desarrollador por el espacio usado en el CCR. Los primeros 20GB son gratuitos. Puedes alojar tu programa en tus servidores y aquí solo alojar el html y comunicarte con tu servidor haciendo uso de javascript
Espacio | Programa | Open Source |
---|---|---|
Hasta 20GB | GRATIS | GRATIS |
Cada 20GB extra | 5€ | 2.5€ |
Porque nos gusta apoyar a la comunidad open source para mejorar el futuro, llevamos a cabo un 50% de descuento al coste del alojamiento de los programas open source. Para que se te aplique este descuento, libera tu código fuente y mándanos un correo a contacto@rigovi.com con los datos de tu programa, la licencia bajo la que has liberado tu código y dónde puede encontrarlo la comunidad.
Los programas que se publiquen y se vendan a través de la tienda del CCR, tendrán una comisión del 15%.
Los programas que no se publiquen en la tienda del CCR y solo se distribuya de manera privada, tendrán un coste extra de 5€ al mes por usuario que lo tenga a partir del 3er usuario.
Estos eventos sirven para detectar eventos relacionados con los archivos del usuario.
Existen los siguientes eventos:
El evento actualizacion() se activa cuando se ha llevado a cabo un cambio en el sistema de archivos del usuario.
Se activa de la siguiente manera:
ccr_eventos.archivos.actualizacion.activar( callback() )
callback ( idDrive , idArchivo , padres ) - La función actualizacion llamará a esta función cuando se haya producido un cambio en el sistema de archivos del usuario. Sus variables y descripciónes en este orden son:
idDrive - El id del Drive al que pertenece el archivo actualizado. 'root' si es los drives conectados
idArchivo - El id del archivo donde se ha producido el cambio. 'root' si pertenece al root del drive
padres - Array con los ids de los padres del archivo donde se ha producido el cambio
Se desactiva de la siguiente manera:
ccr_eventos.archivos.actualizacion.desactivar( )
Los programas no pueden salirse del espectro de su programa/ventana pero existen eventos que el programa quiere escuchar y se hace escuchando el o el
. Para aislar las acciones en el exterior del programa se deberán hacer uso de estos eventos.Los siguientes eventos son accesibles desde el javascript de los programas en el lado del cliente.
Existen varios tipos de eventos (teclas, archivos...) los cuales enumeramos aquí y detallamos en sus secciones.
Para comenzar a escuchar los eventos se hará añadiendo .activar tras el nombre de la función. Ej: 'ccr_eventos.teclas.sueltaTecla.activar()'. Y para dejar de escuchar el evento se hará añadiendo .desactivar tras el nombre de la función. Ej: 'ccr_eventos.teclas.sueltaTecla.desactivar()'.
Estos eventos sirven para detectar cuando el usuario mueve el ratón realizando alguna acción en particular.
Existen los siguientes eventos:
El evento sale() se activa cuando el usuario mueve el ratón fuera del navegador.
Se activa de la siguiente manera:
ccr_eventos.raton.sale.activar( callback() )
callback ( evento ) - La función sale llamará a esta función cuando el usuario mueva el ratón fuera del navegador. Su variable y descripción es:
evento - Los datos del evento generado por .on('mouseleave')
Se desactiva de la siguiente manera:
ccr_eventos.raton.sale.desactivar( )
El evento click() se activa cuando el usuario hace click con los botones del ratón.
Se activa de la siguiente manera:
ccr_eventos.raton.click.activar( lugar, callback() )
click - Objeto de jquery con la localización sobre lo que quiere escuchar el click. Ej. $('localizacion')
callback ( evento ) - La función click llamará a esta función cuando el usuario haga click sobre el elemento lugar. Su variable y descripción es:
evento - Los datos del evento generado por window.addEventListener('click', function(e) {})
Se desactiva de la siguiente manera:
ccr_eventos.raton.click.desactivar( )
Estos eventos sirven para detectar cuando el usuario presiona alguna tecla.
Existen los siguientes eventos:
El evento pulsaTecla() se activa cuando el usuario pulsa una tecla del teclado. Es el equivalente al evento 'keypress'.
Se activa de la siguiente manera:
ccr_eventos.teclas.pulsaTecla.activar( callback() )
callback ( evento ) - La función pulsaTecla llamará a esta función cuando se haya pulsado una tecla. Su variable y descripción es:
evento - Los datos del evento generado por .on('keypress')
Se desactiva de la siguiente manera:
ccr_eventos.teclas.pulsaTecla.desactivar( )
El evento presionaTecla() se activa cuando el usuario presiona una tecla del teclado. Es el equivalente al evento 'keydown'.
Se activa de la siguiente manera:
ccr_eventos.teclas.presionaTecla.activar( callback() )
callback ( evento ) - La función presionaTecla llamará a esta función cuando se haya presionado una tecla. Su variable y descripción es:
evento - Los datos del evento generado por .on('keydown')
Se desactiva de la siguiente manera:
ccr_eventos.teclas.presionaTecla.desactivar( )
El evento sueltaTecla() se activa cuando el usuario suelta la tecla presionada. Es el equivalente al evento 'keyup'.
Se activa de la siguiente manera:
ccr_eventos.teclas.sueltaTecla.activar( callback() )
callback ( evento ) - La función sueltaTecla llamará a esta función cuando se haya levantado la tecla presionada. Su variable y descripción es:
evento - Los datos del evento generado por .on('keyup')
Se desactiva de la siguiente manera:
ccr_eventos.teclas.sueltaTecla.desactivar( )
Existen funciones especiales que los programas pueden usar.
Existen las siguientes funciones:
La función abrirContenido() abre el contenido de un archivo a partir de una variable. Por ejemplo, en el programa de RigoviFTP, este solicita un archivo json del ftp, lo abre haciendo uso de esta función, el usuario lo modifica y al guardar le devuelve el nuevo contenido al programa para que actualice el archivo en el servidor FTP.
Esta es la función con sus parámetros para solicitar al CCR la lista de archivos y carpetas:
ccr_funciones.sistema.abrirContenido( nombre , mime , contenido , opciones , callbackAlAbrir() , callbackAlCerrar() , callbackAlModificarse() )
nombre - Nombre del 'archivo'.
mime - Mime del 'archivo'. Puede ser null.
contenido - El contenido a abrir. Si es una imagen a abrirse con el visor de imágenes y pones el link en opciones, no es necesario.
opciones - Opciones extra. Dependen del programa con el que se abra el contenido.
{
link : link, (OPCIONAL. Link al archivo. Si se abre el archivo/contenido con el visor de imagenes, se usará el link en vez de el contenido)
}
callbackAlAbrir ( error , callbackParaCerrar() ) - La función abrirContenido llamará a esta función cuando se haya abierto el programa. Sus variables y descripción son en este orden:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario ha descargado el contenido (no se ha abierto el programa)
4 - El usuario ha canclado la apertura del contenido
callbackParaCerrar() - El programa que hace uso de la función abrirContenido puede mediante esta función cerrar el programa que ha abierto.
callbackAlCerrar ( ) - La función abrirContenido notificará al programa mediante esta función cuando se haya cerrado el archivo abierto. Sus variables y descripción son en este orden:
callbackAlModificarse ( nuevoContenido , callbackRespuesta() ) - La función abrirContenido notificará al programa mediante esta función cuando se haya modificado el archivo abierto. Sus variables y descripción son en este orden:
nuevoContenido - El nuevo contenido del archivo
callbackRespuesta(res) - Función para devolver información al programa que tiene abierto el código. El parámetro a devolver contendrá:
{
resultado : true | false, (Devolver true, si se ha podido guardar correctamente. False e.o.c.)
}
La función alerta() lleva a cabo una función similar a la función alert de javascript que se adapta a si el usuario se encuentra en la App o en el escritorio, da más funcionalidades y se adapta al diseño de la plataforma.
Esta es la función con sus parámetros para crear la alerta en el CCR:
ccr_funciones.sistema.alerta( titulo , mensaje , boton , callback() )
titulo - Titulo de la alerta.
mensaje - Mensaje a mostrar.
boton - Nombre del botón a mostrar.
callback () - La función alerta llamará a esta función cuando el usuario haya cerrado el mensaje de alerta.
La función confirmar() lleva a cabo una función similar a la función confirm de javascript que se adapta a si el usuario se encuentra en la App o en el escritorio, da más funcionalidades y se adapta al diseño de la plataforma.
Esta es la función con sus parámetros para crear el mensaje de confirmación en el CCR:
ccr_funciones.sistema.confirmar( titulo , mensaje , botones , callback() )
titulo - Titulo de la alerta.
mensaje - Mensaje a mostrar.
botones - Array de strings con el contenido de los botones. Opcional. Si null se ponen los botones 'Aceptar' y 'Cancelar'.
callback ( error , localizacion ) - La función confirmar llamará a esta función cuando el usuario pulse el botón de una de las opciones. Sus variables y descripción son en este orden:
error - Sus códigos de eror son:
-1 - Localización no soportada. El usuario se encuentra usando el CCR en un dispositivo del que no se puede recuperar una localización
-2 - El usuario no tiene activado el GPS
localizacion - JSON con los datos de su localización. El JSON contendrá:
{
latitud : Latitud de su localización
longitud : Longitud de su localización
precision : Precisión de su localización
precisionAltura : Precisión de la altura de su localización
altitud : Altura de su localización
direccion : Direción del usuario
velocidad : Velocidad del usuario
fecha : Fecha de la geolocalización
}
La función geolocalizacion() solicita al usuario su localización adaptándose a si el usuario se encutra en la App o en el escritorio.
Esta es la función con sus parámetros para recuperar la localización del usuario:
ccr_funciones.sistema.confirmar( altaPrecision , tiempoEspera , edadMaxima , callback() )
altaPrecision - Precisión que se solicita. True si alta, False si no es necesario.
tiempoEspera - Milisegundos máximo de espera.
edadMaxima - Edad máxima de la localización si el usuario lo tuviera cacheado en milisegundos
callback ( numBoton ) - La función confirmar llamará a esta función cuando el usuario pulse el botón de una de las opciones. Sus variables y descripción son en este orden:
numBoton - El número de botón presionado. Ej. Si se llama a la función pasando el parámetro botones como ['Aceptar', 'Cancelar'] si el usuario pulsa aceptar devolvería 1.
Si tu programa tiene compras integradas con esta función podrás ofrecer un método sencillo para cobrarlos. Cuando se lleva a cabo el pago, junto con la respuesta en el callback, se lleva a cabo una llamada POST a tu programa en /www/ajax.php con los datos más abajo descritos.
Esta es la función con sus parámetros para solicitar al CCR cobrar el producto/servicio:
ccr_funciones.sistema.comprar( entradas , identificador , aceptarDevoluciones , callbackAlFinalizar() )
entradas - Un array con los datos de la compra. Por ejemplo:
{
descripcion : descripción del producto
precioUnitario : precio unitario con el iva incluido (máximo 2 decimales)
iva : (OPCIONAL. 21 por defecto) iva del producto. Un número mayor que 0.
descuento : (OPCIONAL. 0 por defecto) porcentaje de descuento del precio entre 0 y 100
cantidad : (OPCIONAL. 1 por defecto) cantidad de artículos
}
identificador - Identificador de la compra.
aceptarDevoluciones - La compra acepta devolución.
callback ( error , respuesta ) - La descripción de las variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - Una variable en los parámetros de la llamada de esta función no es válido
3 - Un dato en el parámetro de entradas de producto no es válido
4 - El usuario ha cancelado el pago
respuesta - Un json con los datos del pago:
{
identificador : el identificador de la compra introducido en la llamada
total : el total del pago
}
accion = 'pagoRealizado'
cantidad = cantidad pagada
identificador = identificador introducido en la llamada de esta función
idPersona = identificador de la persona que ha realizado la compra
En el CCR, los usuarios cuentan con un sistema de archivos y carpetas a través de terceros como son onedrive, dropbox o google drive. Los programas podrán acceder (si tienen los permisos necesarios) al sistema de archivos del usuario.
Para hacer uso de estas funciones se necesitará que el usuario conceda los permisos necesarios
Existen las siguientes funciones:
Todo parte de la carpeta root. Dentro de esta carpeta se encontrarán los drives que el usuario tenga conectado. Cada drive conectado tiene un nombre que el usuario le haya dado pero cada uno se representa con un número.
Dentro de cada drive se encontrarán las carpetas y archivos que este tenga.
- Puesto que cada sistema drive hace uso de diferentes métodos en su forma de trabajar con los archivos, en las funciones se deberá pasar tanto la ruta como el id del archivo sobre el que se quiere trabajar puesto que algunos drives hacen uso del id y otros hacen uso de la ruta.
- A la hora de crear archivos o carpetas, de renombrar... algunos drives permiten múltiples archivos con el mismo nombre en la misma ruta, otros no permiten ni tener una carpeta y un archivo con el mismo nombre. Siempre se deberá comprobar con el id.
La función listar() devolverá al programa un listado con las carpetas y archivo que este contenga.
Esta es la función con sus parámetros para solicitar al CCR la lista de archivos y carpetas:
ccr_funciones.archivos.listar ( ruta , idCarpeta , callback() )
Debido a que cada sistema drive funciona de manera diferente, para recuperar el listado con los archivos de una carpeta, se ha de pasar tanto la ruta al archivo como su id.
ruta - Ruta de la carpeta de la que quiere su contenido. '/' si se quiere la lista de los drives conectados. La ruta a una carpeta deberá ser de la siguiente manera: '/<id del drive>/<ruta de la carpeta>'.
idCarpeta - Id de la carpeta de la que quiere su contenido.
callback ( error , archivos ) - La función listar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
archivos - Puede devolver dos resultados:
- False si el sistema todavía no ha cargado los archivos. En este caso, escuchar el evento 'ccr_eventos.archivos.actualizacion.activar' para ser notificado cuando se hayan cargado. Solo puede ser devuelto al solicitar el listado de los drives conectados en root (/).
- Un array con el listado de los archivos. (Máximo 500 archivos). Cada archivo se compone de un JSON que contendrá:
{
id : id, (Id del archivo)
nombre : nombre (Nombre del archivo)
icono : icono (URL de la imagen de su icono)
esCarpeta : esCarpeta (true si es una carpeta)
ruta : ruta (Ruta completa al archivo)
}
La función nuevo() pedirá al usuario que tipo de drive quiere conectar y solicitará los permisos de acceso correspondientes.
Esta es la función con sus parámetros:
ccr_funciones.archivos.nuevo( callback() )
callback ( error , idNuevoDrive ) - La función nuevo devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario ha cancelado el proceso.
idNuevoDrive - El id del nuevo drive conectado
La función crearArchivo() creará un archivo vacío en la ruta especificada.
Esta es la función con sus parámetros:
ccr_funciones.archivos.crearArchivo( ruta , idCarpeta , nombreDelNuevoArchivo , callback() )
Debido a que cada sistema drive funciona de manera diferente, para llevar a cabo esta función, se ha de pasar tanto la ruta de la carpeta como su id.
ruta - Ruta de la carpeta donde se quiere crear el archivo. ( '/
idCarpeta - Id de la carpeta donde se quiere crear el archivo.
nombreDelNuevoArchivo - Nombre del archivo que se quiere crear. Atención: el nombre final puede variar si ya existe un archivo con ese nombre.
callback ( error , datosDelNuevoArchivo ) - La función listar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No existen los permisos para crear el archivo donde se ha especificado.
5 - Ya existe un archivo con ese nombre. Atención: según la configuración del usuario, puede llevarse a cabo esta función correctamente pero con otro nombre. Ej. 'nombre (1).jpg'.
datosDelNuevoArchivo - Un JSON con los datos del archivo:
{
id : id, (Id del archivo)
nombre : nombre, (Nombre final del archivo. No necesariamente será el pasado por parámetro)
icono : icono,
esCarpeta : false,
ruta : ruta (Ruta completa del archivo)
}
La función crearCarpeta() creará una carpeta en la ruta especificada.
Esta es la función con sus parámetros:
ccr_funciones.archivos.crearCarpeta( ruta , idCarpeta , nombreDeLaNuevaCarpeta , callback() )
Debido a que cada sistema drive funciona de manera diferente, para llevar a cabo esta función, se ha de pasar tanto la ruta de la carpeta como su id.
ruta - Ruta de la carpeta donde se quiere crear la carpeta. ( '/<idDriveConectado>/<ruta a la carpeta padre>/' )
idCarpeta - Id de la carpeta donde se quiere crear la carpeta. 'root' si se quiere crear en el root de un drive
nombreDeLaNuevaCarpeta - Nombre de la carpeta que se quiere crear. Atención: el nombre final puede variar si ya existe un archivo con ese nombre.
callback ( error , datosDeLaNuevaCarpeta ) - La función listar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No existen los permisos para crear la carpeta donde se ha especificado.
5 - Ya existe un archivo con ese nombre. Atención: según la configuración del usuario, puede llevarse a cabo esta función correctamente pero con otro nombre. Ej. 'nombre (1)'.
datosDeLaNuevaCarpeta - Un JSON con el id, ruta y nombre final de la carpeta:
{
id : id, (Id de la carpeta)
nombre : nombre (Nombre final de la carpeta. No necesariamente será el pasado por parámetro)
icono : icono,
esCarpeta : true,
ruta : ruta (Ruta completa de la carpeta)
}
La función renombrar() renombrará la carpeta o el archivo especificado.
Esta es la función con sus parámetros:
ccr_funciones.archivos.renombrar( ruta , idArchivo , nuevoNombre , callback() )
Debido a que cada sistema drive funciona de manera diferente, para llevar a cabo esta función, se ha de pasar tanto la ruta del archivo como su id.
ruta - Ruta completa al archivo (incluido el archivo al final de la ruta). '/' si es el nombre de un drive lo que se está cambiando
idArchivo - Id del archivo a renombrar.
nuevoNombre - Nuevo nombre que se le quiere dar. Atención: el nombre final puede variar si ya existe un archivo con ese nombre.
callback ( error , res ) - La función renombrar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No existen los permisos para crear la carpeta donde se ha especificado.
5 - Ya existe un archivo con ese nombre. Atención: según la configuración del usuario, puede llevarse a cabo esta función correctamente pero con otro nombre. Ej. 'nombre (1).jpg'.
res - Nombre final del archivo. No necesariamente será el pasado por parámetro
{
nombre : nombre (Nombre final del archivo. No necesariamente será el pasado por parámetro)
}
La función abrir() abrirá un archivo en el CCR. Si el usuario tiene un programa por defecto que abrir el tipo archivo lo lanzará. Si no, le preguntará al usuario con qué programa abrirlo.
Esta es la función con sus parámetros:
ccr_funciones.archivos.abrir( ruta , idArchivo , programa , callbackAlAbrir() , callbackAlCerrar() , callbackAlModificarse() )
ruta - Ruta completa al archivo (incluido el archivo al final de la ruta).
idArchivo - Id del archivo.
programa - Programa con el que abrir el archivo. De momento 'seleccionar' si se quiere forzar al usuario el seleccionar el programa con el que abrir el archivo o 'auto' para que el CCR se lo abra con el programa por defecto si es posible.
callbackAlAbrir ( error , callbackParaCerrar ) - La función abrir llamará a esta función cuando se haya abierto el programa. Sus variables y descripción son en este orden:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No existen los permisos para abrir el archivo.
5 - No es un archivo.
callbackParaCerrar - El programa que hace uso de la función abrir puede mediante esta función cerrar el programa que ha abierto.
callbackAlCerrar ( ) - La función abrir notificará al programa mediante esta función cuando se haya cerrado el archivo abierto. Sus variables y descripción son en este orden:
callbackAlModificarse ( ) - La función abrir notificará al programa mediante esta función cuando se haya modificado el archivo abierto. Sus variables y descripción son en este orden:
{
resultado : ok | error,
nuevoContenido : contenido
}
La función recuperar() devolverá el contenido del archivo solicitado.
Esta es la función con sus parámetros:
ccr_funciones.archivos.recuperar( ruta , idArchivo , callback() )
ruta - Ruta completa al archivo (incluido el archivo al final de la ruta).
idArchivo - Id del archivo.
callback ( error , contenido ) - La función recuperar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No se ha podido acceder al archivo especificado.
contenido - JSON con datos y contenido del archivo
{
contenido : contenido, (contenido del archivo)
link : link (link al archivo)
}
La función guardar() guadará los datos que el programa le pase a la función en el archivo especificado. Si existe lo sobreescribirá
Esta es la función con sus parámetros:
ccr_funciones.archivos.guardar( ruta , idCarpetaPadre , idArchivo , contenido , callback() , progreso() )
ruta - Ruta completa al archivo (incluido el archivo al final de la ruta).
idCarpetaPadre - Id de la carpeta que contiene el archivo. Solo es necesario si se está creando un nuevo archivo. 'root' si es en la carpeta root del drive conectado.
idArchivo - Id del archivo. null si es un archivo nuevo.
contenido - El contenido a guardar. Puede ser un string o un Blob/File
callback ( error , datosDelArchivo ) - La función guardar devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No se ha podido modificar al archivo especificado.
5 - No se ha podido crear al archivo especificado.
datosDelArchivo - JSON con los datos del archivo conteniendo:
{
archivo : archivo, (Datos del archivo)
idDrive : idDrive, (Id del drive donde se encuentra)
ruta : ruta (Ruta completa del archivo. Incluido el archivo al final de la ruta)
}
progreso ( res ) - La función guardar devolverá el progreso de la subida mediante este método. Devuelve:
{
porcentaje : porcentaje, (Porcentaje de la subida realizada)
total : total (Total de bytes subiendo)
subido : subido (Total de bytes subidos)
}
La función eliminar() mandará a la 'basura' los archivos especificados. También usado para eliminar un drive del usuario. Los drives solo se pueden eliminar de uno en uno
Esta es la función con sus parámetros:
ccr_funciones.archivos.eliminar( arrayArchivos , callback() )
arrayArchivos - Array con los archivos a eliminar. Cada archivo en el array será un JSON de la siguiente forma:
{
id : id, (Id del archivo)
idPadre : idCarpetaPadre, (Id de la carpeta padre. 'root' si es un drive)
ruta : ruta (Ruta completa del archivo. Incluido el archivo al final de la ruta. '/' si es un drive)
}
callback ( error , datosDelArchivo ) - La función eliminar devolverá la confirmación mediante este método. Llamará a esta función por cada archivo en el array. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El programa no tiene permiso para hacer uso de esta función
3 - El usuario necesita renovar los permisos de acceso del CCR al drive y ha rechazado hacerlo.
4 - No se ha podido eliminar el archivo especificado.
5 - No se ha encontrado el archivo especificado.
6 - El usuario no ha confirmado la eliminación de los archivos.
datosDelArchivo - Los datos del archivo de la confirmación. Se haya realizado o no correctamente esta variable contendrá los datos del mismo.
El CCR se ha creado para ofrecer a los usuarios los programas, funcionalidades y sus datos esté donde esté. Programa tu aplicación de manera responsive y los usuarios podrán acceder y hacer uso de la aplicación tanto desde cualquier ordenador, tablet o móvil, ya sea iOS o Android.
Podrás ofrecer sin costes extras el acceso a tu programa desde el móvil con la App del CCR, pudiendo acceder y hacer uso de funcionalidades del móvil.
También consigue nuevos clientes que ya se encuentren en el CCR y necesiten de tus soluciones.
El CCR está diseñado para adaptarse a las aplicaciones web y no a la inversa. Sin mucho esfuerzo ni grandes modificaciones puedes publicar tu programa web en el CCR, y de la misma forma lo puedes sacar y publicar donde quieras de manera independiente.
Crea un programa, alójalo en nuestros servidores y olvídate de hostings, mantenimiento, alquiler de servidores... Solo pagarás por el almacenamiento que utilice tu programa a partir de los 20GB y el servidor se adaptará a tus necesidades o si bien lo prefieres utiliza tus propios servidores.
Accede a los archivos del usuario y guárdale los pdf que generas, interacciona con otros programas y haz tu programa más enriquecido y atractivo para tus clientes.
Para hacerte desarrollador solo necesitas dos cosas:
Inicia sesión si no lo has hecho ya haciendo click en el botón 'Identificarse' (Si pone 'Acceder al CCR' es que ya estás identificado) arriba a la derecha o hazte una cuenta en el CCR haciendo click aquí.
Haz click sobre el botón 'quiero ser desarrollador' para darte de alta como desarrollador y poder empezar a crear tus programas. En el momento que lo hagas, aparecerá el programa 'desarrolladores' en tu escritorio para crear y controlar los programas que crees.
Inicialmente serás desarrollador gratuito y podrás trabajar en tu primer programa y conocer el funcionamiento del CCR. Cuando quieras publicarlo o quieras crear un segundo programa se te solicitará darte de alta como desarrollador profesional. El precio para ser desarrollador profesional y poder publicar y trabajar en todos los programas que quieras es de 10€ al año.
En este pequeño tutorial podrás ver lo rápido y sencillo que es desarrollar un programa para el CCR. En unos minutos tendrás tu primer programa corriendo y funcionando tanto para navegadores como para móviles.
Una vez que te hayas dado de alta como desarrollador en el apartado anterior 'Cómo empezar', te aparecerá en el escritorio el programa Desarrolladores:
Siendo esta su interfaz:
Haz click en el botón superior de la izquierda 'Crear nuevo programa'. Te saltará el siguiente pop up:
Rellena los datos del nuevo programa:
Nombre - El nombre que le quieras dar al programa
Tipo de programa - Selecciona si va a ser un programa orientado a Empresas o para uso personal. Para más información haz click aquí
Descripción - Escribe una descripción del programa
Para el programa que estamos haciendo '¡Hola Mundo!' lo rellenamos con los datos que aparecen en la imagen anterior y pulsa continuar
Para terminar de crear el programa rellena el siguiente popUp con la siguiente información:
Cuando creas un programa en el CCR, tienes la libertad de escoger tus necesidades específicas para el proyecto.
Servidor - Actualmente tenemos disponible los lenguajes de programación PHP 5.5, PHP 7.0 y muy próximamente NodeJS.
Base de datos - Por ahora ofrecemos bases de datos mysql.
Si tu programa hace uso de otras tecnologías o hace uso de varias ponte en contacto con nosotros sin ningún compromiso.
Según crees el programa, aparecerán las contraseñas de acceso FTP al servidor y la contraseña de acceso a la base de datos. Guarda estas contraseñas porque no las podrás recuperar, solo las podrás cambiar.
¡Ya has creado tu primer programa! ¡Ahora toca programarlo!
Una vez creado el programa, te aparecerán todos los datos acerca del mismo y bajo el apartado 'Servidores del programa' el dominio del servidor y el usuario. Junto con la contraseña que has recibido al crear el programa conéctate mediante el uso del FTP
Según te conectes verás dos carpetas. Para más información acerca del sistema de carpetas accede en el menú lateral de la izquierda a "Lado Servidor" -> "Servidor PHP" -> "Sistema de carpetas"
Modifica el archivo /www/index.php e introduce dentro del div con id "zonaUtil" el siguiente código:
Modifica el archivo /www/css/style.css y añade el siguiente código al final:
Una vez que has realizado los cambios dirígete a tu escritorio en el CCR y abre la carpeta de "Programas En Desarrollo". Ahí encontrarás el programa en el que estás trabajando.
¡Ábrelo y verás los resultados de lo que has hecho!
En esta sección vamos a listar los archivos del usuario en el CCR. Para ello deberás tener al menos un drive sincronizado. Si no lo tienes, abre tu carpeta "Mis drives" en el escritorio y sincroniza tu Dropbox, tu Google Drive o tu OneDrive. También puedes crear un botón en tu programa "¡Hola Mundo!" que al hacer click llame a la función ccr_funciones.archivos.nuevo (más información en el menú lateral "Lado Cliente" -> "Javascript" -> "Funciones" -> "Archivos" -> "Nuevo drive".
A continuación vuelve a tu cliente FTP, modifica el archivo /www/js/script.js y añade lo siguiente:
Modifica también el archivo /www/index.php y añade lo siguiente después de cerrar el div con clase fila del mensaje hola mundo:
Y añade en el archivo /www/css/style.css al final:
Una vez realizados los cambios vuelve a tu programa "¡Hola mundo!" y haz click en el botón R que se encuentra a la derecha en la barra superior de tu programa junto al botón de minimizar y verás un listado de los drives que tengas conectados.
Vamos a programarlo para poder navegar por las carpetas
Añadimos en el archivo /archivosweb/js/script.js al finalizar el for de la función ccr_funciones.archivos.listar lo siguiente:
Y tras cerrar la función ccr_funciones.archivos.listar lo siguiente:
Ya puedes navegar por las carpetas, solo faltaría poder volver a la carpeta superior (con la misma función) y abrir los archivos (con la función ccr_funciones.archivos.abrir) pero os lo dejamos a vosotros.
Aquí haremos un ejemplo donde guardamos una contraseña "en claro" del usuario.
Para ello modificaremos el archivo /www/index.php y añadimos lo siguiente después de cerrar el div con la lista de archivos:
En el css /www/css/style.css añadimos al final:
En el js /www/js/script.js añadimos tras la función navegarPorCarpetas() lo siguiente:
Ahora prepararemos el lado del servidor. Modifica el archivo /www/ajax.php y añade al final antes de cerrar el php ( ?> ) lo siguiente:
Recuerda: Puedes crear tu programa para que sea usado tanto de manera personal como para empresas
Los programas personales son aquellos que son usados por los usuarios donde ellos y solo ellos (salvo que el programa en sí tenga la capacidad particular) de controlar el programa, instalarlo, desintalarlo y solo ellos (salvo que el programa tengo otras particularidades) tienen acceso a sus propios datos.
Los programas para empresas tienen la capacidad de pertenecer a una empresa. Todas las empresas tienen al menos un administrador que tendrá acceso siempre al programa y estos tienen el poder de dar acceso a diferentes trabajadores. Si tu programa es para empresas recibirá un identificador de la emrpesa y el identificador de usuario del trabajador. Estos programas estarán enfocados para que todos los trabajadores de la empresa que tengan acceso compartan los datos.
Cuando se publica un nuevo programa o una nueva versión se llevan a cabo varias modificaciones tanto en los .js como en los .css de tu programa. Recordar que estas modificaciones se llevan a cabo en el programa en producción, el código de tu programa de desarrollo no sufrirá ninguna modificación
- Eliminar comentarios
Se eliminan los comentarios.
- Rodeo con try/catch
Se añade try y catches cubriendo todo tu programa y en el interior de todas las funciones, de esta manera, si tu javascript sufre un error, solo afectará a tu programa y se registra el error. Podrás acceder a los errores que se hayan producido en tu programa desarrolladores.
- Minificación
Los archivos js son minificados.
- Eliminar comentarios
Se eliminan los comentarios contenidos en el css.
- Adición de identificador en selectores
Tu código css nunca debe salir de tu programa, para ello se añade el id #
- Minificación
El código en el css es minificado.
Actualmente estamos trabajando en automatizar la publicación de programas diseñados para abrir, modificar/editar y guardar archivos. Mientras tanto, ponte en contacto con nosotros si estás interesado en crear un programa de este tipo.
Si tienes cualquier duda, consulta o necesitas acceso a algún recurso o función, ponte en contacto con nosotros por cualquiera de los medios disponibles.
En este apartado encontrarás toda la información relacionada con la programación en el lado cliente. Esto incluyen los apartados de css y javascript.
En este apartado encontrarás toda la información relacionada con la programación en el lado servidor.
Por seguridad, las variables POST y GET son saneadas. Los siguientes caracteres ( ; , & , " , \ , < , > , : , ( , ) , \ , [ , ] ) son traducidos a su código html ( ej: ; -> ; ). Si quieres desanear una variable puedes hacer uso de la función delimpiarDeCaracteresEspeciales( $string ).
En este apartado encontrarás toda la información relacionada con la programación en el servidor PHP.
Aquí explicaremos cómo se carga tu programa y el funcionamiento del servidor PHP
Cuando el usuario abre inicialmente tu programa desde el escritorio, se carga el /www/index.php. El index.php debe tener tanto head como body. Cuando se carga el index.php se extrae de la zona de head los css y los js y los carga y se introduce el contenido de body en la ventana del programa.
Todo el contenido dentro de la carpeta /www será accesible desde la url: https://<dominioDondeSeEncuentraElServidor>/programa/<codigoDeTuPrograma>/. (Por ejemplo, si tuvieras el fichero prueba.php en /www accederías al mismo en https://<dominioDondeSeEncuentraElServidor>/programa/<codigoDeTuPrograma>/prueba.php).
Recordar que las carpetas /www/js, /www/css, /www/imagenes y /www/publico son accesibles por usuarios identificados en el CCR aunque no tengan acceso a tu programa.
Todos los demás archivos solo serán accesibles por usuarios que tengan contratado e instalado el programa.
Si el recurso no existe, se cargará el archivo /archivosweb/recurso.php. Atención: A este recurso podrán acceder usuarios identificados tengan o no contratado/instalado el programa.
Aquí explicaremos los objetos y las variables accesibles desde el servidor PHP
$GLOBALS['tieneAccesoAlPrograma'] - 1 si el usuario tiene instalado/contratado, 0 si no.
$GLOBALS['visitantePersona'] - Objeto de clase Persona con los datos del usuario identificado
$GLOBALS['visitanteMirandoEmpresa'] - Si el usuario está accediendo al programa directamente y no en nombre de una empresa devolverá false. En otro caso, objeto de clase Empresa con los datos de la empresa
- Objeto Persona
getIdPersona() - Devuelve el id del usuario
getNombre() - Devuelve el nombre del usuario
getApellidos() - Devuelve los apellidos del usuario
getIdPersona() - Devuelve el id del usuario
- Objeto Empresa
getCodEmpresa() - El id de la empresa
getNombreEmpresa() - El nombre de la empresa
En la carpeta raíz encontrarás dos carpetas: /archivosweb y /www. A continuación explicaremos cada carpeta.
A los archivos de esta carpeta no se podrán acceder directamente de manera pública (salvo /archivosweb/recurso.php el cual tiene 'cualidades' especiales). Los archivos especiales que se encuentran en esta carpeta son:
/archivosweb/recurso.php - Cualquier llamada a tu programa que trate de acceder a un recurso que no exista, se incluirá este archivo. Atención: A este archivo también se puede acceder aunque un usuario no esté registrado o identificado en el CCR. De esta manera se tiene la libertad de mostrar archivos de manera totalmente pública o gestionar tu propio sistema de url friendly.
Cualquier usuario identificado y con acceso al programa podrá acceder a cualquier archivo de esta carpeta. Esta carpeta contiene por defecto tiene 3 carpetas: 'css', 'js' e 'imagenes'. Estas carpetas se crean automáticamente para ayudarte a organizarte pero salvo la carpeta imagenes (a continuación explicamos por qué) no son obligatorias. Aún así, existen 4 nombres de carpetas que tienen la propiedad de ser accedidas de manera pública si un usuario está identificado en el CCR pero no necesariamente tiene acceso al programa. Estos son: /www/css, /www/js, /www/publico y /www/imagenes.
A continuación explicamos los archivos especiales en la carpeta /www
/www/imagenes/logo.png - Este será el logo de tu programa. Te recomendamos un png de tamaño 200px por 200px
/www/index.php - Este es el archivo que se carga al abrir tu programa. Explicamos más detalles acerca de su funcionamiento en Lado Servidor -> Servidor PHP -> Proceso de carga
/www/ajax.php - Este es el archivo al que el sistema CCR hace llamadas como por ejemplo para confirmar una compra.
En este apartado encontrarás toda la información relacionada con el javascript de tu programa. Tanto las variables, funciones y eventos específicos del CCR.
Aquí encontrarás todo el CSS que heredará tu programa para hacer más fácil y se adapte mejor tu programa al estilo del CCR. Actualmente no existen temas pero en un futuro pueden existir y puedes los usuario preferirán que se adapte a su diseño deseado.
Con las siguientes funciones podrás recuperar los datos del usuario que está accediendo a tu programas. Existen las siguientes funciones:
Con esta función puedes recuperar los datos del usuario:
ccr_funciones.usuario.recuperarUsuario()
id - El id del usuario
nombre - El nombre del usuario
apellidos - Los apellidos del usuario
Si el usuario está accediendo a tu programa como parte de una empresa esta función devolverá los datos de la empresa. Si no es así, devolverá false.
ccr_funciones.usuario.recuperarEmpresa()
id - El id de la empresa
nombre - El nombre de la empresa
Las siguientes funciones son accesibles desde el javascript de los programas en el lado del cliente.
Existen varios tipos de funciones (seguridad, archivos, sistema...) los cuales enumeramos aquí y detallamos en sus secciones.
Todas las funciones son asíncronas y se devolverá la respuesta en un callback en una variable de la llamada a la función. Las funciones callback devolverán las siguientes variables y en este orden salvo especificado:
error - null si se ha podido resolver correctamente la llamada a la función. Un JSON en otro caso. El JSON en caso de error será de la siguiente forma:
{
codigo : numero, (Un número que representará el error producido. Cada función especifica el significado de sus códigos de error)
mensaje : frase (Una frase sencilla explicativa del error que se ha producido)
}
resultado - La respuesta de la función
Si tu programa necesita guardar y hacer uso de contraseñas en claro de los usuarios, deberás hacer uso de las siguientes funciones: ccr_funciones.seguridad.recuperarPassword y ccr_funciones.seguridad.guardarPassword.
En el CCR, buscamos proteger lo máximo posible a los usuarios. Para ello, cuenta con un sistema para almacenar de manera independiente y segura las contraseñas que necesiten guardar los programas.
Cuando un programa necesita guardar una contraseña, deberá llamar a la función ccr_funciones.seguridad.guardarPassword pasando al sistema la contraseña a guardar como variable. En ese momento, el sistema pedirá al usuario que introduzca su clave de acceso al CCR para cifrar la contraseña que el programa desea guardar, de esta manera, la contraseña nunca llegará a nuestros servidores en claro.
Esta llamada devolverá un código que representará la contraseña y será lo que almacene el programa en su base de datos. De esta manera, los usuarios estarán tranquilos sabiendo que ningún programa rebelde podrá hacer uso de sus contraseñas sin su consentimiento.
Cuando el programa necesite hacer uso de la contraseña, deberá llamar a la función ccr_funciones.seguridad.recuperarPassword pasando como variable el código de representación de la contraseña y se le solicitará que introduzca su clave de acceso para descifrarla.
*No se requerirá al usuario que introduzca su clave de acceso al CCR para cifrar o descifrar la contraseña si ya lo ha hecho en los últimos cinco minutos.
Con esta función puedes solicitar al CCR que guarde una contraseña del usuario:
ccr_funciones.seguridad.guardarPassword( password , callback() )
password - La contraseña del usuario que el programa quiere guardar
callback ( error , codigo ) - La función guardarPassword devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El usuario ha rechazado escribir su clave de acceso al CCR para poder cifrar la contraseña.
codigo - Código que representará la contraseña y será lo que el programa deba guardar para poder recuperar la contraseña del usuario
Esta función sirve para recuperar la contraseña en claro que hayas guardado anteriormente con "guardarPass". Así funciona:
ccr_funciones.seguridad.recuperarPassword( codigo , callback() )
codigo - Código que se le devolvió cuando llamó a la función guardarPassword
callback ( error , password ) - La función recuperarPassword devolverá la respuesta mediante este método. La descripción de sus variables son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El usuario ha rechazado escribir su clave de acceso al CCR para poder cifrar la contraseña.
3 - El usuario ha solicitado cambiar su clave de acceso al CCR mediante el método de 'no recuerdo la clave de acceso' y por tanto, no puede descifrar la contraseña. En este caso, todas las contraseñas que el programa tuviera guardadas, no podrán ser recuperadas.
4 - No existe contraseña para ese código
password - La contraseña del usuario
Cambia la contraseña guardada anteriormente con "guardarPass". Así funciona:
ccr_funciones.seguridad.actualizarPassword( contraseña , codigo , callback() )
contraseña - Nueva contraseña en claro a guardar
codigo - Código que se le devolvió cuando llamó a la función guardarPassword inicialmente y se quiere modificar
callback ( error ) - La función actualizarPassword devolverá la respuesta mediante este método. La descripción de su variable es:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
2 - El usuario ha rechazado escribir su clave de acceso al CCR para poder cifrar la nueva contraseña.
3 - El usuario ha solicitado cambiar su clave de acceso al CCR mediante el método de 'no recuerdo la clave de acceso' y por tanto, no puede descifrar la contraseña. En este caso, todas las contraseñas que el programa tuviera guardadas, no podrán ser recuperadas.
4 - No existe contraseña para ese código
Esta función sirve para eliminar una contraseña guardada anteriormente con "guardarPass". Así funciona:
ccr_funciones.seguridad.eliminarPassword( codigo , callback() )
codigo - Código que se le devolvió cuando llamó a la función guardarPassword
callback ( error ) - La función recuperarPassword devolverá la respuesta mediante este método. La descripción de su variable son:
error - Sus códigos de eror son:
1 - Se ha producido un error genérico
4 - No existe contraseña para ese código